You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
MongoDB filters on nested and array-element fields, with any-element and same-element matching and type-aware values. (#2315)
Back and Forward through a tab's browse history, on Ctrl+Cmd+[ and Ctrl+Cmd+]. (#2316)
Drag to reorder editor tabs, with Move Tab Left and Move Tab Right on the tab's menu.
Result tabs named after the statement that produced them; picking one moves the editor cursor to it. (#2280)
Statement navigation on Ctrl+Cmd+Left, Ctrl+Cmd+Right, Ctrl+Cmd+Enter, Option+Shift+Up and Option+Shift+Down. (#2279)
Swipe left on a saved connection in the welcome window for Edit and Delete. (#2310)
Current-statement highlight and a per-statement run button in the editor gutter. (#2278)
Notifications when a long-running query, import, export, backup or save finishes in the background. (#2265)
Code folding in the SQL editor, the DDL and trigger views, the import preview, the AI review sheet, chat code blocks and the JSON viewer.
Cmd+F find bar over table results, with Search All Rows for a server-side match.
Native bar, line, area and scatter charts over query results. Starter feature.
Redis Sentinel and Redis Cluster connection modes. (#1021)
DuckDB connections can open a Parquet, CSV, TSV, JSON or NDJSON file read-only.
Korean localization for macOS, iPhone and iPad. (#2219, #2264)
Help > Acknowledgements, listing the 38 bundled open source libraries with their licenses.
Plugins signed by a third-party Apple Developer ID install after you trust the developer by name.
Local hash-chained execution log of every authorized database operation, with statements stored as digests.
A minimum Safe Mode level enforceable through a macOS configuration profile.
Execute All Statements in the Execute button's menu. (#2230)
Double-click or Return on a table keeps its tab instead of reusing the preview tab. (#2235)
View > Result View switches the results pane between Data, Structure, JSON and Chart.
MCP: the 2026-07-28 protocol revision, with the two previous revisions still supported.
MCP: server discovery in one call, naming protocol versions and capabilities.
MCP: cache lifetimes on tool, prompt and resource listings.
MCP: 27 new tools, covering schema metadata, query plans, row counts and statistics, users and grants, sessions, paginated browsing, inserts, transactions and DDL.
MCP: prompt templates built from the live schema, for explaining a schema, writing SQL, reviewing a query, proposing indexes, writing a migration, auditing data quality and summarizing a period.
MCP: argument completion from a connection's real tables, databases, schemas and columns.
MCP: change notifications over a single long-lived stream.
MCP: destructive statements can be confirmed in the client.
MCP: progress updates from a long-running tool call reach the client.
Changed
The results status bar was rebuilt: one fixed height, the row count on the left, controls that keep their place while a table loads, and Add Row moved to the toolbar.
Row counts and number grouping read correctly in every language.
The row count reflects what the grid is showing, and stays on screen for an empty result.
The rows-per-page menu accepts a locale-formatted number and states the range it takes.
An estimated row total is marked as an estimate, and Last and All rows wait for Count Exactly.
Cmd+F on a table tab opens the find bar; the filter panel keeps Cmd+Option+F.
Find Next and Find Previous work on the data grid.
The JSON and PHP tree filters ignore accents, so cafe finds café. (#2204)
Picking a database in the connections strip returns you to the tab you last used in it. (#2217)
Tabs showing same-named objects from different databases carry the database in their name. (#2217)
Save in the unsaved-changes prompt closes what you asked to close once the save lands.
A column value filter survives switching result mode and switching tabs. (#2251)
The connection form's Browse button offers only the file kinds the driver opens.
The iOS Shortcuts documentation states which app build each action needs.
TablePro is built in the Swift 6 language mode, across the app, both mobile apps, all 31 plugins and the shared packages.
Removed
MCP remote access. The server binds to this Mac only.
Fixed
Forward slashes inside a nested object or array value are no longer escaped as \/ in the JSON view and the right sidebar. (#2322)
A MongoDB filter TablePro cannot translate matches nothing instead of the whole collection. (#2315)
The raw filter row works on MongoDB, and reads Raw Filter on databases that do not speak SQL. (#2315)
Match Case applies to text fields only, so turning it off no longer breaks a MongoDB number, date or ObjectId filter. (#2315)
Preview Referenced Row from the Query menu reads the cell you focused instead of counting columns from the left.
Preview Referenced Row works on SQL Server, and on iPhone and iPad on SQL Server and Oracle.
Open Quickly no longer draws a rectangular outline around its Liquid Glass surface on macOS 26 and later. (#2321)
Skip and Continue keeps going after an unreadable line in a JSON import.
An import no longer counts rows it dropped because they matched no mapped column.
Retrying an import of a compressed .sql file no longer leaves the expanded copy behind.
Importing into a new table can be retried, reusing and clearing the table the failed attempt created.
The SQL import dialog no longer offers CSV and JSON in its format picker.
Import and export result alerts stay on screen instead of closing with the progress sheet. (#2314)
A failed import reports its line number, statement and server message instead of only the rollback error. (#2314)
The failed statement list is copyable again, with Copy Details on both alerts.
TablePro stays out of the Dock and the app switcher when an MCP client starts it.
A confirmation TablePro cannot attach to a window comes to the front instead of waiting behind other apps.
Settings > Integrations reports a running MCP server even when Enable MCP Server is off.
Deleting a connection with saved queries always warns that they go with it. (#2310)
Deleting a connection you published to the Team Library no longer deletes your local copy instead.
Connections in a linked folder or the Team Library open on double-click and on Return.
A connection whose deletion could not be saved no longer vanishes until the next launch.
Select All, Ctrl+J and Ctrl+K no longer skip favorited connections outside a group.
A column whose cells carry an action button no longer cuts its value short, and late-arriving enum, set and foreign key metadata widens it. (#2303)
Size to Fit and double-clicking a column edge measure the loaded page instead of about 30 rows of it. (#2303)
235 Turkish strings that were marked as translated but still held English now read in Turkish.
A transaction that failed on commit says so instead of blaming the last statement that worked. (#2280)
Opening an Oracle connection for the first time no longer leaves the object list spinning forever. (#2294)
An object list that cannot load says so and offers Retry instead of retrying silently every 15 seconds. (#2294)
A metadata connection whose startup commands stall gives up after a minute and reports it.
Oracle reports a connection that dropped during setup as failed, and closes a connection it gave up on. Needs the updated Oracle plugin.
iOS: a DuckDB contains filter matches case-insensitively, and offers the case sensitivity control.
Deleting a connection removes its saved queries and their folders from iCloud too.
A database type is drawn in the colour its own plugin declares everywhere, instead of two tables that disagreed on 12 of 23 types.
Save on the unsaved-changes prompt applies staged structure edits from any view, and leaves the tab open when the save is refused, cancelled or rejected.
Opening one table in two tabs gives each tab its own structure editor, sub-tab, filter and sort.
Clicking another table in the object browser no longer silently discards staged structure edits.
Switching between two structure or Create Table tabs no longer leaves the incoming tab's buttons dead.
Twelve commands spell their trailing ellipsis the way macOS does, in the menu bar and the context menu alike.
A BEGIN ... END body runs whole from the editor instead of being split at every semicolon inside it. (#2278)
A semicolon inside a MySQL # comment is no longer read as a statement boundary. (#2278)
A failed refresh no longer empties the stored procedure and function lists.
Switching to a PostgreSQL database you cannot open reports the failure and leaves the connection where it was.
Plugins from the registry are notarized, so Gatekeeper stops blocking them. Every plugin needs to be published again to pick this up.
Installing a plugin from a ZIP clears the quarantine flag from the whole bundle, not only its top level.
DuckDB lists its databases, schemas, tables and columns on a Mac that cannot reach the internet. (#2285)
A DuckDB UUID, ENUM, list, struct, map or time zone aware timestamp column no longer crashes TablePro.
A DuckDB view opens as CREATE OR REPLACE VIEW instead of two statements spliced together.
Switching DuckDB database by a name differing only in capitalisation lists that database's objects.
A DuckDB connection that fails after opening the file releases it instead of locking it until quit.
A DuckDB connection that opens a file but reports no catalog fails with that reason.
A mistyped Parquet or CSV path says the file is missing instead of creating an empty database.
A new DuckDB connection can be saved; the form no longer requires a database name it offered no field for.
Opening a table on Dameng, Oracle, BigQuery, Elasticsearch and etcd no longer puts up a Switch Failed alert. (#2262)
Switching schema on Dameng, Oracle, BigQuery, Snowflake and Trino re-reads only the routines instead of the whole object list. (#2262)
Open Quickly lists each schema once on Dameng, Oracle and BigQuery.
The Settings window is titled after the pane you are on, and refuses to be resized smaller than a pane can draw.
Redis Sentinel and Cluster connections show their nodes in the connection list instead of the word Redis alone.
Redis Cluster routes OBJECT, MEMORY, SORT, GEORADIUS, ZUNIONSTORE and ZINTERSTORE to the right shard on Redis 6, where the fallback routing table disagreed with the server on 32 counts.
Redis reports what the server actually answered instead of clearing a refused write from the grid.
SET key value KEEPTTL keeps the expiry, and SET options TablePro does not model are sent to the server untouched.
A Redis command whose reply timed out is re-sent only when it provably never reached the server.
A Redis SCAN that returns an error reports it instead of showing an empty keyspace.
Floating point values show the shortest digits that identify the stored number exactly, on MongoDB, Elasticsearch, ClickHouse, Snowflake, DynamoDB, Beancount and JSON import.
A 32-bit float bound as a query parameter keeps its own precision, and a value that is not a real number binds as null.
Editing a MongoDB row keeps each field's stored type, decimals and 64-bit integers included, at any nesting depth.
MQL export writes very large and very small numbers as numbers instead of quoted strings.
A nested value too long to show in full is no longer written back or exported as a fragment.
Dameng results are complete instead of stopping at the server's first 32KB batch. (#2262)
Dameng tables with a CLOB or BLOB column read the right columns, rows and values. (#2262)
Creating a Dameng table works when it has an index or a column comment, and so does changing a column's name and type at once. (#2262)
Column comments show up on Dameng tables in a schema not named after its owner. (#2262)
Dameng connections recover after a query is stopped instead of failing every statement for up to 30 seconds. (#2262)
Query Insights keeps each aggregate's query text and error inside the selected connection, source and date range. (#2268)
A plugin's own connection fields reach the connection form, so Redis gets its Key Separator field and its ElastiCache IAM section. (#1021)
A connection that lists its servers in a host list works over an SSH tunnel, MongoDB replica sets included.
A rows-per-page value large enough to overflow no longer crashes TablePro.
Changing rows-per-page on any page but the first no longer strands you on a mislabelled page.
Rows past a driver's row-count estimate are reachable.
All rows loads all of them instead of the estimated number.
Turning a page while Count Exactly is running no longer leaves a spinner that never stops.
A page number typed for one tab is no longer applied to another.
A table shows the range it actually loaded rather than its estimate.
A fresh query tab no longer shows a sliver of a status bar that jumps to full height on the first run.
VoiceOver reads the applied filter count on the Filters button and skips the status bar's separator dots.
JSON result mode shows the rows the grid is showing, in the same order, and resolves a selection to that same row. (#2251)
Rows marked for deletion no longer appear in JSON result mode, and the count line says how many are held back. (#2251)
Editing a cell in a result you clicked back to writes to that result's own table.
A result whose table TablePro cannot identify no longer looks editable.
Running several statements no longer carries the previous run's primary key over to the new table.
Column details that arrive after a query land on the result that asked for them.
Editing a field in the row inspector obeys the same rules as the grid.
Rows loaded by Fetch All stay with the result they were loaded for.
Switching between results asks before discarding unsaved edits.
Every restored tab hides the columns you hid for its table, not just the tab that was in front.
A query tab reopens with the caret where you left it, on every tab rather than the front one.
Restored tabs keep their sort and page number, not just the tab that was in front.
A restored tab reopens on the rows it was showing, because the page number is saved with its page size.
Scrolling a result with hundreds of columns is no longer slow; only the columns near the viewport are built. (#1219)
A column you hid keeps its place in the column order.
A row you are inserting shows empty values in JSON mode instead of TablePro's internal marker.
Cmd+F no longer opens a find bar in JSON result mode, where it could never match. (#2244)
The Filters button and Cmd+Option+F open the filter panel in JSON result mode. (#2244)
Add Row, Duplicate Row, Paste and Delete no longer collapse the JSON view to the row they touched. (#2244)
The date picker on an empty date or timestamp cell starts at your own clock and writes your own time. (#2241)
A time value carrying a UTC offset follows your chosen date format instead of showing as raw text. (#2241)
Open in New Tab opens a second tab for a table that is already open. (#2235)
Following a foreign key into a new tab no longer overwrites the filters on a tab already showing that table.
Opening a table from the sidebar while the object list is still loading opens it.
Opening a table from Favorites gives it a tab of its own.
A Cloud SQL Auth Proxy or Cloudflare tunnel that fails to start reports the last thing it said.
The Cloud SQL Auth Proxy and the Copilot language server are checked against their pinned version and digest on every start, and reinstalled when either no longer matches.
Editing a connection keeps its favorite mark, its place in the list, and its always-allowed AI tools.
MongoDB, Cassandra and Trino connections can name a database, keyspace or catalog in the connection form. (#2234)
Sorting a column keeps working after you hide or show columns. (#2234)
Hide All hides every column of a MongoDB collection, fields that appear only in later documents included. (#2234)
Opening a .sql file that is already open shows its tab instead of replacing what you typed in it.
A .sql tab reopened from Recently Closed knows it has unsaved edits.
Table maintenance from the object browser runs against the database the table you picked lives in.
A table that exists in two databases can be opened in both. (#2217)
Server Dashboard, Users & Roles, Query Insights, ER Diagram and a linked SQL file select the tab they already opened. (#2217)
The empty Favorites sidebar fits its width on macOS 15 instead of running past both edges.
Table favorites and saved queries sync through iCloud; their record types had never been created in the schema.
An SSH profile that uses a jump host syncs.
A connection carries its favorite mark, every tag, and its AI rules and always-allowed tools to your other Macs.
iOS: a connection's query timeout syncs instead of being dropped on upload.
The inspector button stays at the right end of the toolbar when the inspector is open.
The Tables and Favorites switch keeps following the sidebar after you open Customize Toolbar.
Refresh, New Tab, Open Quickly, Export, Database, Results and Dashboard are dimmed in the toolbar's overflow menu when they cannot run.
iOS: a value containing a backslash, a newline or a carriage return is stored as you typed it on PostgreSQL, Redshift, SQL Server, SQLite, DuckDB and Oracle.
iOS: PostgreSQL sessions set standard_conforming_strings on.
iOS: Add Row to Table and Add Rows to Table write to the database or schema you picked in Shortcuts.
iOS: all three Shortcuts actions are found by searching TablePro, and are grouped under Database.
Cmd+W closes the Settings and Integrations windows, the JSON and PHP viewers, the connection form and the column inspector.
The File menu names the close command after what it will close.
A JSON or PHP tree filter reveals nested matches, searches the whole of a long value, keeps rows expanded, and says when it finds nothing. (#2204)
Copy Value on a JSON object or array copies that part of the document instead of a summary. (#2204)
Closing a tab holding unsaved cell edits, .sql changes, staged structure changes or staged user and role changes asks before discarding them.
A tab with unsaved cell edits shows the unsaved dot.
Closing a tab no longer leaves its unsaved cell edits loaded behind it.
A .sql file opened from a linked favorite can be opened again after its tab is closed.
Staged structure changes and a table definition in progress survive switching tabs, and switching a table tab between Data and Structure.
Timestamps written with a space before the offset, or with fractional seconds, follow your chosen date format.
Switching connection no longer empties the SQL editor or kills its undo, highlighting, shortcuts and Vim mode. (#2236)
Security
A read-only MCP token can no longer run a statement that writes; an unrecognized statement is treated as a write, and statements that reach the filesystem or run a program are refused.
Safe Mode confirms MCP writes instead of pre-clearing them.
A token limited to some connections no longer sees the names, hosts, ports and usernames of the others.
With authentication off, a local caller is read-only and cannot administer anything.
The activity log records the calling token, stores statements as digests, is hash chained, and is no longer readable by other accounts on the Mac.
Repeated bad tokens are rate limited, requests with no credentials included.
A pairing link is verified and its destination shown before you approve it, a failed exchange burns its code, and approving no longer revokes an unrelated token of the same name.
A malformed cancellation message no longer crashes the app.
An MCP session identifier is no longer usable as a credential.
Secrets belonging to separately distributed drivers are stored in the Keychain and stripped from exported connections. Existing values move to the Keychain on the next save.