Repository navigation
Releases
PlatypusDB v0.6.2
PlatypusDB for Claude Desktop in one click, a loading screen instead of a blank window at start, and a small fix to the object details. The app offers the update by itself.
Added
- Agents: an MCP bundle for Claude Desktop on Windows (
.mcpb, one click to install) with each
release, listed in the official MCP Registry asio.github.platypus-labs/platypus-db. - Start: a loading screen while the app starts, in the colors of the last theme, instead of a
blank white window: the platypus head turns, dizzy, and comes to.
Changed
- Agents: the Claude Code plugin finds the installed app by itself on Windows and macOS (setting
PLATYPUS_DBis needed only for a portable copy or another folder), and has an icon.
Fixed
- Object details: the section tabs (Columns, Indexes, Foreign keys…) have room on both sides of
the label, so the hover background no longer touches the text. Link-style buttons underline on
hover instead of showing a tight background.
Install: .exe/.msi for Windows, .dmg for macOS (Apple silicon or Intel), .AppImage/.deb/.rpm for Linux, .mcpb to add PlatypusDB to Claude Desktop. The Windows and macOS builds are not code-signed yet, so the first launch shows a SmartScreen or Gatekeeper warning.
Full changes: v0.6.1...v0.6.2
PlatypusDB v0.6.1
A security release: it updates the SSH library (russh 0.65) and moves SQL Server's TLS to rustls 0.23, both fixing published advisories. Updating is recommended; the app offers it by itself.
Added
- Trademarks: TRADEMARKS.md says what anyone may do with the PlatypusDB name and
logo, and NOTICE lists the logo and icon files, which stay outside the AGPL. The code's
license does not change. - Agents:
propose_editsworks on MongoDB collections. The agent names documents by_id(an
ObjectIdas its 24 hexadecimal digits, read by the type of the collection's_id); the collection
opens in its data viewer with afindof those_ids and the changes pending, checked by the rules
of the grid's save, and Save writes them as the grid does (all or nothing on a replica set). Views are
refused.
Security
- SSH: russh, the SSH library behind tunnels, is updated to 0.65, which fixes unbounded memory
use on crafted server packets and two flaws of its agent server (RUSTSEC advisories of russh before
0.65). - SQL Server: TLS goes through rustls 0.23, like the other drivers, instead of rustls 0.21 and
webpki 0.101, which had security advisories. Trusting the server certificate works as before. - Updates: the updater plugin no longer pulls zip 4, and the Pageant client (SSH keys from
PuTTY's agent) no longer buffers frames without bound.
Fixed
- Editor: Explain plan and Explain analyze are no longer offered on databases whose driver has no
query plans (ADBC, ODBC and Db2 among them); asked for before the session says so, they explain why
instead of opening a tab that fails. - Elasticsearch: testing an edited connection with the password field left empty uses the saved
password even when only the index pattern changed, as saving it already did.
Install: .exe/.msi for Windows, .dmg for macOS (Apple silicon or Intel), .AppImage/.deb/.rpm for Linux. The Windows and macOS builds are not code-signed yet, so the first launch shows a SmartScreen or Gatekeeper warning.
Full changes: v0.6.0...v0.6.1
PlatypusDB v0.6.0
Changed
- Agents: the dialog that asks about an agent's change shows the statement in the editor's colors and,
on SQL databases, laid out with its indentation, whatever single line the agent sent. Only spaces and
line breaks can differ from what runs: anything else shows the statement as sent, which is also a click
away.
Added
- MongoDB: the grid edits the documents of a plain
findon one collection (the data viewer, or a
statement you type, with itsuseorgetSiblingDBdatabase and a projection that keeps_id), by
_id. Each change is oneupdateOne,insertOneordeleteOne, shown by Preview SQL and written with
the BSON type of the column (int,long,double,decimal,bool,string,objectId,date,
document,array); a changed number keeps the numeric type the document stores (int,long,
double,decimal) when that type holds it exactly, in a pipeline update. A change to_id, a column of mixed types or binary data, a field with a.or a
leading$, and a value that does not fit are refused with the reason. A command that finds no
document stops the save. On a replica set a save is all or nothing, in a transaction of its own or in
the one the tab has open; on a standalone server the error says how many commands were saved. The undo
script puts the documents back. - MongoDB: the Auto-commit button is shown on every MongoDB connection, disabled with its reason on a
standalone server; a production connection to a replica set opens in manual commit with Commit and
Rollback, which were hidden before. - MongoDB: manual commit on replica sets and sharded clusters. The reads and writes of documents,
createCollectionandcreateIndexrun in a transaction of the connection's session, opened at the
first change (reads before it see what is committed and open none), and so do the server commands that write documents (runCommand({ insert: … })and
the like); metadata, server information and the navigator run outside it. What MongoDB does not run in
a transaction (drop,dropDatabase,renameCollection,dropIndex,createView,$out,$merge)
is refused in manual commit, and the transaction stays as it was. When the server ends a transaction
(aftertransactionLifetimeLimitSeconds, 60 by default, or on a duplicate key or a write conflict),
the error says its changes were discarded and the transaction shows as closed. A cancel rolls it back.
A standalone server still has no transactions, and says why. - MongoDB:
bulkWrite, withinsertOne,updateOne,updateMany,replaceOne,deleteOneand
deleteMany, ordered or not. As in mongosh it is not atomic: what ran before a failure stays, and the
error says how far it got. AdeleteManyorupdateManywith an empty filter inside it asks, and is
refused to agents, as it is alone. - MongoDB: the rest of mongosh's statements:
findOneAndUpdate,findOneAndReplace,
findOneAndDelete,findAndModify,createIndexes,dropIndexes,hideIndex,stats,validate, the
size methods,db.serverStatus,db.currentOp, users and roles, the profiler,rs.status,show users
and more, each in the editor's completions. - MongoDB: query plans:
.explain(),db.c.explain().find(…)and the editor's Explain, shown as a
tree like every other database's. A plan never applies a write.
Fixed
- MongoDB: options were read and dropped.
arrayFilters,collation,hintandleton an update or
a delete,orderedoninsertMany, andhint,collationandmaxTimeMSon a read now reach the
server. An update without itsarrayFilters, or a filter without itscollation, could change other
documents than the ones asked for. An option not known is refused by name. - MongoDB:
updateOnewith{ multi: true }changed every matching document; it is now refused, as
multibelongs to the oldupdate(). - MongoDB: a long beyond 2^53 was written as
NumberLong(9007199254740993), which reads back as a
double and loses digits (generated data, copied values); it is nowNumberLong("…"). - MongoDB: the data viewer matched a collection's name ignoring case, so
db.Orders.find()could be
taken fororders; MongoDB's names are case-sensitive, and so is the match now. - MongoDB: an
ISODate("…")or a date cell with a character beyond ASCII in its first characters
crashed the statement's reader; it is now a syntax error.
PlatypusDB v0.5.0
Added
- Plugins: ABI 2 (
api = 2; plugins of ABI 1 work as before). A manifest can declare event
hooks, tabs, side panels, grid extensions, a theme with no module and a settings page, with the
new permissionshooks,tabsandgridshown in plain words at install; whatever it does not
know is refused by name, and an update lists what it asks anew. - Plugins: event hooks, before and after a statement, on connect and before saving edited rows.
A "before" hook can block with a message, after the Safety checks, which it cannot lift, and cannot
change the statement. It sees the statement with passwords and every string and number masked,
and never a value of a result; on drivers of plugins it gets no text. Hooks also run for scheduled
scripts, statement by statement, andafter_queryhears of a database's own client and ofEXPLAIN ANALYZE; agents, exports and the rest they do not cover are listed indocs/user/PLUGINS.md. A hook
that crashes or hangs does not stop anything: the action goes ahead and the user is told once, as
they are whenplugins.jsoncannot be read. Without hooks a statement pays one atomic read. - Plugins: a settings page per plugin from its manifest (text, number, boolean, choice, secret),
saved in the data folder, secrets in the system's keychain and never in a file, read by the module
through a host function limited to its own values. - Plugins: tabs and side panels with an HTML page of the plugin. A page runs in a sandboxed frame
on an opaque origin, with a strict policy of its own and no network, and cannot reach the app's
DOM, globals or storage. It talks to the app through a short list of requests, each checked for its
permission, size and rate in the page and the backend; none runs SQL or reads connections, passwords
or rows. A page that leaves its document, floods the app or stops responding is stopped and the user
told. On WebKit (macOS, Linux) a page that loops forever still freezes the window: see the plugin
documentation. - Plugins: computed columns, cell renderers and cell commands in the result grid, in the WebAssembly
sandbox with fuel and time limits and no network. They read a masked cell as dots, and a renderer
answers text and colours, never HTML. A column that fails shows its error in its cells. A frame never
calls a module: answers are cached and fetched in batches, away from drawing, and without an extension
the grid is as it was. - Plugins: themes as plugins, a package with no code that adds a card to the theme picker. Colours
are checked against the app's tokens and must be colours, nothing that could reach a resource or
leave its declaration; fonts come only from the package; poor contrast gets a warning. A theme
whose plugin is gone falls back to the default, and a theme not chosen costs nothing. - Plugins: a catalog (Settings › Plugin catalog) from an index you choose: no address is built in
and nothing is contacted until you set one, and it is read only when you open the page or ask. A
package passes HTTPS, size, SHA-256, a minisign signature by a key you trust, zip paths, identity
and downgrade checks, then the review of a manual install. A package with no valid signature or
an older version installs only from its own question. An index on the network reaches neither this
computer nor a private network, however the address is written and whatever a name resolves to. A
plugin's signer is pinned: another signer is said in the review, and installing clears its secrets
and what its pages keep. - Plugins: removing a plugin asks whether to keep its settings, and always clears its secrets from
the keychain; what cannot be cleared is said, and the rest still is. A plugin whose files are gone
stays listed, and can be removed. - Plugins: an
idorversionthat is not the same folder on every system (a trailing dot, a device
name of Windows, a file of the plugins' folder) is refused, and a plugin's files must be the ones its
entry in the list names. An update keeps a plugin turned off, a same-version reinstall that fails
leaves the old files, and a setting that changes kind leaves nothing behind. - Plugins: a grid extension reads sensitive cells as dots whether or not the screen masks them. A
plugin turned off or removed stops in every window at once. A.zip's hidden files are skipped, as a
folder's are, and an updated theme loads its new fonts at once.
Changed
- Settings: the Plugins page is loaded when it opens.
- Connections: PostgreSQL signs in with a Kerberos ticket, under Password from: on Linux from
kinitor a keytab (KRB5CCNAME,KRB5_CLIENT_KTNAME), on Windows the session's (SSPI). A field
sets the service name,postgresby default. No password is asked, saved or sent, and a server
that does not ask for Kerberos is refused. Without a ticket, the test says what to run.psql,
pg_dumpandpg_restoresign in the same way. Not in the macOS builds yet. A real ticket has
logged in from Linux against a test KDC; the login through SSPI has not been tried with one.
Fixed
- Connections: selected connections can be dragged into a folder and deleted together; before, only
the one under the pointer moved, and there was no way to delete several. - Connections: folders of connections stay as you left them, open or closed, after a restart.
- Connections: Test connection on an edited connection says why it needs the password. A saved
password still goes only to the server it was saved for: on another server the form now asks for it,
instead of failing with "password missing" beside a field that says it is saved. Another database of
the same PostgreSQL or MySQL server, or another way of signing in to the same SSH server, no longer
counts as another server. - Grid: a selection of more than 20,000 rows shows Save files to a folder… greyed out, saying why,
instead of losing the item. A text cell that holds a file shows in the menu and the value panel only,
as the guide now says. - Import: a Db2 connection by alias (
jdbc:db2:ALIAS) says it has no host, so it is filled in before
connecting. - Agents: when the connection of a proposed change to data cannot be opened, the message names the
agent and the table. - Updates:
latest.jsonpoints Windows at the NSIS installer, as the app installs. - Guide: Back returns to where the reader was on the page. A line under a list item with no block of its
own continues the item, as on GitHub.
PlatypusDB v0.4.2
Added
- Grid: a cell that holds a file offers to save it, in any type of column: binary, or text with a
data:URL, base64 or hex. A binary cell shows the type and size (PDF · 2.3 MB), and a
selection saves its files to a folder. - Agents: Settings › Agents › Activity has a summary per agent and per session (calls, tables
read, rows returned, changes allowed and refused, errors), folded above the call list, that
follows its filters and exports as Markdown or HTML next to the CSV. Calls from before this
version show –. It loads when opened. - Help: the top bar's "?" and the command palette open a user guide that comes with the app and
reads offline, with a page per database, what is new in this version and a way to report a bug.
The connection form, Settings › Agents and Settings › Safety link to their page. The guide is
also in the repository, indocs/guide/. It loads the first time it is opened, not at each start.
Changed
- Agents: sensitive columns read
••••••inrun_query,sample_rowsandget_user_context,
in the CLI too, as the grid shows them while it masks. Settings › Agents › Security can show them
on one connection. - Agents: the
get_er_diagramtool draws a schema, or the tables near some tables, as a Mermaid
erDiagram, or withformat: "svg"as the image the diagram's export makes, drawn by the open
app (which asks you nothing and shows nothing). An image over the byte limit is refused, not cut. - Agents:
describe_table,list_objectsand the table resource return the user's notes, tags
and sensitive marks, andsearch_objectsalso finds objects by comment, note and#tag. - Agents: Settings › Agents › Security limits rows, bytes, time and calls per minute per
connection, and can refuse a read whose estimated rows or plan cost are too high, with the plan
in the error. A limit raised by hand in the file waits for the user. - Agents: new tools:
compare_schemas(differences and migration script, nothing runs),
profile_table(per column figures from a sample, counts only for sensitive columns),
estimate_change(what a change would show the user, without running it),server_activityand
top_queries(read-only, with the values in other sessions' statements masked). - Agents:
propose_editsopens rows to add, change or delete in the data viewer as pending edits, which the user saves or discards.next_pagereads long results in pages,query_across_databasesjoins tables of several connections with sensitive columns copied as NULL, and MCP prompts and schema change notifications are offered. - Choosing a database for a new connection offers its driver at once, when it needs one that is
not installed; Settings is not needed. Cancelling leaves the form as it is.
Fixed
- Agents: the first page of a long
run_queryresult no longer waits for the whole read-ahead
fornext_page: the cursor keeps rows for at most 250 ms after the page is full, 10,000 rows or
4 MB, and its last page says the rest was not kept and to narrow the query. - Agents: while a change proposed by an agent waits to apply, its data viewer tab says
"Applying the changes proposed by …" until the rows show as pending edits or the reason
they could not be applied. - Security:
profile_tableon MongoDB no longer shows sensitive fields inside a document. A
mark onuser.password, or a rule that matches the nested namepassword, now keeps those
values out of the figures of the parent object or array (top values, minimum, maximum).run_query
andsample_rowsmask the same nested fields in a document or array column, at any depth. - Security:
get_user_contextfollows the user's statement to the columns it reads, as
run_querydoes.SELECT password AS p …on the open tab no longer shares the value under the
alias, and a column that only has a sensitive name, from a table with no mark, is no longer
masked for nothing when the statement or the viewer's table says which table it is. A subquery
that names a sensitive column, or a statement that does not parse and names one, masks the whole
shared result. - Snowflake, BigQuery, Databricks, Trino and other ADBC connections no longer offer to edit rows in
the grid: a save needs a transaction, which they do not have. Agents can no longer propose rows
to edit on them, or on ClickHouse. - IBM Db2 connections are imported from DBeaver and DataGrip, and
jdbc:db2:URLs are read. - On Windows, saving connections or settings no longer fails with "Access denied" when another
program holds the file for a moment, as antivirus scanners and backup tools do. - Security: a connection URL pasted or typed over the one the URL field already shows no
longer leaves its password in clear inconnections.toml. A paste takes the field's place, and
two URLs together are refused. Saving also refuses a name, database or user that holds a URL
with its password. A connection saved this way before keeps the URL in its Database field:
remove it there, and change that password if the file was shared. - Security: an agent with file access can no longer lift the masking by editing the rules in
settings.tomlor the sensitive marks incatalog.db. Rules and marks are sealed with the rest
of the agent policy: one removed or narrowed outside the app waits until you accept it in Settings
› Agents › Security, and one added applies at once. A seal that no longer matches masks every
value for agents until you answer. This does not stop an agent that can run commands as your
user, which can read the database by other routes or the keychain (seedocs/AGENTS.md).
PlatypusDB v0.4.1
Added
- Connections: a PostgreSQL or SQL Server connection that names its database shows only that
one in the navigator, as in DBeaver; Show all databases, beside the Database field, lists
the server's other databases too (imported from DBeaver's PostgreSQL setting). - Shorter menus: a connection's, a schema's and the SQL editor's actions are grouped in
submenus (New, Open, Tools, Export; Data, Analyze; Run, Explain). - A field left empty or out of range shows the app's own message under it, in the interface's
language, instead of the browser's bubble.
Fixed
- Ctrl+Enter runs only the statement under the cursor when statements are apart by a blank
line and have no;, instead of the whole script. - A new SQL editor, or one showing a DDL, has no empty results panel: it appears with the first
run. - The first color swatch means no ring around the connection's logo, whatever its type.
- Scrolling the Settings no longer lags: dialogs are solid instead of blurred glass.
- Check boxes keep their size beside a long label and show the pointer; the Projects help of
the connection dialog sits beside its title. - The welcome screen no longer says to double-click a connection before the saved ones are read.
Only Windows this time: macOS and Linux stay on 0.4.0.
PlatypusDB v0.4.0
Added
- Connections: export connections to a
.platypusconnfile, with or without their projects
and folders and, encrypted behind a password, their saved passwords; import it back from
Import connections › PlatypusDB. - The main window opens where it was left, on the same screen, or centred on the primary
screen when that one is gone. - Usability review: a title, axes and a line of explanation on every chart (histograms,
profiles, a right-hand axis for series of different scales); a toast for every copy, save
and export; a shared waiting indicator for slow actions; empty states that lead to the action
that fills them; consistent spacing in forms and dialogs. - Resizable side and detail panels (editor history, explain, administration, charts, agents,
query builder), with their size remembered. - Shorter menus: related items in submenus (a table's Analyze and Copy, the editor's
Lines, Cursors and Folding), destructive actions last, and the app's menu everywhere
instead of the browser's. - The notebook shows the running cell, stops it, and runs all cells.
- The command palette finds saved scripts by name.
- The result grid's menu opens from the keyboard (menu key or Shift+F10).
Fixed
- Numbers wider than 38 digits and SQL Server
time(7)keep every digit in Query with SQL and
queries across databases. - CockroachDB tables without a primary key are edited by their hidden
rowid. - SQL Server gives a disabled constraint without a name one of its own, so it can be disabled.
- MariaDB schema compare reads and writes
PERIOD FORclauses. - SQLite hides the shadow tables of FTS5 tables.
- On DuckDB an edited row of a table with a one-column primary key keeps its place after saving.
- Renaming or moving a saved script updates the editor tabs open on it, so saving writes to the
new file. - PostgreSQL: a server that accepts the connection and never answers ends the connect at the
timeout instead of hanging, and theconnect_timeoutoption of a saved connection is used. - One Escape is enough before Tab leaves the SQL editor.
- The open-transaction label keeps its time and change count in a tight toolbar.
- The result's SQL filter shows its whole border; toasts stack closer together; the connection
color is a ring around its logo; the top bar shows the app's icon. - Submenus stay inside the window, also in a menu that scrolls.
macOS
The macOS app is not signed yet: on first launch open it with right-click › Open (or run xattr -dr com.apple.quarantine /Applications/PlatypusDB.app).
PlatypusDB v0.3.0
PlatypusDB 0.3.0
The biggest update so far: a redesigned app, four new database families, collaboration, deeper analysis and administration tools, and a full testing and security pass.
This release ships Windows installers only. macOS and Linux builds will follow.
New look and customization
- Redesigned interface: new welcome page, connection dialog, object pages, Settings (now split into sub-tabs), ER diagram, query plan, profile and dashboards.
- Database logos in the navigator, with the connection's color and state as marks.
- Choose where the navigator, results, tab bar and side panels go; pick an icon family (Lucide, Tabler or Phosphor); animations can be reduced or turned off.
- Enter confirms every dialog; empty and loading states look the same everywhere.
- Recent scripts on the welcome page; a project can use a folder you choose.
New databases
- Redis, Elasticsearch and OpenSearch, Cassandra and ScyllaDB, each with connection, navigator, editor, document tree and grid edits (and a redis-cli terminal for Redis).
- Drivers you download can have several versions, updates and a compatibility check.
Editor and grid
- Computed columns in the result grid, and pivot of results.
- Explain: create the suggested index in an editor.
- Scripts run in the real
psqlwith meta-commands, errors, selection and cancel. - Edit table... from the table's tab and from the data viewer, with Structure.
Schema tools
- ER diagram: full screen, minimap, edit mode (draw the schema and generate the DDL), layered layout that routes lines around tables.
- Schema history with snapshots (also on a schedule) and the changes between two of them.
- Compare the data of two tables by key and get the sync script.
- Write a schema comparison as a Flyway migration or Liquibase changelog; migration status of a project folder (Flyway, Liquibase, Prisma, Alembic, Rails).
- Forms to create views, functions, triggers and sequences; "where is this column used" across views, routines, triggers and scripts.
- Generate DDL opens at once and fills in blocks, with Stop.
Import, export and transfer
- Saved transfer profiles, runnable by hand or from a scheduled task.
- Much faster bulk loads on SQL Server (bulk copy) and DuckDB (appender).
Analysis
- Profile a whole table (patterns, outliers, duplicate rows).
- Query across databases, save results as Parquet and open them offline, custom dashboards from saved scripts.
Administration
- Users, roles and privileges with generated statements; server parameters and a server dashboard.
- PL/pgSQL debugger (needs the pldebugger extension on the server).
Collaboration
- Git for saved scripts (status, diff, commit, pull, push).
- Share a query as a link or a
.platypusfile. - Encrypted folder sync and shared team projects; init statements a shared project brings ask for approval first.
- Sandboxed WebAssembly plugins for editor actions and drivers.
- Sensitive columns: marked by rules or by you, masked for agents and in exports.
Agents and MCP
- Setup page with client cards and ready-made plugin and Codex configurations.
- Agents can read schemas as resources, saved scripts and history (sensitive values masked), run Redis, Elasticsearch and Cassandra requests with read-only checks, and see your active tab when you consent.
Security and reliability
- Read-only connections are now enforced by the database session where supported, not only by the app.
- Stronger vault encryption settings; credentials masked in logs; agent token files kept private; safer handling of shared files, git folders and SQL file restores.
- Hundreds of fixes from a full testing campaign across all supported databases.
Upgrading
Installing over 0.2.1 keeps your connections, passwords, scripts and settings. Things you may notice:
- Read-only connections now also run read-only on the server (PostgreSQL, MySQL and others that support it).
- Agents have no access to connections that arrive from a shared project until you allow it.
- New master passwords (vault and sync) need at least 8 characters; existing ones keep working.
- On Windows and Linux, Fold all is Ctrl+Alt+F and Unfold all is Ctrl+Alt+Shift+F (macOS keeps Cmd+Alt+[ and ]).
- CSV export writes cells starting with
=,+,-,@as text by default (a leading'); turn off "Formulas as text, for spreadsheets" to change it. - Updates are left to the package manager when the app was installed through one.
PlatypusDB v0.2.1
See the assets below to download and install this version.