March 17, 2025·5 min read·engineeringsqlitedurabilitycloud

Turso puts object storage in the commit path

Turso Cloud leaves AWS beta with S3 Express durability and local disks used as a read cache. The architecture also changes what it means to deploy a SQLite-compatible service.

A database backup written after a transaction commits has a different role from storage that makes the commit durable. Turso's 17 March AWS launch puts S3 Express in the second category. The announcement says every commit makes data durable there, while local disks act as a cache for reads. That is the architectural change behind removing the beta label from Turso Cloud on AWS.

The launch follows a deliberate reduction in platform scope. Turso's January roadmap explains that maintaining Fly.io and AWS would divide engineering attention. It also favors synchronizing a database file to an application or device over maintaining the existing geographical edge-replica offering for new users. The AWS release needs to be understood within those choices.

I like SQLite's model of a database that belongs to the application and has a documented file representation. Synchronizing a native SQLite file preserves part of that appeal. A managed service still adds its own durability and operational contract, and the March announcement gives several useful details about where that contract now resides.

A local disk can become replaceable

In the announced design, local storage helps reads without being the only durable destination for a successful transaction. That distinction changes the relationship between a database and its compute server. If durable data survives outside the server, moving the database does not require preserving that particular local disk as its authoritative copy.

Turso says the combination of S3 and S3 Express makes databases movable between servers as load increases. The launch does not publish the full recovery protocol or a step-by-step failover algorithm. Its stated architectural property is narrower and useful on its own. The data's durable location is object storage, and compute can use locally cached copies to serve reads.

This does not mean each SELECT must download data from S3. The announcement explicitly assigns local disks the cache role. Read latency and durable write latency therefore follow different paths. A cache hit can use local data, while committing a transaction requires the announced durable destination. Describing the service as object-storage based should preserve that difference.

It also does not make the managed service equivalent to opening a file inside a process. The cloud server performs work beyond the local engine. A native SQLite file is valuable because applications can retain a local representation where the synchronization model supports it. The remote service remains responsible for coordinating the durable copy and its own compute resources.

Why multitenancy matters to the write path

The announcement identifies two reasons to consider S3 Express suitable for transactional writes. First, it cites the service's advertised single-digit millisecond latency. Second, Turso batches commits across databases in its multitenant architecture. The second point changes the economic unit of a storage request. One object-store operation need not correspond to one isolated customer's database transaction.

That is a statement about shared server implementation, not a change to SQL transaction boundaries. Batching work from several databases can amortize external operations while each database retains its own application-visible transaction. The launch does not describe the batch layout or the exact acknowledgement protocol, so there is no basis for inferring those details from the word multitenant alone.

Turso compares S3 Express latency with the latency of fsync() on EBS volumes. The relevant comparison is durable completion. A write copied into volatile buffering is not the same endpoint as a write whose durability requirements have completed. The announcement uses that comparison to explain why object storage can participate in the commit path at all.

The comparison does not establish that every workload has identical latency on the two architectures. It gives the design rationale stated by the provider. Application-visible time also includes the rest of the request path. Nothing in the launch supplies a universal throughput figure or a benchmark that can be transferred to an arbitrary application.

No cold starts refers to the server model

Turso says AWS databases have no cold starts because the multitenant server remains up and each database is a SQLite file within it. This removes the need to start a dedicated server process for every individual database access. The architecture can accommodate many databases without treating each one as an independently sleeping service.

That claim should not be expanded into a guarantee that every read has warm cached data. The same announcement identifies local storage as a cache. Server availability and cache contents describe different state. An always-running process can still need data that is absent from its local cache, even though it does not need to launch a new database server first.

This distinction matters for understanding the service's intended scale. The database is smaller than the server's unit of operation. Databases can share an active server, and the durable object-store representation allows placement to change. Those properties explain the announced absence of per-database cold starts without requiring a separate permanently running process for each SQLite file.

Compatibility and server implementation are separate choices

The January roadmap says the new multitenant server is a new proprietary implementation. It explicitly distinguishes that choice from relicensing libSQL's server components. The same document says users can still self-host libSQL and that the new server uses the same protocols. Calling the AWS launch simply a deployment of the open-source libSQL server would therefore lose an important distinction.

Protocol compatibility gives clients a way to communicate with different implementations. It does not make those implementations identical or give self-hosters the managed service's storage architecture. The launch's promise to synchronize into native SQLite files concerns the data and client experience. The January statement separately defines which server code the provider makes available.

I find the storage design interesting because it keeps a small database as the application-facing unit while sharing the cloud machinery beneath it. That is consistent with liking SQLite without assuming every SQLite workload needs a managed service. The choice depends on whether remote durability and synchronization solve a requirement the application actually has.

The migration policy has explicit dates

The launch schedules free-tier migration from Fly.io to begin on 21 March. It maps existing locations onto five AWS regions, including us-east-1, eu-west-1 and ap-northeast-1. Customers who have paid by 21 March can keep databases on Fly.io, and Turso says migration tools will be provided for those choosing AWS.

Bring-your-own-cloud remains a future offering in this announcement. Turso argues that object-storage durability makes it easier to provide, but does not announce its availability on 17 March. The shipped change is the AWS service leaving beta with the described durable write path. Its immediate operational consequence is that local disks supply read performance while S3 Express participates in making each commit durable.