Skip to content

hfmsio/dbxlite

dbxlite

CI License: MIT Version Node pnpm

A browser-native SQL workbench powered by DuckDB WebAssembly. Works with files of any size since data stays on disk, not in memory.

Highlights

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.

Quick Start

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 dev

Open the URL Vite prints (defaults to http://localhost:5173).

Requirements: Node.js 18+, pnpm 8+.

Screenshots

Main Interface Main Interface

Query Remote Files (CSV, Parquet via HTTP) Query Remote Files

Schema Explorer with Multi-Theme Support Multi-Theme Explorer

URL Sharing Share Links

Excel File Support Excel Query

Export to Parquet/CSV/JSON Export Status

Core Commands

  • pnpm dev — start the web client locally
  • pnpm build — build all workspaces
  • pnpm lint / pnpm lint:fix — Biome lint (errors only) and auto-fix
  • pnpm test — Vitest suite
  • pnpm e2e / pnpm e2e:headed / pnpm e2e:ui — Playwright end-to-end runs

Project Structure

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)

Frontend Architecture

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.

Data & Workflow Notes

  • Local files use the File System Access API; prefer zero-copy paths for speed. Remote URLs are fetched on demand. DuckDB .db files can be attached and reused.
  • Query execution runs in a Web Worker; large results stream via Arrow for responsive grids.
  • Keyboard shortcuts: Cmd/Ctrl+Enter to run, Cmd/Ctrl+Shift+F to format, Cmd/Ctrl+Home/End to jump pages in the grid.

URL Sharing

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=dracula

Parameters: 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.

Known Limitations & Roadmap

Current Limitations

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

Planned Improvements

  • ✓ 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.

Contributing & Community

License

MIT — see LICENSE.

About

DuckDB WASM based SQL Workbench. Query local files & Cloud Databases

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages