A web-based SQLite viewer and editor. Upload .db files, browse tables, run SQL queries, edit data inline, and export results — from any machine.
Live app: rowcraft-jet.vercel.app
- Upload SQLite
.dbfiles (stored securely in the cloud, per account) - Sidebar with expandable table list and per-column checkboxes — selecting/deselecting columns rewrites the
SELECTin the editor - Group tables into collapsible folders for organisation — drag-and-drop to move tables between groups
- Row count badges per table; total record count shown in results even when results are limited
- SQL editor (CodeMirror 6) with syntax highlighting, SQL autocomplete (table and column names), and line wrapping
- Run (Ctrl/Cmd+Enter) or Run Selected — runs the highlighted selection if present, otherwise the full query
--comment support; Ctrl+K+C / Ctrl+K+U to comment/uncomment (VS Code style)- Query history (last 50 per database, with timestamps)
- Save and reload named queries per database
- Filter rows client-side with the quick filter bar
- Sort by any column (click header); multi-column sort with Shift+click
- Freeze 0–3 columns so they stay visible during horizontal scroll
- Pagination with configurable page size (25 / 50 / 100 / 500)
- Export to CSV (UTF-8 BOM for Excel compatibility), named after the active table
- Inline row editing — click the pencil icon on any row (only available when browsing a specific table)
- Delete rows with a single click (with confirmation)
- Create new rows via the "+ New row" button
- Explicit NULL vs. empty string control per field (∅ toggle)
- Changes are in-memory (sql.js runs client-side); click Save to write back to cloud storage
- Open datasets from another local or desktop app without uploading that app's data to Rowcraft cloud storage
- Connect through a browser-to-localhost bridge owned by the source app
- Browse, filter, sort, page, and edit connector datasets in Rowcraft
- Stage create/update/delete changes back to the source app; the source app remains the system of record
- Keep connector mode separate from Rowcraft's cloud
.dbupload/save flow
- Add, rename, and drop columns via the ⚙ schema editor in the sidebar
- Rename tables
- Import a CSV file to create a new table from it
- Download the current database as a
.dbfile
- Light / dark / system theme (persisted)
- Resizable SQL editor pane (drag the handle between editor and results)
- Keyboard shortcut overlay (press
?)
| Layer | Choice |
|---|---|
| Framework | Next.js 16 (App Router) |
| Auth | Clerk |
| File storage | Supabase Storage |
| SQL engine | sql.js (SQLite WASM, runs entirely client-side) |
| SQL editor | CodeMirror 6 via @uiw/react-codemirror |
| Styling | Tailwind CSS v4 |
| Deployment | Vercel |
Sign up for a free account at rowcraft-jet.vercel.app — no installation required.
Connectors let another app open one of its datasets in Rowcraft as an editable grid while keeping that app in control of the data. Rowcraft is intentionally passive in this flow: it defines the connector protocol, calls the source app's localhost bridge from browser-side code, and stages edits back through that bridge. Rowcraft does not know about specific apps and does not upload connector datasets to Supabase.
Source apps launch Rowcraft with:
/connectors/connect?bridge={encodedBridgeBaseUrl}&token={oneTimeToken}&dataset={encodedDatasetName}
Example:
https://rowcraft-jet.vercel.app/connectors/connect?bridge=http%3A%2F%2F127.0.0.1%3A49152%2Frowcraft%2F&token=abc&dataset=accounts
The source app must expose a localhost bridge under /rowcraft/, with API routes under:
{bridge}/api/v1/...
Rowcraft accepts only loopback HTTP bridge URLs:
http://127.0.0.1:{port}/rowcraft/http://localhost:{port}/rowcraft/http://[::1]:{port}/rowcraft/
The connector bridge must provide:
GET /api/v1/healthPOST /api/v1/session/exchangeGET /api/v1/contextGET /api/v1/datasetsGET /api/v1/datasets/{datasetName}/columnsGET /api/v1/datasets/{datasetName}/records?offset=0&limit=500POST /api/v1/datasets/{datasetName}/edit-sessionGET /api/v1/datasets/{datasetName}/edit-session/{editSessionId}/changesPOST /api/v1/datasets/{datasetName}/edit-session/{editSessionId}/recordsPATCH /api/v1/datasets/{datasetName}/edit-session/{editSessionId}/records/{rowId}DELETE /api/v1/datasets/{datasetName}/edit-session/{editSessionId}/records/{rowId}POST /api/v1/datasets/{datasetName}/edit-session/{editSessionId}/discard
Connector edits are staged. The source app decides when and how to apply staged changes to its own data store. For the full request/response contract, see docs/connector-bridge-protocol.md.
| Shortcut | Action |
|---|---|
| Ctrl/Cmd+Enter | Run query (or selection if text is selected) |
| Ctrl/Cmd+Space | Trigger autocomplete |
| Ctrl+K, Ctrl+C | Comment selection |
| Ctrl+K, Ctrl+U | Uncomment selection |
| ? | Show all keyboard shortcuts |