Why SQLite?

Most databases need a separate server running alongside your app — PostgreSQL, MySQL, MongoDB, Redis all require you to install, configure, and keep a process running. During development that often means Docker, which eats RAM and adds yet another thing that can break.

SQLite is different. It's just a file.

No server, no setup

The database is up when you run pnpm dev. It's down when you hit Ctrl+C. No Docker, no background processes, no ports to manage, no "is the database running?" debugging.

Want to start fresh? Delete the file. Want a backup? Copy the file. It's that simple.

No port juggling

You don't realize how much pain port mapping causes until you stop dealing with it.

With server-based databases like Postgres, each project runs its own database server in Docker — but only one can use port 5432 on your machine. So you remap the second project to 5433, the third to 5434, and track each in a .env file.

Now multiply that across team members, each running different combinations of projects, each with their own Docker Compose port mappings. It becomes a mess of conflicting .env files and "works on my machine" bugs. SQLite has none of this — each project just has its own .db file.

Perfect for building lots of apps

Imagine you want to build 100 small apps to experiment with ideas. With Postgres, that's 100 database servers you'd need running — or one shared server with 100 databases to manage. With SQLite, each app is just a .db file sitting quietly on disk until you need it.

Not a toy

SQLite handles billions of rows. It powers every iPhone, every Android phone, every browser, and every Mac. It's the most deployed database engine in the world — by a wide margin. Your app won't outgrow it.

Production-ready with Turso

SQLite runs inside your app — it's not a standalone server that accepts connections over the network.

That's great for development, but in production you need your database accessible from a cluster of hosted servers. That's where Turso comes in — it runs SQLite as a hosted service. Your Drizzle queries don't change; you just point to a different URL. Free tier included.

The right trade-off

Could you use Postgres? Sure — it handles more concurrent writes and has more features. But for the vast majority of web apps, SQLite is faster, simpler, and cheaper. You can always migrate later if you outgrow it. Most apps never will.