A browser-native SQL workbench powered by DuckDB WebAssembly. Works with files of any size since data stays on disk, not in memory.
Query Any Data, Any Size Powered by DuckDB WASM. Query CSV, Parquet, Excel, JSON, JSONL locally or from cloud URLs. Designed for large datasets. Files register via File System Access API and stay on disk; DuckDB reads only what it needs. Your limit is disk space, not memory.
Persistent Sessions
Attach DuckDB databases (.db, .duckdb) and local files with handles that persist across browser sessions. Close the browser, come back later, resume where you left off. No re-uploading.
Cloud Data Warehouses Query BigQuery directly from the browser with cost estimates before you run. Same unified interface for local and cloud data. Snowflake coming soon.
Full SQL Workbench Monaco editor with autocomplete and formatting. Schema explorer that visualizes nested structs and shows all sheets in Excel files. Results grid with cell-by-cell keyboard navigation, cell modal for large content, export to Parquet/CSV/JSON, and streaming for large datasets. 10 color themes. Extensive settings for formatting, alignment, and display.
Share Executable SQL Share queries via URL that run on click. Frictionless for teaching, learning, and collaboration. Built-in examples include getting started, remote datasets, DuckDB tutorials, advanced analytics, and extensions.
Private by Default For local files, no server process. Once loaded, everything runs in your browser. Data never leaves your machine. Cloud connectors (BigQuery) communicate directly with their respective APIs.
Live Demo: https://sql.dbxlite.com
git clone https://github.com/hfmsio/dbxlite.git
cd dbxlite
pnpm install # Automatically downloads DuckDB WASM files (~107 MB)
pnpm devOpen the URL Vite prints (defaults to http://localhost:5173).
Requirements: Node.js 18+, pnpm 8+.
Query Remote Files (CSV, Parquet via HTTP)

Schema Explorer with Multi-Theme Support

pnpm dev— start the web client locallypnpm build— build all workspacespnpm lint/pnpm lint:fix— Biome lint (errors only) and auto-fixpnpm test— Vitest suitepnpm e2e/pnpm e2e:headed/pnpm e2e:ui— Playwright end-to-end runs
dbxlite/
├─ apps/
│ └─ web-client/ # React/Vite frontend
│ ├─ src/
│ │ ├─ components/ # UI components (EditorPane, TabBar, Header, etc.)
│ │ ├─ containers/ # Composite components (DialogsContainer, MainContent)
│ │ ├─ contexts/ # React contexts (TabContext, QueryContext)
│ │ ├─ hooks/ # Custom hooks (useQueryExecution, useTabManager, etc.)
│ │ ├─ services/ # Data services (data-source-store, settings-store)
│ │ ├─ stores/ # Zustand stores (settingsStore)
│ │ └─ utils/ # Utilities (formatters, dataTypes, logger)
│ └─ App.tsx # Main orchestrator (~680 lines)
├─ packages/
│ ├─ connectors/ # Data connectors (DuckDB, BigQuery)
│ ├─ duckdb-wasm-adapter/ # Worker/engine bridge
│ ├─ storage/ # Credential and handle storage
│ ├─ schema-cache/ # Metadata caching
│ └─ plugins/ # Extensible plugin surface
├─ docs/ # Architecture and usage docs
└─ scripts/ # Tooling (e.g., download DuckDB WASM)
The web-client uses a layered architecture:
- Providers: ToastProvider → SettingsProvider → DataSourceProvider → TabProvider → QueryProvider
- Contexts: TabContext (tab state + refs), QueryContext (connector state)
- Hooks: 15+ custom hooks handling query execution, file operations, auto-save, keyboard shortcuts
- Containers: DialogsContainer groups modals; MainContent handles editor/results layout
See docs/ARCHITECTURE.md for detailed diagrams.
- Local files use the File System Access API; prefer zero-copy paths for speed. Remote URLs are fetched on demand. DuckDB
.dbfiles can be attached and reused. - Query execution runs in a Web Worker; large results stream via Arrow for responsive grids.
- Keyboard shortcuts:
Cmd/Ctrl+Enterto run,Cmd/Ctrl+Shift+Fto format,Cmd/Ctrl+Home/Endto jump pages in the grid.
Share queries via URL parameters or GitHub Gists:
# Load built-in example
http://localhost:5173/?example=wikipedia&run=true
# Direct SQL (URL-encoded)
http://localhost:5173/?sql=SELECT%20*%20FROM%20range(10)&run=true
# GitHub Gist
http://localhost:5173/?share=gist:abc123&run=true
# With theme
http://localhost:5173/?example=covid&run=true&theme=draculaParameters: example, sql, share, run, tab, theme, explorer
Themes: vs-dark, dracula, nord, tokyo-night, catppuccin, vs-light, github-light, solarized-light, ayu-light, one-dark
See docs/URL-SHARING.md for full reference.
Credential Storage (credential-store.ts)
- Credentials are stored in browser localStorage without encryption
- For sensitive production use, implement encrypted storage (planned for v0.3)
Parquet Support (materialization-manager.ts, import-queue.ts)
- Parquet export uses JSON serialization as intermediate format
- Native Parquet library integration (parquetjs or Arrow) planned for improved performance
Connection Testing (connection-store.tsx)
- Connection validation is simulated
- Actual connection testing based on connector type in development
Connector Integration (import-queue.ts)
- Table import connector integration is a work-in-progress
- Snowflake and other cloud data warehouse connectors in active development
- ✓ BigQuery connector (REST API + OAuth)
- ⬜ Snowflake connector (SQL REST API + OAuth)
- ⬜ Supabase connector (PostgREST - browser-friendly PostgreSQL)
- ⬜ Encrypted credential storage
- ⬜ Native Parquet export via parquetjs
- ⬜ Query result caching layer
Note: Browser-based apps can only connect to databases via HTTP/REST APIs. Traditional databases (PostgreSQL, MySQL) use TCP protocols that browsers cannot access directly. See CONTRIBUTING.md for details.
- See CONTRIBUTING for setup, workflow, and testing guidance.
- Please follow the Code of Conduct.
- Security issues: report privately via SECURITY.
MIT — see LICENSE.



