It's the database I always wanted.
After years of wrestling with database setups, fighting for end-to-end types, and reminiscing about Meteor's glory days, I've found my new home: Convex.
The Pain I Left Behind
MongoDB
I used to love MongoDB. The reactivity that oplog allowed, especially in Meteor during its peak years, felt like magic. But let's be honest—Mongo was never truly meant for realtime. It was a workaround, not a solution.
For every small project, I faced the same dilemma:
- Reuse an existing database deployment — which often felt wrong, maybe even risky. Different projects with different concerns, all sharing the same instance.
- Spin up a new one — and pay $10/month minimum for a slow, underwhelming instance. Even for a tiny side project. And if it suddenly needed scale? Messy upgrades with downtimes.
And the types? Sure, they were possible to get with TypeScript and Mongo, but it was always tricky. You could set up all the right schemas, only to discover that some old migration script had inserted documents with a completely different shape. The trust was never quite there.
DynamoDB
For enterprise projects, like a very high-scale project I worked on for 2K Games, processing realtime data from gamers, I would use DynamoDB. I even created cdk-typescript-tooling to help with the setup and management of DynamoDB tables and Lambda function, it allowed tight setup, deployment, and management of the infrastructure, instant redeploys, end-to-end types. Also, dynamodb-testing-tool to help with the testing of DynamoDB code. But, for how powerful it was, it made things that were trivial in MongoDB, or PostgreSQL, much more complex. Simple queries were something you had to really plan ahead for.
What Makes Convex Different
I hate clicking around dashboards. I have bad memory. I want to have all the knowledge, the configuration, and the history of the change in my git repository. I also hate doing the same thing over and over - with code, if I do something once, I often reuse it for years. But dashboards? Not only I have to do the same mundane configuration every time, the dashboards can often change every few months, or fail in some weird way, making me guess whether I'm doing something different or if there is some new bug.
Convex is an amazing database combined with a backend, all defined in TypeScript. It gives you:
- Generated queries and mutations — Import them directly into your frontend. No manual API layer needed.
- End-to-end type safety — From database schema to React component, everything is typed. This makes it super easy for me, but also—and this is becoming increasingly important—for AI Agents, which understand the codebase end to end and, with proper tooling and the right prompt, can make changes that work on the first try.
- Reactive by default — Like Meteor was, but better. (I do miss the DX of just using minimongo, but I also understand its caveats especially the scaling issues and maintainability.) In Convex - whenever you make a query (any query!) it observes changes. Inserts and updates automatically refresh the relevant queries. No polling, no manual cache invalidation. There is a bit of extra work to get optimistic updates, but its a repeatable pattern, and with the types, once you show agents an example, they can just do it themselves.
It's built by former Dropbox engineers. These folks know distributed systems. They know scale. And at the end of 2024, they secured substantial funding, which tells me this isn't going anywhere.
The BookGenius Rewrite
I was convinced enough to rewrite BookGenius from a custom Cloudflare (r2+workers as a "storage db") solution entirely on Convex. Took me about 3 weeks. The results?
You can now edit books directly from within the app itself. Everything optimistically updates. Click save, see the change immediately, and trust that it persisted correctly. The kind of UX that used to require careful React Query setup, optimistic update handlers, and rollback logic—it just works out of the box.
And it still uses r2 for delivering files to the user. I built my asset manager on top of Convex's r2 component. So, all in all, the whole system is virtually free under normal usage, and at the same time its ready if tomorrow I'm hit with viral traffic.
The Pricing That Makes Sense
Unlike Mongo where I was paying for every single project, Convex flipped the model:
- Free tier — Start for free. Create up to ~50 databases. No credit card, no "free trial" nonsense. The free tier is very generous, and unlike many "free tier DBs", apps on it run as fast as with the pro tier.
- Pro tier — $25/month for your entire account. Not per database. Not per project. Your whole account. Creating a new "DB" is one cli command, and everything is setup and ready. Brilliant. I made a bunch of small apps just for fun. It doesn't feel like I'm actually using a DB.
Looking Ahead
I see the same opportunity here that I saw with Meteor and later with Apollo. A technology that genuinely makes developers' lives better, with a team that understands the problems deeply.
Unfortunately, Meteor got abandoned, and Apollo focused on the enterprise. I can't complain, because the company I was a co-founder of - xolv.io - was the first official Apollo Development Partner, and we've had a good run helping large companies implement GraphQL into their systems.
But that was never fun, for small projects it was an overkill. And it still required a separate DB anyway.
2026 is my year of going all-in on Convex. I'll be building, writing, and likely contributing to the ecosystem. If you've been frustrated by the same database problems I have, give it a look.
It might just be the database you always wanted too.