Turso

turso.techcontributed by Samuele Ongaro

YES

Replaceable in one session with an AI coding agent.

SQLite as a hosted service with replicas close to your users and embedded replicas that let an application read locally and sync in the background.

Promptfree, for everyone, and the only version there is
Build me the SQLite setup I actually need instead of paying for Turso: replicas near my readers, a local read path, and a way back from a bad afternoon.

Read this first: what the fee buys is real — replicas in many regions kept in sync, embedded replicas so a read never crosses the network, branching, and point-in-time restore. Before replacing it, be honest about whether you need any of it. A single SQLite file on one machine, with a replication stream to object storage, serves an enormous number of applications and is what most of this prompt is about. Global read replicas are a different problem and are worth paying for if you actually have readers on three continents.

STACK
- SQLite through better-sqlite3, WAL mode
- Litestream for continuous replication to object storage. Do not write a replicator
- libSQL if you want the embedded-replica behaviour, which is the part that is genuinely hard to reproduce
- Node 20+ with Fastify for the application
- Caddy in front

THE SINGLE-MACHINE SETUP, WHICH IS PROBABLY ENOUGH
- WAL mode, a busy timeout, synchronous set to normal, and foreign keys on. Those four settings are most of the performance conversation
- One writer. SQLite serialises writes, and a write queue in the application is simpler and faster than fighting for the lock
- Reads are a local file read: microseconds, no network, no connection pool. That is the property people pay a hosted service to get back
- Prepared statements cached, and indexes chosen deliberately rather than added after a slow afternoon
- A modern disk will handle thousands of writes a second. Measure yours before assuming you have outgrown it

CONTINUOUS REPLICATION, WHICH REPLACES POINT-IN-TIME RESTORE
- Litestream streams the WAL to an S3-compatible bucket continuously, so the recovery point is seconds rather than a night
- Restore to any moment within the retention window, which is the point-in-time restore feature, free
- Snapshots on a schedule, WAL segments between them, retention configured
- A restore rehearsed onto a clean machine, with the time it took written down. An untested restore is not a restore, and this is the entire disaster-recovery story
- Verify the restored file: run an integrity check and a query that exercises the newest data

READ REPLICAS, HONESTLY
- A read replica is another machine restoring the same stream and following it. Reads there are local; writes still go to the primary
- The lag is seconds. If your application reads its own writes, either route those reads to the primary or accept the staleness deliberately — this is the trap in every read-replica design, and it must be a decision rather than a discovery
- Failover is manual unless you build it, and building automatic failover correctly is harder than it looks. Write down the manual procedure and rehearse it instead
- Embedded replicas, where the application holds a local copy and syncs in the background, are the genuinely clever part of the product being replaced. libSQL gives you that; reproducing it from scratch is a project of its own

BRANCHING
- Branching a database for a preview environment is a copy: `VACUUM INTO` a new file, point the preview at it, and delete it when the branch closes
- That is one command and a cleanup job, and it covers what branching is actually used for
- Never point a preview at production data without anonymising it first — write the anonymiser as part of the branch script, not as a separate thing somebody remembers

MIGRATIONS
- Numbered files, applied once, in order, recorded in a table
- Backwards-compatible in both directions across a deploy: add a column, deploy, use it, remove the old one in a later deploy. Never in the same one
- Run inside a transaction, and test each one against a restored copy of production before it goes near production

WHAT TO WATCH
- Database file size and growth rate
- WAL size, which growing without bound means a reader is holding an old snapshot
- Replication lag and the age of the last successful upload — a replication that has quietly stopped looks exactly like one that is working
- Slow queries logged with their plans
- Free disk, with an alert well before it matters

WHEN THIS STOPS BEING ENOUGH
- Write it down before you need it: many concurrent writers, a dataset larger than the disk, or genuine multi-region writes
- The exit is a client-server database with the same schema, and knowing that in advance is what makes the simple choice safe rather than reckless

WHAT MATTERS MOST
Replication and the restore rehearsal. Set up Litestream on day one and restore from it onto a clean machine before you trust the database with anything. Everything else here is configuration; that is the part that decides whether a bad afternoon is an inconvenience or the end.

Give me the configuration, the Litestream setup, the backup and restore scripts, the branch script with anonymisation, the migration runner, the monitoring checks, and a README that opens with the restore rehearsal.

What you lose

  • Read replicas in many regions, kept in sync, which is the product
  • Embedded replicas so a read never crosses the network
  • Branching and point-in-time restore for SQLite

If you would rather not build

  • Postgres, if you need concurrent writers

What it costs

read from their page 17 Aug 2026

PlanBilled monthlyBilled yearlyLast read
—$5.99/mo—17 Aug 2026

Their pricing page is where these came from. Seeing a different price? Tell us.

The escape hatch

open source · no votes, no paid placement

Litestream

$0

Streams SQLite changes to object storage for point-in-time restore.

benbjohnson/litestreamfree · open source

libSQL

$0

The SQLite fork Turso is built on, runnable as your own server.

tursodatabase/libsqlfree · open source

Why this verdict

our own opinion · changed only by a person

80/100

Verdict yes at 80. A local SQLite file is faster than any hosted replica for a single-region application, and Litestream covers durability.

History

tracked since 10 Aug 2026 · nothing is ever overwritten

Interest · last 30 dayspeak 3/day
views012330 Aug4 Sept9 Sept14 Sept19 Sept24 Sept28 Sept
— views— prompt copies none yet— votes none yet

Questions about Turso

answered from the record above

Is Turso free?

No — the plan we track is $5.99 a month. Developer at $5.99/month — the tier formerly called Starter; Scaler is $29 and Pro $499.

Can you replace Turso by building your own?

YES. Replaceable in one session with an AI coding agent. Replacement score 80 out of 100, build time one session. Read what you lose before you decide.

How much does Turso cost?

$5.99 a month on Developer — $71.88 a year. Recorded 17 Aug 2026.

What do you lose by replacing Turso?

Read replicas in many regions, kept in sync, which is the product; Embedded replicas so a read never crosses the network; Branching and point-in-time restore for SQLite. If any of those carry weight for you, keep paying.

Is there an open-source alternative to Turso?

Yes: Litestream, libSQL. The prompt on this page is for when you want it your way instead.

Related entries

same category first, most replaced first

All 21 in Hosting & databases

Not sending yet

Every week, something stops being worth paying for.

New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.

free forever · no tracking pixel · stored here, never passed to anyone

Esc