zerolith.ioChecking…
Database · Private per account · Hosted in France

Serverless database, private and hosted in France

Every account can provision its own SQL database. It lives in your isolated space, sleeps alongside your functions, and only your account's functions can reach it.

What you get

One database per account, provisioned in a single request from the dashboard, the API or an AI agent. You get a full SQL engine (tables, indexes, transactions, standard queries), not a stripped-down key-value store.

Under the hood it is libSQL, a SQLite derivative built to be queried over the network. Your functions connect over HTTP, and that is exactly what lets the database fall asleep and wake on demand; a permanent connection would prevent it.

  • The schema stays yours: designate one of your functions as the migrator and run it whenever you decide.
  • A firm storage tier, chosen at creation and raisable at any time.
  • Data is replicated continuously to object storage: that is the reference copy, not the instance's disk.
  • Nothing to install: the libSQL clients already ship in the Python and Node.js environments.

It sleeps with your functions

With no query for the configured idle window (10m by default, adjustable from 6 seconds to 1 hour), the instance stops. You pay no compute at all; only the storage tier you hold stays billed, because your data very much stays put.

The next query wakes the database automatically, in a few seconds of start-up, restore included. A longer idle window avoids paying that wake-up between two spaced-out requests, for a fraction of what a permanent instance costs.

If you would rather have consistently flat latency, always-on keeps one instance up permanently, at the corresponding compute cost. Both settings change at any time, and neither ever moves your data.

Who can reach it

The real question is: who can read your data? Only the functions in your account that you explicitly attached the database to. Here is what guarantees it, mechanism by mechanism.

  • No public address. The database is not exposed to the internet. It only has a cluster-internal address, injected into your functions, and there is no URL to type into a browser.
  • A walled-off space. Your account gets its own Kubernetes space, with a network policy that denies everything by default: another account's pods have no route to yours.
  • A token specific to YOUR database. Access requires a signed token derived from this database's own identifier. Another database's token does not open it: it answers "unauthorized". We verify this against a live cluster on every release.
  • A token nobody reads. It is returned by no API, no dashboard page and no AI-agent tool. It is mounted from a write-only secret, and only into the functions you attach.
  • Storage credentials that never travel. The object-storage keys stay inside the database server: your own functions never see them, and neither does an AI agent driving your account.

Revoking access is just as explicit: detach the function and it loses the environment variable on restart. If you suspect a leak, rotate the database's token; the old one stops being accepted and the attached functions receive the new one.

Backup, export and retention

You can generate a SQL export of your database at any time: a compressed file, downloadable for 24 hours through a signed link, restorable anywhere with the standard sqlite3 tool. No software of ours is needed to read it back, it is ordinary SQL.

The service is in beta: keep your own backups. If your account balance stays at zero, data is kept for 7 days and then permanently deleted; topping up before the deadline cancels the deletion. Deleting a database also erases its data from object storage, while exports you already generated are kept.

What it costs

Two axes, both usage-based. The database instance is billed at the same compute rate as a function of the same size, and nothing at all while it sleeps. The storage tier you hold is billed €0.40 per GB per month, prorated, whether it is awake or not: the bytes take up room either way.

The tier can be raised at any time and takes effect on the next restart. It cannot be lowered.

Get started » Docs

Does my data survive the database going to sleep?

Yes. The reference copy is not the instance's disk but object storage, fed continuously. When the database sleeps and wakes again it resumes from that state, and that is exactly what the inventory example in our documentation demonstrates live.

Can anyone else read my database?

No. The database has no public address, it lives in your account's walled-off space, and access requires a signed token derived from this database's own identifier: a token belonging to another database is refused. Only the functions in your account that you attached receive that token, and it is displayed nowhere.

Can I get my data out if I leave?

Yes, at any time and without asking us: the export produces a standard SQL file you restore with sqlite3, on your machine or at any other host. There is no proprietary format to decipher.

Can an AI agent connected to my account manage the database?

Yes, and without ever seeing your credentials. An agent can create the database, attach it to a function, run your migrations, change the tier or trigger an export. The access token and the storage keys are never handed to it.