Changelog
The same notes the in-app updater shows before installing. Newest first.
1.8.2
- **Buying is easier to find.** When the trial is running low, or a licensed feature is locked, the app now shows a Buy button right where you are — on the Snapshots, Sandbox and AI Tools screens, and in Settings → License — instead of only a buried link. If you are already licensed, nothing changes.
1.8.1
- **A dropped connection heals itself instead of failing your query.** When an idle SSH tunnel or a timed-out session dies, FeatherDB used to keep saying "Connected" and fail the next query with "connection closed". Now the connection is reconnected in place — your query just runs — and the Connections row shows "Connection dropped" with a Reconnect button if it can't. Your AI is told a dropped connection is transient and to retry, not that something is broken.
1.8.0
- **Your AI's sandbox work is on the record.** Every statement it executes on a sandbox is journaled automatically — what ran, when, by which AI, how many rows — shown on the Sandbox tab and copyable as SQL. The Diff screen notes when a plan's sandbox carries a session journal.
- **Let your AI start its own sandbox — if you say so, once.** A new per-connection switch (off by default) lets the AI create the same masked, version-true sandbox the button makes, so a coding session doesn't wait for a click. One per connection; without the switch it is refused and told to ask you.
- **Sandboxes survive quitting the app.** A Docker sandbox now waits for you across restarts: reopen FeatherDB, reconnect, and it is back — same data, same mask report, your AI's journal intact. Discard still deletes it for real.
- **The AI can see version-truth at a glance**: every database it is offered now names its version series, so a sandbox visibly matches your production server before it writes a line.
1.7.0
- **Undo for your database.** Applying a migration now takes a whole-database snapshot first (on by default — and if the snapshot fails, the migration does not run). Every snapshot lists WHY it was taken, and restoring is deliberate: the app names exactly what will be lost, asks you to type the database's name, and takes one more snapshot 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. We proved it can — snapshot, drop a table, restore, and it is back with its rows.
- **Look at yesterday's database next to today's.** A snapshot opens into its own disposable container for inspection — browse it like any database, compare, then discard it. It holds your REAL data, so unlike a sandbox it is never, under any setting, visible to an AI.
- **Your AI can ask for an undo point — and only ask.** Before handing you a risky change, it can file a snapshot request with its reason; the request waits on the Snapshots screen and nothing happens until you click. Snapshots it asked for are labelled with its name.
- **The SQL editor guards live the same way.** Running a write on a live database offers "Snapshot first" — on by default, and if the snapshot fails the statement does not run.
- **Snapshots stay on your Mac** — a folder you can see, sizes shown, deletion is yours. Nothing is uploaded anywhere. Snapshots run the database's own dump tool in a one-off Docker container matching your server's version, so there is nothing to install.
1.6.1
- **Hit the two-Mac limit? Fix it on the spot.** Activating a third Mac now shows the two Macs holding your seats, and one click retires the one you chose and licenses this Mac in the same step — same email code, no support ticket, no second code to type.
1.6.0
- **FeatherDB now connects to MySQL and MariaDB.** Pick the engine when you add a connection, or just paste a mysql:// or mariadb:// URI — the scheme sets everything up. Browse tables, stream big results, read the full schema with its keys and relationships, save marks and answer lookups, exactly as with Postgres. Tested against MySQL 8.0 and 8.4 and MariaDB 10.11 and 11.4 — other versions will usually connect, but those four are the ones we run the whole suite against before every release.
- **Your AI knows which dialect to write.** Every database it can see now names its engine, so it writes MySQL when it is talking to MySQL — backticks, LIMIT syntax and all — instead of assuming Postgres and failing on the first query.
- **Live MySQL databases are read-only for AI, enforced by the server itself.** Not a promise in our code: MySQL's DDL quietly slips past an ordinary read-only transaction, so FeatherDB locks the whole session read-only around every AI query — we verified on real MySQL 8.0 and 8.4 and MariaDB 10.11 and 11.4 servers that INSERT, UPDATE, CREATE TABLE and DROP are all refused before anything runs.
- **The editor reads MySQL, too.** Backticked names, # comments and MySQL keywords all colour correctly in the SQL editor and everywhere a query is shown.
- **Sandboxes now run in Docker — for every engine, at your server's exact version.** Cloning proposes a container matched to your production (PostgreSQL 14 or 18, MySQL 8.4, MariaDB 11.4 — whatever it really runs), and nothing is created until you approve it. The container is visible in Docker Desktop, and discarding the sandbox deletes it. No Docker? Postgres still clones instantly with the built-in engine, exactly as before — and the screen tells MySQL/MariaDB users what to install instead of guessing.
- **A finished clone takes you straight to your new sandbox** — the data grid opens on it, instead of leaving you on the screen you clicked from.
- **If Docker stops underneath a running sandbox, FeatherDB notices.** The sandbox's row says it is unreachable and how to get going again, and your AI is told the same thing once, in words — the dead sandbox leaves its list instead of erroring forever.
- **Every saved connection now shows its engine** — PostgreSQL, MySQL or MariaDB — next to its name, so two similarly named rows can never be confused.
- **"Connection refused" now reads like a sentence.** A database that is not running gets you "nothing is listening at 127.0.0.1:53306 — is the database server running?" instead of a stack of driver wrappers around an OS error code.
- **The mask report tells the truth about generated columns**: they are recomputed by the sandbox from their own expression, and the report now says RECOMPUTED instead of mislabelling them as nulled.
- **Slow queries and "Why is this slow?" show only where they work today** — Postgres. For MySQL and MariaDB they arrive in coming releases rather than sitting there broken.
1.5.1
- **Run it again and you can share the new rows.** After sharing a result, re-running kept the old "Shared with AI" line and hid the Share button — so if you added a row and ran the query again, there was no way to send the fresh answer, and your AI kept reading the first snapshot. Every run now starts clean.
- **A lookup's id is a name, not a number.** Ids now look like
lk-7f3, minted the way mark ids always have been. The old numbering restarted at lk-1 once you had deleted every lookup, which meant a brand-new question could inherit a name your AI was still holding — and it would read that name expecting the earlier question. Ids from before this update keep working exactly as they did. - **The relationship map opens around the table you were reading**, not the first one in the alphabet.
1.5.0
- **Your AI can hand you a question instead of reading your data.** When the answer lives in rows it should not see, it files a lookup: you find it under Database → Lookups, read the one-sentence reason above the query, and run it yourself. The rows stay with you.
- **And when you want its help reading them, you decide what it sees.** Press Share with AI on a result and sensitive values cross as stable aliases instead of the real thing — so it can still tell you "these three rows hold the same token, and it has not changed in 40 days" without ever seeing the token. Every column says how it crossed: as-is, aliased, redacted, or withheld.
- **A question your AI filed is still there tomorrow.** Lookups now survive quitting the app. What is kept is the question itself; a result you shared is never written to disk, so sharing stays a decision about this session and nothing more.
- **Sharing shows you exactly what will cross — before it does.** Press Share and you get a column-by-column account first: aliased, redacted, or as-is. Nothing moves until you confirm, and column names that name something sensitive are now caught in the plural too (
tokens, not just token). - **You can expose a database without letting the AI read it.** A new switch beside Live · read-only: with it off, the AI sees the schema and files lookups for you to run, and its own queries against your rows are refused — by FeatherDB, not by asking it nicely. This update starts every live database with the switch OFF, including ones you had already exposed: letting an AI read your rows is a decision worth making on purpose, and the AI Tools screen tells you it was switched off and why.
- **Your credentials are never sent to an AI — at any setting.** Columns that name a token, key, password, hash or secret are removed from every result before it leaves your Mac, and so are the same keys nested inside JSON documents. The AI is told which columns were removed and that it should hand you a lookup instead, so you read the value here, where it stays. Recognition is by name, so if a credential of yours lives in a column that does not say so, add the word to "Always mask" beside the switch — your words now apply to everything an AI can read, not just to sandboxes.
- **Lookups are yours to manage.** Open one again after you have run it, take back a result you shared, or delete the question for good. And a lookup your AI files while you are looking at the tab now appears there by itself, badge and all.
- **SQL is highlighted wherever you read it** — a lookup's question, a slow query, a migration step, and the screen where you approve a write your AI proposed.
- **The editor says what it measured, and stops guessing what it means.** Run becomes Re-run once rows are on screen, the result says when it was fetched, and "Why is this slow?" now reports Postgres's own numbers — planning plus execution, and that the measurement itself inflates them — instead of telling you whether that is good. Reading the plan is your call, with your AI: you can send it one deliberately, and it arrives labelled a measurement, so a plan can never be mistaken for the answer to the question you asked.
1.4.0
Sandboxes for every Mac, and a place for everything.
- **Intel Macs get version-matched sandboxes too.** Sandbox runtimes now come in a build for your machine — Apple Silicon or Intel — and FeatherDB fetches the right one. On 1.3.0 an Intel Mac was offered a runtime it could not run; that is fixed.
- **The sidebar holds what the app does; the Database tab holds what a database does.** Sandbox and Slow queries now live inside Database, under a bar that names the database they act on — with two connections open, nothing is ambiguous about which one you are looking at. Existing links and shortcuts still land where they always did. Connections shows a Sandbox badge so you can still see at a glance which databases have one running. Picking which database (and Live vs Sandbox) now happens once, in that bar, instead of separately on each screen.
- **A way forward when a database refuses the connection.** Adding a connection now links the recipes for databases that live inside Docker, Kubernetes or a PaaS — the cases where the fix is on your server, not in this form.
- **Tidier disk.** Runtime downloads clean up their temporary files, on success and on failure alike.
1.3.0
The sandbox now speaks your production's PostgreSQL version.
- **Version-matched sandboxes.** If your database runs PostgreSQL 14, 15, or 16, FeatherDB offers a small one-time download (~8 MB) of that exact version and clones into it — the migrations you rehearse are rehearsed on the real thing, not a lookalike. PostgreSQL 17 stays built in and works with zero downloads, as before.
- **The choice comes first.** The version question is asked before your first clone, not after: download the matching version, or clone with the built-in engine — one click either way. A version-matched sandbox confirms itself in green; a mismatched one keeps the orange warning and carries the fix right next to it.
- **No busywork.** After a runtime download finishes, the sandbox re-clones itself.
- **Sturdier sandboxes.** Version-matched sandboxes run separately from the app: a sandbox crash cannot take FeatherDB down with it, and they accept parallel connections.
- **pgvector included.** Every downloadable runtime ships with the vector extension —
CREATE EXTENSION vector works in your sandbox. - **Cleaner exits.** Sandbox servers left behind by a crashed session are shut down and cleaned up the next time FeatherDB starts.
- **A fresh coat.** The accent palette across the app now matches the FeatherDB feather — the lighter violet it always meant to wear.
1.2.0
- **Connecting to a remote database is seconds now, not minutes.** Reading a schema used to ask the server five questions per table — unnoticeable on localhost, minutes over a real SSH tunnel to a faraway server, and long enough that a connected AI's schema request could time out entirely. The whole schema now comes back in nine questions total, however many tables you have.
- **Your connections come back too.** Whatever was connected when you quit reconnects on launch — tunnels, databases, the AI roster filling in as each one opens. Disconnecting still means stay closed.
- **What you exposed to the AI stays exposed.** The databases you chose in AI Tools now survive quitting the app: reconnect and they are back on the gateway without re-toggling. Un-exposing, disconnecting, or deleting a connection still clears its exposure — quitting is the one thing that no longer does.
- **The AI gateway comes back with the app.** If the MCP server was running when you quit, relaunching FeatherDB starts it again — your connected AI keeps its tools instead of silently losing them until someone remembers the Start button. Pressing Stop still means stop, across relaunches too.
- **A guessed relationship now takes your verdict.** Each guess on a table's detail asks: Confirm, Correct (pick the real target), or Not a reference — and your answer beats the guess everywhere at once: the map draws it solid, the AI is told "confirmed by the user" instead of "verify", and a wrong guess stays gone. Your verdicts live with the connection and survive relaunches.
- **The relationship map now sees joins nobody declared.** Document-store schemas (one
data JSON column per table) and FK-less relational apps never declare foreign keys, so their maps used to say every table "stands alone". FeatherDB now infers relationships from column and document-key naming — userId inside billing_events reaching for users — and shows them as dashed lines that say why they exist. A guess stays labelled a guess everywhere it travels: the map, the AI context, and what your connected AI reads. Ambiguous names infer nothing.
1.1.0
- **Your AI can now work with your databases — safely.** FeatherDB runs a local MCP server you can connect Claude Desktop, Claude Code or Cursor to. You choose which databases it sees; a sandbox is fully writable (it is a masked, disposable clone — that is what it is for), the live database is read-only, enforced by Postgres itself. When the AI is refused something, the refusal tells it what to ask you — no silent dead ends.
- **Marks — hand your AI exactly the schema you mean.** Save any table plus the related tables you pick as a mark (an id like
mark-7f3), and say that id in your AI chat: the AI pulls the same DDL and masked sample rows you previewed, with a picture of the relationships. Links like featherdb://mark-7f3 open the mark right back in FeatherDB — and the AI can open it for you on request. - **See a table's relationships as a map.** A button on every table draws the tables it references and the tables that reference it — in plain words ("each order belongs to one customer"), with link tables marked, cascade deletes in red, drag to rearrange and zoom to fit.
- **The AI knows what FeatherDB offers.** On connecting, your AI tool is told what it can do here and when to suggest it — including what is new in the version you are running — so features reach you in the middle of real work, not from a manual.
- **Copy AI context moved to where the data is.** The button now sits on the Data screen of the table you are viewing; the preview still shows exactly what leaves the machine before anything is copied.
- **"Why is this slow?" answers the question.** The verdict says whether the run was actually slow — not just how long it took — asks before measuring an unbounded query on a live database, and the copied prompt now carries the schema and indexes the plan is about.
- **The SQL editor colours your query**, and a connection with no saved password says so in plain words before dialing.
1.0.3
- **Slow queries** — a new section listing what has actually been slow on the database you are connected to, worst average first, read from Postgres's own record. Each entry opens in the SQL editor, or asks "Why is this slow?" directly.
- **"Why is this slow?" now sits beside Run** in the SQL editor. It shows the query plan in the same result area every query uses and puts an optimization prompt — your query and its plan — on the clipboard for your AI chat. A query Postgres recorded with placeholder values gets an estimated plan, and the app tells you that is what you are looking at.
- **Two databases, at the same time.** Connecting one no longer makes you wait for it: a slow remote database and a local one open side by side, and only the row actually doing the work says it is working.
- **The sandbox screen names its database.** Each open connection gets its own row with its own clone, browse, compare and discard. With two connections the second sandbox used to be invisible while it was still running.
- **Every data screen says which database it is showing** — and whether that is the LIVE one or a sandbox — with the same source picker on all of them.
- **A comment above a statement no longer hides what it does.** SQL that opens with a
-- line is now read correctly, so a statement that would change or drop data is still flagged before you (or an AI proposal) run it.
1.0.2
- The Licence pane reads properly again: its fields are fields, not sentences wedged into a label, and they stop growing sideways while you type.
- Closing Settings clears anything half-typed. Reopen it and you get a clean pane — not last time's draft, and never a licence key left revealed on screen.
- The AI command approval sheet has a way out. It could be opened with no button to dismiss it and no key that closed it; now Done and Escape both do.
1.0.1
- Activate with your purchase email — buy, open FeatherDB, enter the email from your receipt and the 6-digit code it sends you. Done. No key to copy out of an email, no account created; after activation everything verifies on your Mac, offline, exactly as before.
- Licence keys still work and always will — pasting a key remains the offline path for air-gapped machines.
1.0.0
First public release.
- Native macOS Postgres client: saved connections over SSH or direct TLS, a data grid for browsing and editing rows, a SQL query editor, schema diff and migration planning.
- Local sandboxes: clone a database's real schema into an embedded Postgres on your Mac, with personal data masked before it lands — a safe place for an AI agent to work.
- One MCP gateway for AI tools (Claude Code, Claude Desktop, Cursor, Codex CLI, and anything else that speaks MCP): live databases are read-only, enforced inside the transaction; sandboxes get full read and write.
- Signed, notarized, and self-updating — Sparkle checks this same feed for new versions.
0.9.2
- The app icon now keeps its transparent margin, so it no longer shows a white frame on dark backgrounds or in the update dialog.
0.9.1
First build carrying self-updates. Earlier versions were never distributed, so there is nothing to update from.