Authentication
Sign-up, sessions, eight presets
Database
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.
● you write three · we keep five
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.
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
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.
Sign-up, sessions, eight presets
Files, signed links, no egress
Thirty-seven tools for your agent
Give it a backend.