PostgreSQL
Server-side cancel, statement timeout, transactional tabs
Pre-1.0 · built in the open
Sen is a desktop SQL client for PostgreSQL, MySQL, SQLite and SQL Server — written in Rust on GPUI. One binary. No Electron. No web stack.
Server-side cancel, statement timeout, transactional tabs
One driver per dialect behind a single DbDriver trait
A connection is a file — the form asks for nothing else
T-SQL that colours right, semicolon or not
The workspace
Explorer, tabbed editor and results grid — pick a dialect below and watch a real query run. The tabs actually switch; the grid actually fills.
Rendering the app itself is Rust on the GPU — this page is just an honest impression of it.
Features
Every one of these exists because a real workflow asked for it. Hover a card — it leans in.
The first statement a tab runs opens its own connection; every later statement reuses it.
BEGIN…COMMIT, temp tables, SET search_path and prepared statements behave
like they do in psql — and statements in different tabs never share a backend.
The Stop button issues pg_cancel_backend against the tab's own backend, so a runaway
query or pg_sleep halts mid-flight. A cancelled statement is reported as
“Query cancelled” — not an error — and the session stays usable.
Ctrl Space completes keywords plus the tables, columns and functions your explorer already discovered — each item a precise edit over the engine's own span.
Cell edits stage into one batch; the exact statements are confirmed before they run, and the grid shows the staged state until they do.
Double-click a cell on a keyed single-table SELECT; Enter commits a primary-key-keyed UPDATE and patches the cell in place. Empty input writes SQL NULL.
Passwords live only in the OS credential store — Windows Credential Manager, macOS Keychain, Linux keyutils. Everything else is atomic tmp + rename.
Every statement is recorded with outcome and duration; unsaved buffers autosave, so a crash takes nothing with it. Click a history row to re-insert the SQL.
The command palette ranks commands, saved connections, loaded tables and views — and every bundled theme. .
The editor
Not a textarea with regex paint: the tokenizer, splitter, analyzer, formatter, safety and lint engine run in-process, on a debounce that wraps the whole pass.
;-separated one.Appearance
There is no dark-mode toggle in Sen — picking a theme switches the palette and the mode together. These swatches are real bundled themes. Click one: this whole page recolours, 3D scenes included.
Performance
Sen holds a smooth frame rate or it is broken. Anything that scales stays out of
render(); blocking reads go to the background executor; everything that can grow is virtualized.
Security & your data
The SSL checkbox is honoured, not decorative: ticked means ssl_mode=require, and a server
that refuses TLS fails the connect instead of silently continuing in plaintext.
sen, one entry per connection. Never on disk in plaintext.HINT: and DETAIL: lines intact.connections.jsonconnection fields · no secretssettings.jsontheme · fonts · timeouthistory.jsonlevery statement + durationdrafts.jsonautosaved editor buffersOS credential storepasswords · service “sen”Download
A real installer — no Rust, no build steps, no runtime to fetch. First launch opens the connection manager; your passwords go to the OS keyring from day one.
e8869411e5cd92427303624234be615855ba052bd232394c75408b2bedccef1c
Unsigned build — SmartScreen may ask for “More info → Run anyway”.
Uninstalling preserves your data: connections, history and drafts stay
in %APPDATA%\sen, passwords stay in the OS keyring.
A .dmg ships once there is a Developer certificate to sign it with.
.deb and AppImage packages follow the same packaging pipeline.
Optional environment, after install
SEN_CONNECT_URLpostgres://user:password@host/db — auto-connect at startupSEN_CONFIG_DIRoverride the config directory