SELECT SQL client · macOS · Windows · Linux

Query. Read. Change. Commit.

A SQL client for people who keep their hands on the keys. PostgreSQL, MySQL, MariaDB, SQL Server, Oracle, ClickHouse, DuckDB and SQLite in one window; results stay in the Rust backend and the grid fetches only the rows you look at.

Free and open source (MIT). No account, no telemetry.

shop

public
SELECT c.name, c.country, sum(o.total) AS revenueFROM   customers c JOIN orders o ON o.customer_id = c.idGROUP  BY c.name, c.country ORDER  BY revenue DESC;
No row matches the filter.
shop · PostgreSQL auto-commit 0 rows Mark cells: the status line adds them up

Try it: pick a statement or a table, click a column head to sort, drag over cells, type in the filter.Simulated in your browser. The real one asks a real database.

COUNT what is in the box

The rows stay in Rust. The window shows a slice.

A result is stored by the backend, in memory and above a limit on disk. Sorting, filtering, searching, adding up and comparing happen there, so the window never holds more than it paints.

11kinds of database the drivers are tested against
183actions, each with a shortcut you can change
17colour schemes, all WCAG AA, and your own
0times the app asks “save?”: every text is backed up

Tested against PostgreSQL, MySQL, MariaDB, SQL Server, Oracle, ClickHouse, DuckDB, SQLite, CockroachDB, TimescaleDB and YugabyteDB, Trino, libSQL and Firebird; it also connects to BigQuery, Snowflake, Db2 and Cloudflare D1. What differs between them, and what is not yet proven

FROM question to answer, in six steps

From “where is that order?” to the row, and on to the fix.

JOIN completion

It knows your schema. Even the join.

Tables behind FROM, the columns of an alias behind o., and behind JOIN the whole condition, taken from the foreign key.

An error is underlined at the place the database names, with its code, detail and hint beside it.

Ctrl+Space Cmd/Ctrl+Enter

WHERE tables as tables

Filter, sort, follow the key.

Open a table and filter it with conditions; the values are always bound, never written into the SQL. Sorting happens on the server.

F4 on customer_id = 3 shows that customer, Alt+F7 lists every table that points to the row, with counts.

F4 Shift+F4 Alt+F7

UPDATE edit data

Change cells. Nothing is sent while you type.

Changes are collected and shown in colour: changed, new, to delete. Look at them as SQL, undo them, then write them together in one transaction: all rows or none.

A row somebody else changed in the meantime is reported, not overwritten.

F2 Cmd/Ctrl+S Cmd/Ctrl+D

EXPLAIN execution plan

See where the time goes.

The plan of every database as one tree table: rows estimated and actual, own and total time. The expensive operation and the wrong estimate stand out, with a hint in words.

“With execution” runs the statement inside a transaction that is rolled back.

Cmd/Ctrl+K Cmd/Ctrl+X

REFERENCES ER diagram

The schema as a picture.

A whole schema, or one table with its neighbours. It arranges itself, tables can be moved, and the same content is there as lists.

Export as SVG, Mermaid or DBML.

DELETE protection

Production says so. And asks.

A connection gets a level: free, ask before writing, or read only. Every statement is classified in the backend, the window only puts the question.

Transactions show their state as the server reports it; closing a tab with an open one asks first.

Every feature in detail

UNION ALL the rest of the toolbox

The details you miss everywhere else.

WHERE customer_id = :customer AND id IN (:ids)

Parameters

:name, ${name}, ? or $1: the app asks for the values when the statement runs, remembers them per tab and hands them to the driver. A value never becomes part of the SQL text, the history or a log.

Σ count · sum · avg

Figures of the selection

Mark cells and the status line adds them up. Exactly: a NUMERIC(38,10) sum is right to the last digit.

⌘P ord_it

Go to anything

A few letters find a table, view, routine, column, tab or connection across all schemas. By word starts, with typos.

⧉ csv · json · md · INSERT

Copy as, export

The selection as TSV, CSV, JSON, Markdown, HTML, INSERT, IN (…) or WHERE. A whole result into a file, also Excel and gzip, as a job you can stop.

{ } </> 0x

Value panel

