Skip to content
Manybases

Database

One app. One database. Nothing shared.

Not a schema in a shared cluster — a real SQLite database of its own, with its own file bucket and its own worker, created in about six seconds.

Read the docs
habitsprive
  • nameTEXT
  • target_per_weekINTEGER
  • archivedBOOLEAN
  • idTEXT
  • owner_idTEXT
  • space_idTEXT
  • created_atTEXT
  • updated_atTEXT

● you write three · we keep five

Isolation is a binding.Not an if statement in a request handler.

A project gets its own SQL database, its own file bucket, and its own worker with only those two attached. That worker can reach nothing else — a property of the platform's bindings rather than a check we wrote and could get wrong.

So two projects on the same account are as separate as two projects belonging to two strangers. Calling one project's host with another's key is refused with the same neutral answer a project that does not exist would give.

The URL addresses; the key authorizes. This is also why there are no row-level security policies to write.

SQL, narrow on purpose.The whole grammar the API serves fits on nine lines.

grammar.sql
SELECT <cols|*> FROM <table> [WHERE <col> <op> <value> [AND ...]] [ORDER BY <col> [ASC|DESC]] [LIMIT <n>]
INSERT INTO <table> (<cols>) VALUES (<values>) [, (<values>) ...]
UPDATE <table> SET <col> = <value> [, ...] [WHERE ...]
DELETE FROM <table> [WHERE ...]
CREATE TABLE <table> (<col> <TEXT|INTEGER|REAL|BOOLEAN|JSON>, ...)
ALTER TABLE <table> ADD COLUMN <col> <type>
ALTER TABLE <table> DROP COLUMN <col>
ALTER TABLE <table> RENAME COLUMN <col> TO <col>
DROP TABLE <table>

Guard rails apply to the parsed statement — the unquoted table name, the statement type — never to its text, so case, quoting, backticks and comments do not get around them.

A statement that does not name its target is destructive, and confirms in two steps: the first call changes nothing and hands back a single-use token.

SQLite · one statement per request · 40 conditions · 50 rows a page, 200 at most

What it will not do.On purpose, and worth knowing before you build on it.

  • No joins, no OR, no aggregations. In a small app the front end assembles — and a query planner you never reason about is worth more than a JOIN you write twice a year.

  • No versioned migrations, and no point-in-time restore. Your export is your backup: a zip with a SQL dump, your files and a manifest, whenever you ask.

  • One sort column, and no offset pagination. Paging is by cursor, the only kind that stays correct while rows are being written.

Next.The parts this one leans on.

Storage

Files, signed links, no egress

MCP

Thirty-seven tools for your agent

Got another idea?

Give it a backend.