No connection pool
One HTTPS request per statement. No sockets to keep warm, no pool to size, no driver to install — which is what makes it usable from a serverless function that lives for 200 ms.
SQLite · served from S3
Every acknowledged write is in object storage before the response leaves the building.
No driver to install. One HTTPS request per statement.
POST /v1/databases/db_production/query
{ "sql": "INSERT INTO events (kind) VALUES (?)",
"params": ["signup"] }
{
"columns": [],
"rows": [],
"rowsAffected": 1,
"lastInsertRowid": 1,
"epoch": 3,
"txid": 412,
"durability": "durable",
"waitedMs": 118
}
Measured on the deployed stack, not estimated.
One HTTPS request per statement. No sockets to keep warm, no pool to size, no driver to install — which is what makes it usable from a serverless function that lives for 200 ms.
Actual SQLite, not a wire-compatible reimplementation. Your indexes, RETURNING, window functions, CTEs, and foreign keys all behave the way the SQLite documentation says.
A durable write costs about 120 ms, because it is two sequential round trips to object storage. Reads served from the owning worker are sub-millisecond.
There is exactly one ambiguous outcome in the whole API, and it is named rather than hidden behind a retry.
The contract
The bytes covering that write are in object storage. Not in a buffer, not on one machine’s disk, not queued for replication.
If every machine we run were destroyed the instant after you received the response, that write would still be there when a replacement came up.
The response says so explicitly — durability, txid, epoch, waitedMs — and the same three facts come back as headers, so a client that only reads headers does not have to parse the body.
| Measurement | p50 | p95 |
|---|---|---|
| Durable write, one transaction per batch | 119 ms | 157 ms |
| Read served by the owning worker | < 1 ms | < 1 ms |
| A raw 4 KB PUT to the same bucket | 32 ms | 38 ms |
Object storage answers a single PUT in about 32 ms, yet a commit takes 119 — a commit is two sequential round trips.
Is this the right database for you?
Quickstart
Everything below is plain curl against the live API. If you do not have a token yet, sign up, create a database, and create a key on it.
curl $BASE/v1/databases -d '{"name":"production"}'
{"sql":"CREATE TABLE events (id INTEGER PRIMARY KEY, …)"}
DDL is a write like any other — durable by the time you read this.
{"sql":"INSERT INTO events (kind) VALUES (?)","params":["signup"]}
Always bind values rather than interpolating them into the SQL.
{"sql":"SELECT id, kind FROM events ORDER BY id"}
Rows are arrays, not objects — duplicate column names are legal SQL.
POST /v1/databases/$DB/batch — three statements cost ~120 ms
The latency is one round trip per batch, not per statement. Batch aggressively.