Visual SQL query builder for your CSV files. Drop CSVs into the browser, get a live schema with inferred relationships, and build real SELECT queries by clicking — no SQL typing required. Every query runs against an in-memory SQLite database and returns real rows plus the exact SQL it generated.
- Drag-and-drop CSV ingestion — parse multiple files at once, add more incrementally. Delimiter (
,;tab|), quoted fields, and BOM handled automatically. - Automatic schema inference — column types (
INTEGER/REAL/TEXT), primary keys (anINTEGER idcolumn), and foreign keys detected from<name>_id→<name>snaming heuristics. - Visual query builder — pick
FROM, addJOINs (INNER / LEFT / RIGHT),SELECTcolumns with aggregates (COUNT/SUM/AVG/MIN/MAX),WHEREconditions (AND/OR),GROUP BY,ORDER BY,LIMIT, andDISTINCT. - Query graph — see tables and their join relationships visualized.
- Generated SQL + live results — the SQL is shown and results returned (capped at 1,000 rows for display) with query timing.
- Safe by design — the client only sends a structured query model; SQL is rebuilt on the server,
SELECT-only. No raw SQL from the client is ever executed. - Light / dark theme.
- You drop CSV files. The server parses them, infers column types and foreign keys, and loads the rows (up to 100k per table) into a fresh in-memory SQLite database (Node's built-in
node:sqlite), one per session. - As you build a query in the UI, a structured
Queryobject is maintained. - On run, the server turns that model into a parameter-free
SELECTstatement, executes it, and returns the columns, rows, and elapsed time.
Nothing is persisted — each upload session lives in memory and disappears when the server restarts.
Requires Node.js 22+ (for the built-in node:sqlite module).
cd web
npm install
npm run devOpen http://localhost:3000 and drop in some CSVs. The samples/ directory ships a small e-commerce dataset (customers, orders, order_items, products, categories, employees, shipments, reviews) with ready-made relationships to try joins.
| Command | Action |
|---|---|
npm run dev |
Start the dev server |
npm run build |
Production build |
npm run start |
Serve the production build |
npm run lint |
Lint |
- Next.js 15 (App Router) + React 19
- Node.js built-in
node:sqlite— no external database - Tailwind CSS 4 + shadcn/ui (Radix primitives)
- Max 20 MB per CSV file, 100,000 rows loaded per table.
- 1,000 rows returned per query (results are truncated for display, not the underlying query).
- Foreign keys are inferred from naming conventions, so unusually named columns may not auto-link — you can still join them manually.
web/ Next.js app (UI + API + SQLite/CSV engine)
samples/ Example e-commerce CSV dataset