The whole value of a cell beside the grid: long text, JSON and XML laid out, binary as hex or as a picture. 50 MB in one cell stay usable.

≠ result 1 · result 2

Compare two results

By key columns or by position, with tolerances. Run a statement again and see what changed. Worked out in Rust, also for millions of rows.

.sql · sel⇥

Saved queries and snippets

Plain .sql files in a folder of your choice, with name and tags in a comment header: share them with Git. sel + Tab becomes a statement with placeholders.

↧ csv · ndjson · gz

Import a file

Preview, mapping by name, a proposed CREATE TABLE. Written with bound values, all or nothing or block by block.

⟿ pg → mysql

Copy between servers

Tables from one connection to another, also across databases. Types are mapped and every loss is named before it runs.

▁▃▆ svg

Charts

Lines, bars, scatter plots from a result. A million points are thinned in Rust without losing a peak.

CONNECT seven drivers, eleven databases

Your databases. Behind a tunnel, if they are.

Profiles in folders with colour tags, passwords only in the keychain of your system. A connection comes from a URL, or from what DBeaver, DataGrip, .pgpass or .my.cnf already know.

PostgreSQLand three relatives MySQL · MariaDBone driver, both flavours SQL Server · OracleGO batches · PL/SQL blocks ClickHouseover HTTP · to read SQLite · DuckDBfiles · Parquet, CSV, JSON TLS · SSH tunnelhost key checked Schema Commander
  • PostgreSQLand what speaks its protocol: CockroachDB, TimescaleDB, YugabyteDB
  • MySQL · MariaDBone driver, both flavours
  • SQL Server · OracleGO batches, PL/SQL blocks; Oracle without an Instant Client
  • ClickHouse · Trino · BigQuery · Snowflakeover HTTP, to read and analyse
  • Firebird · Db2 · libSQL · D1drivers in pure Rust, no client to install
  • SQLite · DuckDBfiles on your disk; DuckDB also reads Parquet, CSV and JSON
  • TLS · SSH tunnelyour own CA, client certificate, host key checked
Connecting, tunnels, and what differs per database

GRANT read, to an assistant

Let your AI ask. You decide what runs.

Over the Model Context Protocol, an assistant on the same computer reads the structure, runs reading queries within limits and proposes statements. Anything that writes waits for your click on a statement you can read.

Off by default. No port while it is off. Each connection gets its own level.

Eight tools, four levels, the safety model

Which customers have not ordered since March?

get_schema shop · public: 4 tables

describe_table orders: customer_id → customers.id

run_query read only · 3 rows

write_to_tab the statement, in a new tab

Three of them: Dana Kowalski, Emre Yilmaz and Hana Novak. Their last orders are from February. The statement is in a new tab if you want to change it.

SET theme = …

Seventeen colour schemes. All pass WCAG AA.

From One Dark to Solarized Light to a C64. Editor and grid follow every one, “follow system” takes a light and a dark one of your choice, and a live editor makes your own.

Dark
-- revenue per country, this yearSELECT c.country, sum(o.total) AS revenueFROM   orders oJOIN   customers c ON c.id = o.customer_idWHERE  o.placed_at >= '2026-01-01'  AND  o.status IN ('paid', 'shipped')GROUP  BY c.countryHAVING sum(o.total) > 1000;
#countrybpcharrevenuenumericnotetext
1SE18,204.50NULL
2IT12,930.00key account
3DE9,417.25NULL
4PL4,120.00corrected
5JP2,088.90NULL
6CZ1,312.40new
6 rowsCount 2 · Sum 22,347.25 · Avg 11,173.63

The colours above are the real values of each scheme, not screenshots.

CREATE one app, three systems

macOS, Windows and Linux.

Built with Tauri, Rust and Angular. The editor is editlicious, the grids are the GuiExpert Table. English and German, switchable while the app runs.

macOS

Apple Silicon and Intel in one universal app, with a native menu bar.

.dmg

Windows

The menu bar is drawn by the window, with the same actions and shortcuts.

installer · .msi

Linux

For desktops with WebKitGTK.

.deb · .rpm · AppImage

SELECT * FROM your_database;

Run it.

Free and open source under the MIT license. The packages are not signed yet.