Your AI works on a masked local copy; live stays read-only, enforced by the server.
Version 1.14.0 · 73 MB · signed & notarized · 14-day trial, no account, no telemetry.
$ brew install --cask featherdb-app/tap/featherdb
{ "database": "production",
"sql": "DELETE FROM customers WHERE …" }
featherdb gateway
REFUSED — `production` is a LIVE database: nothing executes on live without the person's click. Nothing was executed or changed. …
A write to a live database is refused before anything executes.
Every statement an AI sends to a live database is read-only on the server's terms. A write is not talked out of it — the database server refuses it, and the AI gets a message to relay to you. The capability is decided by what kind of database it is, never by how the request was worded. And on a sandbox, where writes are the point, every statement an AI proposes still stops at an in-app approval — you read it, you click, then it runs.
{ "database": "production",
"sql": "DELETE FROM customers WHERE created_at < now() - interval '1 year'" }
featherdb gateway
REFUSED — `production` is a LIVE database: nothing executes on live without the person's click. Nothing was executed or changed. RELAY THIS TO YOUR USER: file it with propose_change (this SQL plus a rationale) and it appears on their Proposals tab to snapshot and confirm; or rehearse on a sandbox first and promote it; or they run the SQL themselves in FeatherDB's SQL editor.
Staged conversation — but the refusal is the gateway's actual message, byte for byte.
A mark is a named scope — a table plus the related tables you picked — with an id you can say in any chat.
Save a selection as mark-7f3 in FeatherDB, then just say that id
to your AI: through the gateway it pulls the same DDL and PII-masked sample rows you
previewed — exactly as you saw them, with a picture of how the
tables connect. featherdb:// links open the mark straight back in the app,
and the AI can open it for you on request.
The map is not limited to declared foreign keys: schemas that never declare any — document stores, FK-less apps — get their joins inferred from naming, drawn dashed and labelled as guesses. One click confirms or corrects a guess, and your verdict is what the AI is taught from then on.
products — the link table marked, cascade deletes in red.One click proposes a local clone that matches your server’s version — created only when you approve it.
Emails, names and phone numbers are replaced before they land — fail-closed, so a column FeatherDB cannot vouch for is not copied at all. FeatherDB reads what your production runs — PostgreSQL 16, MySQL 8.4, MariaDB 11.4, whatever it really is — and proposes a matching Docker container on your Mac; nothing exists until you approve it, and discarding the sandbox deletes it. The AI gets full read and write there, the mask report shows exactly what happened to every column, and anything the agent breaks costs nothing. No Docker? Postgres still clones instantly with the built-in engine.
Everything the AI runs there is journaled — statement, time, which AI — so a forty-step coding session always has an answer to "what did it change?". Sandboxes survive quitting the app, and a per-connection switch (off by default) lets your AI start its own sandbox so a coding session never waits on a click.
Point a work-in-progress build at a masked, production-shaped database on your Mac — real requests, real data shapes, nobody real in it, production never touched.
A sandbox is already a masked clone at your server's version. Now your own backend can use it: on a connection you reach over SSH, one click opens a path from that server back to the sandbox and hands you the address your deployment should use there. Run v1.2 against it while v1.1 keeps serving production — a webhook fires, an order is written, and it lands in the sandbox, not in front of a customer. The Sandbox tab shows which build is attached to which database, and a live feed of every statement the sandbox runs — your backend's, yours, your AI's — each with how long it took and, when your framework annotates its queries, the request that caused it. Payments still charge for real, so use your test keys; the database is the part that is safely fake.
A change the AI wants on your live database arrives as a proposal — with its reason, its plan and one button — never as a write.
Your AI rehearses on the sandbox, then calls propose_change: either the
SQL it wants run, or "promote the sandbox", where FeatherDB shows you the migration plan from
sandbox to live, computed fresh when you open it. A rationale is mandatory — a proposal without a why is
refused at the door. The Proposals tab shows the reason, the SQL or the graded plan, and a
snapshot toggle that is on by default; dangerous steps wait for your acknowledgement. Confirm
applies it; reject sends your reason back to the AI verbatim. Every decision is on the
record, and the AI only ever polls the outcome. Whatever your AI files — a change, a question
to run, a snapshot, a connection — gathers under "waiting for you" at the foot of the sidebar,
from every database at once; the Dock icon shows how many, and macOS tells you when a new one
arrives while FeatherDB is in the background.
A whole-database snapshot before anything risky — restore it with one deliberate click.
Applying a migration snapshots first, on by default — and if the snapshot
fails, the migration does not run. Running a write in the SQL editor offers the same line.
Every snapshot carries the reason it was taken; restoring names exactly what will be lost,
asks you to type the database's name, and snapshots once more right before — so even the
undo can be undone. On MySQL and MariaDB this is the only undo that exists for schema
changes: no transaction there can roll back a DROP TABLE. Your AI can request
an undo point before handing you a risky change — the request waits for your click, and
nothing ever runs by itself.
Sandbox changes worth keeping become an ordered, safety-linted plan — the same plan a proposal from your AI shows you.
Each step is graded — DANGER for the ones that rewrite a table,
WARN for the ones that lock it — and run in an order that never leaves a
table half-changed, with index builds that do not lock it. Dangerous plans require an
explicit confirmation, and a drift guard catches production changing underneath you.
Connect a database and FeatherDB flags what a DBA would — free, on every engine.
It reads the schema you are connected to and names the things that bite: tables with no primary key, foreign keys with no covering index (Postgres does not add those for you; MySQL and MariaDB do), columns that read as personal data, and a connection running as a superuser or root. Every finding says what it means and what to do — the index to add, the least-privilege role to create. It runs on the schema plus one privilege query: no query against your data, nothing installed, nothing changed. Your AI can run the same check through the gateway and gets exactly the findings you see.
The first five install themselves — one click, no token to copy. Codex shares one config across its command line, its IDE extension and the Codex mode inside the ChatGPT desktop app, so that click connects all three; ChatGPT's own cloud connectors are a different door and still need a public URL. Everything else gets the standard MCP config to paste. One gateway serves every database you expose; the AI names which one it wants, and what it may do there is decided by the kind of database it is, not by the request. Claude Code's auto mode asks before any tool it has not been told to trust — including the ones that read nothing of your data, like filing a question for you to run. One click in the app tells it which of those it may skip the question for; reading your rows or changing anything still asks.
Checkout by Polar.sh, the merchant of record — your receipt and any VAT come from them. Activation is immediate: open the app, type your purchase email, enter the 6-digit code it sends you. No key to wait for.
No. FeatherDB connects your Mac directly to your databases — rows, schemas, credentials, and query results never touch our servers. The app contacts a server in exactly three situations: buying, activating, and checking for updates, and the privacy policy lists precisely what each involves.
Your AI tools connect to one local MCP gateway. On a live database they can read, and only read — a write is refused by the database server itself, on PostgreSQL, MySQL and MariaDB alike, not by a prompt. On a sandbox they get full read and write, because a sandbox is a disposable local clone with personal data already masked.
PostgreSQL, MySQL and MariaDB — connected directly over TLS (Supabase, Neon, RDS, PlanetScale, and other managed hosts) or through an SSH tunnel to a box you own. We run the full suite against PostgreSQL 14–18, MySQL 8.0 and 8.4, and MariaDB 10.11–11.8 before every release; versions in between normally just work.
Sandboxes run at your server's version, in a Docker container on your Mac: FeatherDB reads what production runs and proposes the official image for that series — the same PostgreSQL major (16, 17, 18) or MySQL / MariaDB release line (8.4, 11.4) — so schema behaviour matches; the patch level is the image's, and may differ from yours by a point release. It creates the container only when you approve — it is visible in Docker Desktop, and discarding the sandbox deletes it. Without Docker, Postgres clones instantly with the built-in engine, and the migration plan flags any version drift so you review those migrations by hand.
Yes. brew install --cask featherdb-app/tap/featherdb —
the tap points at the same signed, notarized release as the direct download, and
brew upgrade tracks new versions (the app also updates itself). Removing
it is brew uninstall --cask featherdb; add --zap to also
delete its local data.
No account. Buy, open FeatherDB, type the email from your receipt, and enter the 6-digit code it sends you. One purchase covers two Macs. If both are taken when you activate a new one, FeatherDB lists your Macs and replaces the one you pick in the same step. After activation the licence verifies offline; air-gapped Macs can paste a licence key instead.
Nothing. The version you have keeps working forever, offline. Renewing ($29/year) is optional and only buys continued updates — skip it and come back whenever a new version is worth it to you.
No — FeatherDB is a native macOS app, built for macOS 15 or later on Apple Silicon and Intel. Going deep on one platform is what keeps it fast and native-feeling.
A database in a Docker container, on a platform like Fly or Railway, or in Kubernetes: each has a path that never opens a port to the internet.