A high-performance desktop application for exploring large Parquet files locally. Built with Tauri, React, and DuckDB. No cloud, no accounts, no telemetry — all processing happens on your machine.
Download the latest installer for your platform from the Releases page.
Open any Parquet file and see data instantly. Parq-Bench uses virtual scrolling to handle files with millions of rows — only the visible rows are rendered, so scrolling stays smooth regardless of file size.
- Open a file — Click Open Parquet or press
Ctrl+Oto pick a.parquetfile. You can also drag and drop a file onto the preview pane. - File metadata — Path, size, row count, and column count are shown at the top.
- Schema at a glance — Column names and DuckDB types appear in the header row.
- Interactive pivot view — Once Perspective.js finishes loading in the background, click Switch to interactive view to pivot, sort, filter, and chart the first 5,000 rows.
- Close file — Click Close File to clear the preview and free memory.
Register one or more files as named tables, then write SQL to query across them.
- Mount a table — Enter an alias (e.g.
sales), browse for a file, and click Mount. The table is immediately queryable. You can also drag and drop files onto the SQL pane to auto-register them. - Glob patterns — Check the Glob box to mount an entire folder of Parquet files as a single table (e.g.
logs/*.parquet). - CSV / TSV support — Enable Slo-mo mode to register delimited text files (CSV, TSV, TXT) with optional custom delimiter.
- Rename or remove tables — Click an alias to rename it in-place. Click x to remove.
- Schema summary — Column names and types for each mounted table are shown as compact pills below the table list.
- SQL editor — A Monaco-powered editor with SQL syntax highlighting, word wrap, and line numbers. Resize it vertically by adjusting the font size with the A- / A+ buttons.
- Autocomplete — Type
.after a table alias to get column suggestions. SQL keywords, table names, and column names from all mounted tables are offered as completions. - Run a query — Click Run SQL or press
Ctrl+Enter. Results appear in a scrollable table below the editor with row count, execution time, and column types. - Export results — Click Export Query CSV or Export Query Parquet to save query output to a file. Press
Ctrl+Shift+Eto export as CSV directly. - Table statistics — Click Stats on any mounted table to view column-level statistics. By default, stats are read from Parquet metadata (instant). Enable Deep Stats in Settings to run a full table scan for exact values.
- EXPLAIN ANALYZE — Press
Ctrl+Shift+Enterto see the query execution plan instead of result rows. - Schema diff — Compare column schemas between two mounted tables to spot added, removed, or type-changed columns.
- Charting — After running a query, pick a chart plugin (Y Bar, X Bar, Y Line, Treemap), select X/Y columns and an aggregation (sum, avg, count, min, max), then click Chart in Perspective to visualize results interactively.
| Shortcut | Action |
|---|---|
Ctrl+O |
Open Parquet file |
Ctrl+1 |
Switch to Preview tab |
Ctrl+2 |
Switch to SQL tab |
Ctrl+Enter |
Run SQL query |
Ctrl+Shift+Enter |
Explain Analyze |
Ctrl+Shift+E |
Export query as CSV |
Ctrl+, |
Open Settings |
Escape |
Close About dialog or clear error |
Choose System, Light, or Dark from the dropdown in the header. The choice persists across sessions.
Press Ctrl+, to open the Settings panel. Configurable options:
| Setting | Default | Description |
|---|---|---|
| SQL Row Limit | 200 | Maximum rows returned by workspace queries |
| Perspective Max Rows | 5,000 | Maximum rows loaded into the Perspective viewer |
| Editor Font Size | 13 px | Monaco editor font size |
| Expand Mode | Fullscreen | Fullscreen overlay or drag-to-resize panels |
| Deep Stats | Off | Full table scan for exact stats (may be slow on large files) |
| Show Visualization | On | Toggle chart controls in workspace |
| Show Perspective Configure | On | Toggle Perspective's built-in settings button |
Parq-Bench monitors system memory. If usage gets too high, the memory guard trips and blocks file opens and queries until pressure drops. A banner explains what happened and how to recover.
- Node.js 20+
- Rust (stable)
- Platform build tools for Tauri v2
cd app
npm install
npm run tauri devcd app
npm run tauri buildInstallers are output to app/src-tauri/target/release/bundle/.
| Layer | Technology | Role |
|---|---|---|
| Frontend | React 19, TypeScript, Vite | UI, virtual-scroll table, Perspective viewer |
| Editor | Monaco Editor | SQL workspace with autocomplete |
| Visualization | Perspective.js (FINOS) | Interactive grid, charts, pivoting |
| Backend | Rust, Tauri 2 | File I/O, DuckDB queries, Arrow IPC transport |
| Query Engine | DuckDB 1.4.4 (bundled) | Parquet reading, SQL execution, exports |
| Transport | Arrow IPC / WebSocket | < 1 MB via Tauri IPC, >= 1 MB via localhost socket |
parq_bench/
app/
src/ # React frontend (TypeScript)
src-tauri/
src/
lib.rs # Tauri commands, DuckDB integration, transport
main.rs # App entry point
bin/ # CLI tools (fixture generator, compat matrix)
docs/ # Architecture docs, upgrade policies
testdata/ # Synthetic Parquet test fixtures
Validates the full pipeline before a release:
cd app
npm run release:gateThis runs:
- TypeScript + Vite production build
cargo checkandcargo test(13 integration tests)- Parquet fixture regeneration (5 synthetic files)
- DuckDB compatibility matrix (5/5 must pass)
DuckDB is pinned to 1.4.4 for reproducibility. See docs/duckdb-upgrade-policy.md for the upgrade process.
Bug reports and feature requests are welcome — please open an issue.
GNU General Public License v3.0 — KISA-Keep it Simple Analytics LLC