l8db is a fast, native desktop client for PostgreSQL and other databases.
It covers table browsing with filtering and inline editing, schema inspection,
a Monaco-based SQL editor with history and saved queries, EXPLAIN visualization,
ER diagrams, roles and privileges, partitioning, logical replication, sessions
and locks, SSL/TLS per connection, SSH tunnels and OS keychain secrets.
README
l8db
A fast, native desktop client for PostgreSQL and other database families — built with Tauri v2, React 19, and Rust.
Features
Features depend on the selected database family and installed driver. The list below describes the PostgreSQL feature set; see the provider matrix and contributor guide for other products, capabilities and driver requirements.
Table browser — browse rows with filtering, sorting, and pagination
Inline row editing — edit, insert, duplicate, and delete rows with transaction support
Schema inspector — columns, indexes, constraints, foreign keys, and triggers per table
Query editor — Monaco-based SQL editor with syntax highlighting and formatting
Query history & saved queries — automatic per-connection history (search, re-run) plus named saved queries
EXPLAIN visualization — EXPLAIN and EXPLAIN ANALYZE rendered as a collapsible plan tree with costs and timings
SQL lint — unknown tables in FROM/JOIN get warning markers (CTE-aware)
ER diagram — visual entity-relationship diagram for a schema
Views — list and edit view definitions
Materialized views — list, create, refresh (standard and concurrent), and drop
Row Level Security — enable/force RLS per table, manage policies (roles, USING / WITH CHECK)
Partitioning — inspect partitioned tables, attach and detach partitions
Logical replication — manage publications (per-table or FOR ALL TABLES) and subscriptions
Sessions & locks — live pg_stat_activity with cancel/terminate, plus lock monitor
Enums — browse, create, and drop enum types
Schemas — create and drop (with optional CASCADE)
Database overview — sizes per database and schema on the home dashboard
Functions — browse and edit stored functions/procedures
Triggers — view trigger definitions per table
Sequences — list and alter sequences (start, min, max, increment, cycle, restart)
Extensions — list installed extensions; install or drop them via SQL
Roles & privileges — manage roles and their schema/table privileges
Data export — export table data or query results as CSV or JSON
Transaction panel — review and commit/rollback pending changes
Multiple connections — manage and switch between connections; supports connection strings and individual fields
SSH tunnels — reach private databases through a bastion (password, key or SSH agent incl. 1Password, ProxyJump chains, known_hosts verification with optional TOFU on every hop, host import from ~/.ssh/config); database TLS follows the selected SSL mode. See docs/ssh-network.md
Proxies — SOCKS5 and HTTP CONNECT (optional credentials) to reach the SSH server or, without SSH, the database itself via a local forwarding port
OS keychain secrets — passwords live in Keychain / Credential Manager / Secret Service, never in localStorage
AI assistant — ask questions about your data in plain language (⌘J or "KI fragen" in the command palette). Answers come with charts and tables you can export as CSV or Excel or open as SQL, plus suggested follow-up questions. Attach CSV, Excel, JSON or Parquet files and let the AI load them into a new table after your approval. Per-connection knowledge (table descriptions and a glossary) is written by you or generated by the AI and used in every chat. Works with Codex, Claude Code, Gemini CLI, OpenCode, GitHub Copilot, your own OpenAI/Anthropic/Google key, or fully local models via Ollama and LM Studio. See docs/ai-workspace.md
All invoke() calls are centralized in src/lib/db.ts. TypeScript types mirror Rust structs — keep them in sync.
DatabaseAdapter trait in src-tauri/src/db/mod.rs is the extension point for additional DB engines.
Routes in src/routes/ are thin: they wire createFileRoute to feature views. Route tree is auto-generated into src/routeTree.gen.ts — do not edit it manually.
Connections are persisted in localStorage under key l8db.connections.
PostgreSQL connections use postgres-native-tls (OS certificate store) with per-connection ssl_mode.
fetch_table_rows uses the configurable page size from settings (default 100). Builder-generated filters are validated server-side; raw SQL filter mode sends allow_raw=true.
Contributing
Fork the repo and create a feature branch.
Run cargo check and cargo clippy in src-tauri/ before committing Rust changes.
Run npx tsc -p tsconfig.app.json --noEmit to typecheck the frontend.
Open a pull request with a clear description of the change.
Operations
Data transfer behavior, limits and benchmarks: data-transfer.md.
CHANGELOG.md tracks user-facing changes (Keep a Changelog).
Releases: every push to main auto-publishes installers for macOS (Universal DMG), Windows (MSI/NSIS), and Linux (deb/AppImage) plus latest.json for the in-app auto-updater — version (..) and changelog are generated from Conventional Commits. Full runbook: .github/RELEASING.md.