The SQL workbench for Parquet files. Query, explore, edit, and ship data from any Parquet file or folder โ with the power of DuckDB and the feel of a spreadsheet.
Quick start ยท Features ยท Performance ยท Technical specifications ยท Roadmap ยท Contributing
I started building ParaSQL while I was learning โ I was creating my own embeddings model for a larger product I had in mind.
A surprising amount of that work wasn't modelling at all: it was sorting through, cleaning, and modifying a lot of Parquet data. I wanted to open a file, fix rows and columns, and query across many files โ without writing a script for every small change.
So I started building the tool I needed. ParaSQL began as a single-file Parquet editor and grew into something bigger: a multi-file analysis and database management tool built on Parquet. It's free, open source, and runs entirely on your machine.
I didn't just want a Parquet viewer โ I wanted the Excel + Postgres of Parquet files: a complete local data workbench.
- Full DuckDB engine โ CTEs, window functions,
UNNEST,PIVOT-style aggregates, quoted identifiers, and everything else you expect from modern SQL. - Join across files. Every table in your workspace is one
SELECTaway:SELECT * FROM orders o JOIN customers c ON o.customer_id = c.customer_id. - Autocomplete over your real tables and columns, query history, and sensible guardrails: query results are read-only, capped, and destructive statements are rejected outside the editor.
- Virtualized to 500,000+ rows โ smooth scrolling regardless of file size.
- Sort, per-column filters, whole-table search, row selection, and
TSV/JSON/
WHERE-clause clipboard formats. - Inline editing with type-aware editors, insert/delete rows, add/drop/rename columns โ with undo/redo that round-trips exactly, including BLOBs, microsecond timestamps, arrays, structs, and maps.
- Add files or scan folders: each Parquet file becomes a queryable table. Mixed schemas are unioned automatically.
- Workspaces save to a portable
.parasqlfile with relative paths โ commit it, share it, reopen it on another machine. - Workspace tables are query-only for now โ multi-file editing is on the roadmap. Single files open in the full editor with atomic Parquet saves.
- Export tables and query results to Parquet, CSV, JSON, and Excel.
- Parquet codecs: SNAPPY, ZSTD, GZIP, LZ4, BROTLI, uncompressed.
- Every write is atomic โ a failed export never corrupts an existing file.
- Turn any query result into a bar, line, area, pie, or scatter chart.
- Choose X/Y columns and split series by a column โ charts save into the workspace and re-run their query when you reopen it.
- Rust + Tauri 2 โ no Electron, no JVM, no server. Installers around 10โ15 MB.
- Cold-starts in well under a second; queries stream from DuckDB as Arrow batches.
- Your data never leaves your computer. No accounts, no telemetry, no network calls.
- Strict CSP, capability-scoped IPC, local-only file access.
Coming soon: pivot tables, dashboards & notebooks, and AI-assisted dataset summaries โ still local, still private.
Real numbers from a 500,000-row Parquet file on Windows 11 (dev build, mid-range laptop โ your mileage will vary):
| Operation | Result |
|---|---|
| Open a 500,000-row Parquet file (editable table) | ~8 s cold, instant after |
| Page 10,000 rows (keyset pagination) | ~150 ms first page, ~200 ms subsequent |
| Full-table search across 500,000 rows | ~0.7 s |
| Multi-file join (100k ร 300k ร 20k rows) | ~1 s per query |
| Export 500,000 rows to Parquet | seconds, atomic |
The grid never renders more than the visible window, and queries never materialize more than you ask for.
- Data analysts who live in spreadsheets but receive Parquet.
- AI / ML engineers who need to inspect, fix, and version training data without writing a notebook cell for every glance.
- Data engineers who want to sanity-check pipelines without spinning up a warehouse.
- Anyone with a folder full of Parquet files and no good way to look inside.
Grab the installer for your platform from the
Releases page
(.msi / .exe for Windows, .dmg for macOS, .AppImage / .deb for Linux).
git clone https://github.com/harrisrauf/ParaSQL.git
cd ParaSQL
npm install
npm run tauri dev # or: npm run tauri buildPrerequisites: Node 20+, stable Rust, and (on Windows) the WebView2 runtime which ships with Windows 10/11.
npm install
npx tauri build --bundles nsisThat writes src-tauri/target/release/bundle/nsis/ParaSQL_<version>_x64-setup.exe.
Launch the installer straight from your terminal โ no folder browsing needed:
src-tauri\target\release\bundle\nsis\ParaSQL_0.2.0_x64-setup.exePlain npx tauri build builds both the .msi and the .exe setup; on macOS
and Linux the same command produces .dmg / .AppImage / .deb.
- Open a file (
File โ Open Fileโฆ) โ or open the bundled demo workspace atSample_data/parasql-demo.parasql. - Query it. Hit the Query tab and run:
SELECT p.category, SUM(oi.quantity * oi.unit_price) AS revenue FROM order_items oi JOIN orders o ON o.order_id = oi.order_id JOIN products p ON p.product_id = oi.product_id GROUP BY 1 ORDER BY 2 DESC;
- Edit it. Open a single file (
File โ Open Fileโฆ), double-click any cell,Ctrl+Zto undo, thenCtrl+Sto save it back to Parquet.
Workspace files are just JSON โ portable by design:
Keyboard shortcuts
| Shortcut | Action |
|---|---|
Ctrl+Enter |
Run query |
Ctrl+Z / Ctrl+Y |
Undo / redo edits |
Ctrl+S |
Save file (or workspace) |
Ctrl+C / Ctrl+A |
Copy selection / select all |
F2 / Enter |
Edit focused cell |
Tab |
Move across cells |
Shift+Click |
Extend selection |
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Svelte 5 UI (runes) โ grid, SQL editor, workspace shell โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Typed IPC wrappers โ Tauri commands (async, sandboxed) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Rust engine โ DuckDB 1.5 (bundled), Arrow, atomic file I/O โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ Parquet files on disk ยท .parasql workspace (JSON) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
| Layer | Technology |
|---|---|
| Shell | Tauri 2 (Rust) |
| Engine | DuckDB 1.5 (bundled), Arrow |
| Frontend | Svelte 5 + TypeScript, CodeMirror 6, TanStack Virtual |
| Formats | Parquet (Snappy/Zstd/Gzip/LZ4/Brotli), CSV, JSON, XLSX |
| Tests | Rust unit tests โ engine, undo fidelity, workspace catalog, exports |
| CI | GitHub Actions โ svelte-check, frontend build, cargo test --lib |
- Keyset pagination on a stable internal row id โ no
OFFSETdrift on large tables. - Snapshot-based undo for complex edits (rows, columns, nested types) with temp side tables, not lossy SQL literals.
- Save-point tracking so undo โ redo back to a saved state reports clean.
- Transactional editor swaps: failed table mounts never leave the engine half-configured.
- Reserved-name shielding and identifier quoting everywhere โ table and column names with spaces, dashes, or unicode are safe.
- Poison-tolerant locking and strict result caps keep the app responsive under errors.
- v0.3 โ Charts (shipped) & pivot: chart builder for query results (bar/line/area/pie/scatter) saved in the workspace; pivot tables next.
- v0.4 โ Dashboards & notebooks: compose saved queries and charts into shareable dashboards; notebook-style analysis flow.
- v0.5 โ AI copilot: natural-language-to-SQL and dataset summaries with a model you choose.
- Ongoing: more file formats, cross-platform polish, better large-file tooling.
Vote on what's next in Discussions.
Is it really free? Yes โ MIT licensed, no limits, no paid tiers. Everything is free and open source.
Does it upload my data? No. There is no network code, no telemetry, and no account system. Your files are opened read/write directly from your disk.
Parquet only? Parquet is the native format today (it is the best one). More sources are on the roadmap.
Can I edit files? Single files, yes โ fully: inline editing, undo/redo, and atomic saves. Workspace tables are query-only for now; multi-file editing is on the roadmap.
Can it handle a 10 GB file? Querying yes โ DuckDB streams Parquet efficiently. In-grid editing is guarded by a size limit (2 GB by default) because edits materialize an in-memory table.
Windows only? The stack is cross-platform; releases will cover macOS and Linux as the roadmap progresses.
Contributions are welcome โ see CONTRIBUTING.md for setup,
project layout, testing, and PR guidelines. Looking for a place to start? Check
the good first issue label.
If ParaSQL saves you an afternoon, a โญ helps other analysts find it.
MIT ยฉ 2026 Harris Rauf
ParaSQL is an independent project and is not affiliated with DuckDB Labs or the Tauri project.

{ "version": 1, "name": "sales", "tables": [ { "name": "orders", "path": "sales/orders.parquet", "mode": "query" }, { "name": "products","path": "sales/products.parquet","mode": "editable" } ] }