Convex genuinely wins the thing it claims to win. One TypeScript project holds the schema, the server functions and the client types; queries are reactive by default with no subscription plumbing; mutations are transactional with no connection pool to think about. Nothing else on this list gets a competent developer to a working realtime feature faster, and it is the roster's best fit for a coding agent because the whole surface is typed and in-repo. Its transaction model — optimistic concurrency with automatic retries — is also the only one here that makes serialisable writes the boring default rather than something you opt into.
The cost is not the price and it is not the limits. It is that every read and write in your application is expressed in Convex's query builder, executed by Convex's runtime, and delivered by Convex's reactivity. There is no SQL to port. Leaving is a rewrite of the data layer plus the render model that hangs off it, and open-sourcing the backend does not change that. Convex self-hosting is real and it does bound the vendor risk, but self-hosting Convex is still Convex. Score the exit honestly before you start, not after.
If you want most of the productivity for a fraction of the exit cost, Supabase is the pragmatic answer and has been for three years. Your data is Postgres, your queries are SQL or PostgREST over SQL, and pg_dump is a complete escape hatch. What you give up is coherence: auth, storage, realtime and edge functions are four products stitched together, realtime is a change feed you subscribe to rather than a reactive query, and types come from a CLI step rather than inference. Nhost is the same trade with Hasura's GraphQL in place of PostgREST — smaller, quieter, and worth a look if GraphQL is already in your stack.
The interesting movement is at the sync layer. ElectricSQL and Zero both refuse to own your database. Electric streams read shapes out of your Postgres over HTTP and leaves writes to your existing API; Zero puts a query-shaped client cache in front of Postgres with server-side mutators. That inverts the lock-in question — you adopt a sync engine, not a backend — which is why they score 2 and 3 on exit cost while delivering local-first behaviour Convex does not have at all. They are also younger, thinner on batteries (no storage, no auth, no cron), and will make you build the parts Convex hands you.
Firebase is the cautionary tale at the other end. It is the only entry here with no self-host path, a proprietary security-rules language, an export format only Firestore can read, and a document model that quietly shapes your schema around its query limitations. It still has the deepest mobile SDKs and Google's operational record, and for a consumer mobile app that will never migrate, that is a defensible choice. For anything you expect to still be running and still be changing in five years, it is the worst deal on this page.