Version 0.1.2 macOS 15 or newer · Apple silicon · Signed and notarized
The database client that belongs on a Mac.
One native app for PostgreSQL, MySQL, SQLite, SQL Server, Oracle, MongoDB and six more engines. Write queries, edit rows in place, design tables, draw your schema — with your Keychain, your Touch ID, and no account.
$brew install --cask az-code-lab/taps/dbclient
Free for the databases on your Mac. Pricing
One window for the whole job.
A tour by the work you came to do. Each part is a real Mac control, not a web view — so it is fast at 900 tables, and it shows you the SQL before it sends it. Every picture is the app itself, and every feature links to its page in the docs.
Twelve engines. One app.
Every feature is built against one driver contract, so the grid, the designers and the assistant work the same whether the server speaks Postgres, Oracle or Redis.
Hosted services get a tile of their own with the port and SSL mode they expect:
Supabase
Neon
CockroachDB
TimescaleDB
YugabyteDB
Valkey
ClickHouse Cloud
Pick a tile, or paste a string.
Choose the engine or the service and the port and SSL mode follow. Paste a connection string and the fields fill themselves in. Test the connection before you save it; a new one is tried before it is filed.
- Save Password starts off: the app asks when you connect, and forgets when it quits
- A colour and a Production switch for the servers that matter
- Folders in the sidebar, and a filter that never dials a server
Connect safely, wherever the server is.
Keychain and Touch ID
Passwords are Keychain items, never a file, and using one can ask for Touch ID or your login password first. Or save none: leave Save Password off and the app asks when you connect, then forgets the answer when it quits.
Guide: passwordsSSH, SSL, proxies
In-process SSH tunnels (password or ed25519 key) checked against known_hosts; SSL up to full certificate verification; SOCKS5 and HTTP CONNECT proxies, chained with SSH when you need both.
Guide: tunnels and proxiesProduction mode
Mark a connection as production and every session starts with auto-commit off. Writes wait for your commit, and the status bar says so.
Guide: production modeReconnects that tell the truth
A dropped server is retried on a keepalive; a read is re-run for you, a write reports that it may have applied and asks you to check.
Guide: dropped connectionsMove your set-up
Export connections, folders and saved queries as one readable file; import it on another Mac. Passwords come along only behind Touch ID.
Guide: moving connectionsFiles open as connections
Drop a SQLite or DuckDB file or a .sql script on the window or the Dock; DBClient reads the bytes, not the extension, and opens the right thing. CSV and Parquet files open from the Data File tile.
Guide: opening filesWhat each engine gets.
Every engine has the sidebar, the grid, the assistant and a door to its own console client. The kinds of object that exist on an engine are the kinds it shows.
| Engine | Editable grid | Designers | Users & Roles | Diagram |
|---|---|---|---|---|
| PostgreSQL and Supabase, Neon, CockroachDB, TimescaleDB, YugabyteDB | ✓ | ✓all kinds | ✓ | ✓ |
| MySQL and MariaDB | ✓ | ✓tables, triggers, events, sequences on MariaDB | ✓ | ✓ |
| SQLite | ✓with table rebuilds | ✓tables, indexes, triggers | — | ✓ |
| SQL Server | ✓ | ✓plus synonyms, partition functions and schemes | ✓ | ✓ |
| Oracle | ✓ | ✓tables, sequences, types, synonyms, triggers, tablespaces | ✓ | ✓ |
| IBM Db2 | ✓tables with an enforced key | ✓tables, indexes, triggers, sequences | ✓ | ✓ |
| DuckDB and CSV files | ✓ | ✓tables, sequences | — | ✓ |
| ClickHouse and ClickHouse Cloud | ✓ | ✓tables | ✓ | ✓ |
| Databricks SQL warehouses | ✓managed tables | ✓Delta tables, views, routines | ✓ | ✓ |
| MongoDB | ✓documents | —console | ✓ | — |
| Redis and Valkey | ✓keys | —console | ✓ACL users | — |
Oracle and IBM Db2 need their makers' client libraries, which the app does not ship. The first Oracle or Db2 connection offers to download the client from Oracle or IBM, checks every file against the digests the app was built with, and keeps it in your Library folder, where the same sheet updates or removes it.
Databricks needs no client: it talks to a SQL warehouse over HTTPS with an access token, one Unity Catalog per connection. ClickHouse Cloud can sign in through your browser instead of a database password.
An editor that knows your schema.
A hand-rolled SQL lexer drives the highlighting and the completion, so both stay exact and fast.
Write, run, repeat.
Tables, columns, keywords and functions complete as you type, scoped to the tab's database. ⌘↩ runs the statement under the cursor, ⇧⌘↩ runs everything, and a selection runs alone. Results land per statement, each with its own grid, log and pager.
- Syntax highlighting and a formatter (⇧⌘F) that never touches your types
- Explain before you run; Watch to re-run on an interval
- Comment a block with ⌘/, duplicate or delete a line, find and replace
- Tabs remember their editor, results and page — ⇧⌘T reopens the one you closed
⌘K to anywhere.
The command palette searches tables and views, their DDL, the schema diagram, the app's actions and your other connections as you type. Arrows and ↩ run the choice.
- Open a table, show its CREATE statement, start a designer
- Switch connection without reaching for the sidebar
- Works from any tab, on any engine
The engine's own client, in a tab.
A console tab is a real terminal running the client you already know — psql, mysql or mariadb, sqlite3, sqlcmd, clickhouse-client, mongosh, redis-cli, SQL*Plus or SQLcl, db2cli, dbsqlcli — signed in with the connection's own host, port, user and password, through its SSH or proxy tunnel too. Its prompt, history, pager and colours are the client's, not an imitation.
- The door is always there; without the client, the tab names the Homebrew line that installs it, with a copy button and Check Again
- The password never goes on the command line: the client reads it from its environment or its own prompt
- MongoDB and Redis also get a command console as their first-class query surface
- DuckDB is the one engine without a console: a file allows one process, and the app is it
Every tab, one grid.
The strip's grid button shows every open tab across every connection as a card with its first lines. Click one, or walk them with the arrow keys and press Return; Escape closes the overview.
- One strip across connections, grouped in the sidebar's order
- Cards preview the query, the browse, the designer
- ⌘W closes, ⇧⌘T brings the last closed tab back
And around the editor.
A sidebar that scales
Folders of connections, one flat tree that stays quick with 900 tables open, a filter that never dials a server.
Guide: the sidebarWatch and Explain
Re-run a statement on an interval and see the rows change; read the plan before you run it.
Guide: Explain and WatchSaved queries and tabs
Queries saved per connection and database, tabs that remember their editor, results and page, ⇧⌘T to bring one back.
Guide: saved queriesA grid built for editing.
Drawn by AppKit, so 60 columns scroll as fast as 6, and every cell is a real control when you edit it.
Edit in place, review as SQL, commit once.
A single-table SELECT that covers the primary key is editable — typed editors per column kind, rows added and deleted from the row gutter, joins edited cell by cell against each owning table. ⌘S shows the statements; Commit runs them in one transaction.
- Excel-style selection: rows, columns, cells, ranges
- Sort from a header's menu, several columns with ranks
- Long text and JSON open in their own editor, reformatted on demand
- Set NULL, revert a cell, discard everything
Designers for every kind of object.
Tables, indexes, foreign keys, triggers, events, sequences, types, synonyms, aggregates, operators, extensions, casts, tablespaces, partition functions and schemes, users and roles — each one a tab, each one previewing its SQL. Kinds of object
Alter a table without writing the ALTER.
Columns load as drafts. Rename, retype, reorder, change a default, toggle NOT NULL, add and drop keys and indexes — the diff becomes ordered statements you can read before you apply them. On SQLite, the full rebuild recipe runs in one transaction.
- Postgres emits USING casts for type changes
- MySQL restates the full column, and says so
- Collations picked from the server's own list, and kept when a column is restated
- What an engine cannot do is a note, not a silent failure
Each database at a glance.
Click a database and see every kind of object it holds with a count, the server's version, and a door to create what is missing. Cards open the same listings the sidebar does.
- Server-level kinds — extensions, casts, tablespaces, accounts — beside the schema's
- New Schema, New Table, New Role from one place
- The diagram and the console, one click away
Accounts, memberships and grants.
On every engine that has accounts, the sidebar files them under Users & Roles: superusers, connection limits, expiry, role membership and grants at every scope. The role editor writes the GRANTs and REVOKEs for you.
- Postgres, MySQL, MariaDB, SQL Server, Oracle, IBM Db2, Databricks, MongoDB, Redis ACLs, ClickHouse
- SQL Server's three-state DENY handled as its own thing
- Every change previewed as SQL
Pictures of your data.
The schema as a diagram.
Drawn from real foreign keys, laid out by relationship, edges routed around boxes. Drag tables; the layout keeps your placements and arranges the rest around them.
- Self-references and multiple keys between two tables drawn distinctly
- Filter to a name and the picture narrows
- Double-click a table to open it
A chart of any result.
Bar, line, area, pie and scatter over the result you already have. Choose the X column, the measures, a series column and the aggregate; the chart follows re-runs.
- A pie folds its long tail into Other
- Eight-colour palette validated for both appearances
- Toggle back to the grid at any time
An assistant that reads, never writes.
Ask in plain words. The assistant sees your schema, runs read-only queries to check its answer, and replies with tables and SQL. A statement that would change data is handed back to you as text — the guard is code, not a prompt.
- Claude, OpenAI, Gemini, xAI, DeepSeek, Mistral — your key, your choice
- Streaming replies; one click puts the SQL in the editor
- Inline suggestions in the editor, which you can switch off
In, out, and across engines.
A table is not stuck where it was made. Drag it to another server, or take its rows away as a file and bring others in.
Drag a table to another engine.
Drop a table from one connection onto another's database and a sheet shows what will run: the CREATE in the target's dialect, the rows to copy, structure or data or both. Tables move between any two of the ten SQL engines, columns and types translated; views and routines move where the dialect matches.
- PostgreSQL to SQLite, MySQL to DuckDB, Oracle to Db2, and every other pair
- Replace or keep what is already there
- One transaction where the target has them
Export, read the DDL, import.
Export the rows in front of you as CSV, JSON or SQL inserts, copied or saved. Read any object's CREATE statement. Import a CSV into a table with a header check, column mapping and NULL handling, in one transaction.
- All rows or the selection
- DDL for tables, views, routines, types and the rest
- The import opens the table it filled
A Mac app, all the way down.
SwiftUI and AppKit, not a browser in a box. It launches in a blink, follows your appearance, zooms with ⌘+, and speaks twelve languages.
No account. No telemetry.
Nothing to sign up for. The app talks to your servers, to GitHub for updates, to Oracle or IBM for their client libraries only if you use those engines, and to an AI vendor only if you configure one.
Guide: network useTwelve languages
English, Chinese (Simplified and Traditional), Japanese, Korean, German, French, Spanish, Italian, Portuguese, Russian and Indonesian.
Guide: languages and zoomUpdates that keep up
Install with Homebrew or the DMG; the app checks the same feed, and installs the next signed build when you say so.
Guide: updatesTry it on your own database.
Free for the databases on your Mac, and never asking you to sign in.
$brew install --cask az-code-lab/taps/dbclient