Skip to content

Releases

PlatypusDB v0.6.2

Choose a tag to compare

@github-actions github-actions released this 14 Nov 16:53

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 as io.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_DB is 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

Choose a tag to compare

@github-actions github-actions released this 13 Nov 20:17

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_edits works on MongoDB collections. The agent names documents by _id (an
    ObjectId as its 24 hexadecimal digits, read by the type of the collection's _id); the collection
    opens in its data viewer with a find of 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

Choose a tag to compare

@PaoloCisly PaoloCisly released this 13 Nov 00:07

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 find on one collection (the data viewer, or a
    statement you type, with its use or getSiblingDB database and a projection that keeps _id), by
    _id. Each change is one updateOne, insertOne or deleteOne, 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,
    createCollection and createIndex run 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
    (after transactionLifetimeLimitSeconds, 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, with insertOne, updateOne, updateMany, replaceOne, deleteOne and
    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. A deleteMany or updateMany with 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, hint and let on an update or
    a delete, ordered on insertMany, and hint, collation and maxTimeMS on a read now reach the
    server. An update without its arrayFilters, or a filter without its collation, could change other
    documents than the ones asked for. An option not known is refused by name.
  • MongoDB: updateOne with { multi: true } changed every matching document; it is now refused, as
    multi belongs to the old update().
  • 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 now NumberLong("…").
  • MongoDB: the data viewer matched a collection's name ignoring case, so db.Orders.find() could be
    taken for orders; 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

Choose a tag to compare

@PaoloCisly PaoloCisly released this 13 Nov 00:04

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 permissions hooks, tabs and grid shown 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, and after_query hears of a database's own client and of EXPLAIN ANALYZE; agents, exports and the rest they do not cover are listed in docs/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 when plugins.json cannot 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 id or version that 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
    kinit or a keytab (KRB5CCNAME, KRB5_CLIENT_KTNAME), on Windows the session's (SSPI). A field
    sets the service name, postgres by 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_dump and pg_restore sign 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.json points 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

Choose a tag to compare

@PaoloCisly PaoloCisly released this 13 Nov 00:01

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, in docs/guide/. It loads the first time it is opened, not at each start.

Changed

  • Agents: sensitive columns read •••••• in run_query, sample_rows and get_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_diagram tool draws a schema, or the tables near some tables, as a Mermaid
    erDiagram, or with format: "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_objects and the table resource return the user's notes, tags
    and sensitive marks, and search_objects also 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_activity and
    top_queries (read-only, with the values in other sessions' statements masked).
  • Agents: propose_edits opens rows to add, change or delete in the data viewer as pending edits, which the user saves or discards. next_page reads long results in pages, query_across_databases joins 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_query result no longer waits for the whole read-ahead
    for next_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_table on MongoDB no longer shows sensitive fields inside a document. A
    mark on user.password, or a rule that matches the nested name password, now keeps those
    values out of the figures of the parent object or array (top values, minimum, maximum). run_query
    and sample_rows mask the same nested fields in a document or array column, at any depth.
  • Security: get_user_context follows the user's statement to the columns it reads, as
    run_query does. 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 in connections.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.toml or the sensitive marks in catalog.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 (see docs/AGENTS.md).

PlatypusDB v0.4.1

Choose a tag to compare

@PaoloCisly PaoloCisly released this 12 Nov 23:58

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

Choose a tag to compare

@PaoloCisly PaoloCisly released this 12 Nov 23:55

Added

  • Connections: export connections to a .platypusconn file, 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 FOR clauses.
  • 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 the connect_timeout option 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

Choose a tag to compare

@PaoloCisly PaoloCisly released this 12 Nov 23:52

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 psql with 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 .platypus file.
  • 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

Choose a tag to compare

@PaoloCisly PaoloCisly released this 12 Nov 23:52

See the assets below to download and install this version.