Hosted SQLite with indexed full-text search, a SQL and table editor, verified backups, one-click forks, import and export, and a typed JavaScript client. Create a database and ship.
No credit card. Unlimited databases sharing 3 GB, every feature included.
Not a generic keyword list — the real table and column names from the database you have open, with syntax highlighting and the queries you saved last week.
SELECT p.title, count(c.id) AS comments FROM posts p LEFT JOIN comments c ON c.post_id = p.id
So you can rehearse recovery without touching production.
| taken | size |
|---|---|
| today 07:00 | 8.4 MB |
| 2026-08-20 | 8.4 MB |
| 2026-08-12 wk | 7.6 MB |
One command writes them; --check fails CI when they drift.
$ npx usesqlite typegen Wrote ./database.types.ts — 6 tables.
const db = createClient<Database>(url); db.from('posts').eq('athor', 1); // ^ no such column
Sort, paginate, filter on several conditions at once, fix the typo in place.
| id | title | published |
|---|---|---|
| 1 | Shipping SQLite | 1 |
| 2 | Why WAL mode matters | 1 |
| 3 | Type-safe queries | 0 |
A real, separate file with its own keys. Break it freely.
See execution time and query history, inspect the plan, then apply a safe index recommendation in one click.
posts(published, created_at).Read/write for your server, read-only for the browser. Revoke one without touching the rest.
User input is always a parameter — never a string concatenated into a statement.
await db.sql`INSERT INTO posts (title) VALUES (${title})`; // Several statements, one transaction await db.batch([ { sql: 'UPDATE posts SET published = 1' }, { sql: 'DELETE FROM drafts WHERE id = ?', params: [id] }, ]);
await db.sql`INSERT INTO posts (title) VALUES (${title})`; // Several statements, one transaction await db.batch([ { sql: 'UPDATE posts SET published = 1' }, { sql: 'DELETE FROM drafts WHERE id = ?', params: [id] }, ]);
Rows, loading and error state, and writes that refresh the list when they succeed.
const { rows, isLoading, insert } = useTable('notes', { order: { column: 'created_at', direction: 'desc' }, limit: 20, });
const { rows, isLoading, insert } = useTable('notes', { order: { column: 'created_at', direction: 'desc' }, limit: 20, });
Create a managed FTS5 index from the table editor. Ranked matches, snippets and automatic synchronization keep search useful as rows change.
| rank | matching snippet |
|---|---|
| 0.96 | The hidden kernel discovers… |
| 0.91 | A luminous kernel balances… |
| 0.87 | The distant kernel connects… |
Drag in a SQLite file, replay SQL or load CSV. Export a native SQLite copy, a portable SQL dump or a table CSV whenever you need it.
No provisioning queue, no pooler to configure, no ORM to learn.
Name it and it exists — a real SQLite file in WAL mode, ready for its first statement.
CLOUD_SQLITE_URL into .env.local, straight from the Connect tab.
npx usesqlite typegen and your editor knows every table you just made.
One plan includes the tools that keep your data searchable, portable and recoverable.
data.db in git.Seven days, unlimited databases, no credit card. Create one and run a query inside a minute.