Parquack
July 23, 2026 · View on GitHub
A Firefox and Chrome extension for viewing and querying Parquet, JSON, and CSV files directly in your browser, powered by DuckDB-WASM.
Features
- Open local files via drag-and-drop or the file picker, or load from any URL
- Auto-intercepts
.parquetURL navigations and opens them in the viewer - Browse data with pagination and configurable page size
- Run arbitrary SQL queries with a CodeMirror editor (syntax highlighting, query history)
- SQL autocompletion: columns of the loaded file, plus DuckDB keywords, types, and functions with signature hints (including functions registered by extensions loaded via
duckdbrc) - Multiple query result tabs — "Run in new tab" (⇧+⌘/Ctrl+Enter) keeps previous results around for side-by-side comparison
- Export query results as CSV, JSON, or Parquet
- Inspect schema, file metadata, row group statistics, and key-value metadata
- Dark/light theme, configurable query page size, and a
duckdbrcstartup SQL field - Download the loaded file locally
Browser support
| Browser | Minimum version |
|---|---|
| Firefox | 140 |
| Firefox for Android | 142 |
| Chrome | 120 |
Development
Prerequisites
- Node.js 18+
- npm
Setup
npm install
Build
npm run build # both Firefox and Chrome
npm run build:firefox
npm run build:chrome
Watch (rebuilds on file change)
npm run watch # Firefox
npm run watch:chrome
Run in a browser
Requires web-ext (included as a dev dependency):
npm run run:firefox
npm run run:chrome # uses the default Chrome/Chromium install; override with --chromium-binary
Package for distribution
npm run package # both targets → build/firefox/parquack.zip, build/chrome/parquack.zip
npm run package:firefox
npm run package:chrome
Architecture
| File | Role |
|---|---|
src/viewer.js | Main UI — DuckDB init, file loading, rendering, query execution |
src/viewer.html | Viewer page shell |
src/viewer.css | All styles |
src/background.js | Extension background — toolbar click handler and DNR redirect rule |
src/patches/arrow-builder-valid.mjs | Drop-in replacement for apache-arrow/builder/valid.mjs that avoids new Function |
build.mjs | esbuild-based build script; generates manifests and renders PNG icons |
The build outputs to build/firefox/ or build/chrome/. The manifest is generated by build.mjs (not checked in) so the version stays in sync with package.json.
License
MIT