A fast, local-first SQL workbench built with Go, Wails and React.
No cloud. No accounts. No telemetry.
Just a focused, native desktop tool for working with databases.
Grab the latest build for Windows, macOS, or Linux from the Releases page.
- Windows:
XenSQL-windows-amd64.zip(portable) orXenSQL-amd64-installer.exe(installer) - Linux:
XenSQL-linux-amd64.tar.gz(portable) - macOS:
XenSQL-darwin-arm64.ziporXenSQL-darwin-amd64.zip(universal.app)
- Windows:
XenSQL.exe(standalone) - Linux:
xensql-x86_64.AppImage,.deb,.rpm,.pkg.tar.zst - macOS:
XenSQL-macos-universal.dmg
No account required - just download and run.
Auto-update functionality works with the platform-specific .zip/.tar.gz assets listed above.
Prefer to build it yourself? See Installation & Development below.
wails3 task buildOr during development:
wails3 devWork with SQLite, PostgreSQL, and MySQL / MariaDB in a single fast desktop app that runs entirely on your machine.
🧳 Portable
⚡ Fast startup
🔒 Local-first
🧠 Developer-focused
🔄 Auto-updating
- Query faster with smart, schema-aware autocomplete
- Stream results - rows arrive as the driver yields them
- Run multi-statement scripts and get a result tab per output
- Explore schemas instantly
- Save and reuse queries
- Export anything in one click
- Auto-update with one click
![]() Editor |
![]() Transactions & multiple results |
![]() Table data |
![]() Cell editor |
![]() Grid |
![]() Export |
![]() Connections |
![]() Quick Search |
![]() Appearance |
XenSQL is a desktop SQL client built for developers who want speed, clarity, and control.
It combines:
- ⚡ Go backend for performance
- 🖥️ Wails for native desktop packaging (uses the OS webview)
- ⚛️ React + TypeScript UI
- ✍️ Monaco Editor for a real IDE-like SQL experience
Most SQL tools today are:
- heavy Electron apps
- cloud-connected by default
- tied to subscriptions or accounts
- overloaded with features you don’t use
XenSQL focuses on one thing:
A fast, local environment for working with databases.
| Database | Read & write | Read-only mode | Secure transport |
|---|---|---|---|
| PostgreSQL | ✅ | ✅ | SSL - disable / require / verify-full |
| MySQL | ✅ | ✅ | TLS |
| MariaDB | ✅ | ✅ | TLS |
| SQLite | ✅ | ✅ | local file |
- Create, edit, test, and manage database connections
- Organize into folders with drag-and-drop reorder
- Per-connection tab colors
- Read-only mode with defense-in-depth - blocked at both the Wails layer and inside each driver
- PostgreSQL SSL (
disable/require/verify-full) and MySQL TLS - SQLite file picker workflow
- Tabbed workspace with drag-and-drop tabs and session restore
- Monaco-powered editing with custom dark/light themes
- Smart autocomplete - substring + prefix matching, context-aware (
SELECT/FROM/JOIN/WHERE/UPDATE/DELETE/INSERT),schema.table.columndot completion, quoted identifiers and aliases - Built-in snippets -
JOIN,SELECT * FROM, aggregate functions - Driver-correct identifier quoting (PostgreSQL, MySQL, SQLite)
- Run selection (
Ctrl+Enter) / run all (Ctrl+Shift+Enter) / stop long-running queries - Streaming results - rows render as the driver yields them
- Multi-statement scripts - run several
;-separated statements at once; they execute in order on one connection, so temp tables,SET, and scriptedBEGIN/COMMIThold - Multiple result outputs - a script or stored procedure that returns several result sets shows each in its own switchable result tab; a failing statement reports its error and stops the run
- Pinned transactions per tab - run
BEGIN/COMMIT/ROLLBACKas SQL or from the toolbar; queries run inside the open transaction until you commit or roll back UPDATE/DELETE/INSERTwithRETURNINGflow back to the Results Grid- Gutter icons to run individual statements
- Right-click menu with format SQL
- Remappable keyboard shortcuts
- Tree view: schemas → tables → columns
- Search tables and columns instantly
- Double-click a table →
SELECTin a new tab - Ctrl+double-click → browse table data in the grid (editable when primary keys exist)
- Refresh schema on demand
- Virtualized grid - smooth scroll over thousands of rows
- Result-set tabs - switch between outputs when a run returns multiple result sets
- Sortable columns with auto-sized widths and per-tab persistence
- Keyboard-first navigation (arrows, Shift+select, Enter for cell viewer)
- Column/row selection with Ctrl+click and Shift+click;
Ctrl+Ccopies as TSV - Cell editor for large values - JSON, XML, HTML, or plain text; beautify/minify; editable in table view
- JSON / JSONB auto-parsed in cell and side viewer
- Side JSON row viewer with filter / regex search, synced to focused row
View and modify table data directly in the grid - no hand-written UPDATE / DELETE (writable connections):
- Browse any table's rows (
Ctrl+double-clicka table in the Schema Explorer) - Inline edit cells in place - changes are staged, then applied on demand
- Insert new rows and bulk-delete selected ones
- Safe by design: edits require a primary key, and read-only connections are blocked at both the Wails layer and inside the driver
INSERT/UPDATE/DELETE … RETURNINGresults flow straight back into the grid
- Saved queries - name, filter, sort, link tabs with dirty-state tracking
- Save, update, rename, and delete from the sidebar or toolbar
- Per-connection query history with success/error and duration
- Clear history per connection or delete individual entries
- CSV / JSON / Markdown / SQL INSERT
- Export all or selected rows and columns
- Copy to clipboard or save to file
- Remembers your last export format
- Automatically checks for new versions on startup
- Clean modal with changelog highlights
- One-click download and update
- Supports Windows (MSI), macOS, and Linux builds
- Dark & light themes
- English, Deutsch, and Български
- Quick Search palette (
Ctrl+P) - jump to connections, saved queries, history, tabs - Custom shortcuts editor + keyboard tips
- Frameless native title bar
- Window state persistence - size, position, and maximized state restored between sessions
Every shortcut is remappable in the in-app shortcuts editor.
| Action | Shortcut |
|---|---|
| Quick Search palette | Ctrl/⌘ + P |
| Run selection | Ctrl/⌘ + Enter |
| Run all statements | Ctrl/⌘ + Shift + Enter |
| Save query | Ctrl/⌘ + S |
| Rename saved query | F2 |
| New / close tab | Ctrl/⌘ + T / Ctrl/⌘ + W |
| Reopen closed tab | Ctrl/⌘ + Shift + T |
| Next / previous tab | Ctrl/⌘ + Tab / Ctrl/⌘ + Shift + Tab |
| Toggle sidebar / JSON panel | Ctrl/⌘ + B / Ctrl/⌘ + J |
| Zoom in / out / reset | Ctrl/⌘ + = / Ctrl/⌘ + - / Ctrl/⌘ + 0 |
| Editor font size + / − | Ctrl/⌘ + Shift + . / Ctrl/⌘ + Shift + , |
| Fullscreen | F11 |
Everything lives in a single XenSQL-data/ folder:
XenSQL(.exe)
XenSQL-data/
connections.json
editor_session.json
query_history.json
saved_queries.json
settings.json
settings.json keeps your UI preferences - theme, language, layout, and keyboard shortcuts.
When the app sits somewhere writable, that folder is created right next to the executable (beside the .app bundle on macOS) - move it to a USB stick, network drive, or another PC and it just works.
If the app lives in a read-only location (e.g. /Applications or a system path), it falls back to the OS per-user data directory instead:
- macOS →
~/Library/Application Support/XenSQL-data - Linux →
~/.config/XenSQL-data - Windows →
%AppData%\XenSQL-data
Override the location with XENSQL_DATA_DIR. During wails3 dev it's ./XenSQL-data in the project root.
XenSQL uses Wails v3, which embeds a web UI into a native desktop app.
- Go runs backend logic
- UI runs in the OS-native webview:
- Windows → WebView2
- macOS → WebKit
- Linux → WebKitGTK
- No bundled Chromium like Electron
- Go 1.26+
- Wails v3 CLI (
wails3) - Node.js 24.16+
go install github.com/wailsapp/wails/v3/cmd/wails3@latest
# wails3 dev installs frontend deps, generates bindings, and launches the app
wails3 devwails3 task build # or: wails3 task package (platform bundle/installer)├── main.go # Wails entry point (embeds frontend/dist)
├── docker-compose.yml # PostgreSQL / MySQL / MariaDB for the E2E suite
├── Taskfile.yml # dev tasks: build / test / e2e (run via `task` or `wails3 task`)
├── cmd/
│ ├── e2e-server/ # Wails server-mode launcher the Playwright suite drives
│ └── bump-version/ # version bump tool (keeps build assets in sync)
├── internal/
│ ├── app/ # Wails App API bindings + tests (connections, query, history, …)
│ ├── database/ # Driver interface + SQLite / PostgreSQL / MySQL
│ ├── storage/ # JSON persistence (incl. settings.json)
│ ├── paths/ # Portable data directory
│ ├── windowstate/ # Window size / position / mode persistence
│ └── service/ # SQL format, export helpers
├── frontend/ # React + TypeScript + Monaco (Vitest tests)
└── e2e/ # Playwright E2E suite (specs, pages, support)
| Layer | Technology |
|---|---|
| Backend | Go |
| Desktop | Wails v3 |
| UI | React + TypeScript |
| Editor | Monaco Editor |
| PostgreSQL | pgx |
| MySQL | go-sql-driver/mysql |
| SQLite | modernc.org/sqlite |
| Tables | TanStack Virtual |
| State | Zustand |
| Icons | Lucide |
| i18n | i18next |
See LICENSE.








