Added
- External API for Raycast, Cursor, Claude Desktop, and other MCP clients. New Integrations panel with token-based pairing (PKCE), per-connection access control, and a 90-day activity log
- New MCP tools:
list_recent_tabs,search_query_history,open_connection_window,open_table_tab,focus_query_tab - Per-connection External Access setting (
blocked/readOnly/readWrite); effective scope is the minimum of token scope and connection level - PostgreSQL ICU collation provider in Create Database (PG 15+)
- Connection URL parsing supports SSH
user:password@host, multi-host, MongoDB auth params, and Redis database index - SSH Private Key auth auto-resolves keys from
~/.ssh/configand default locations (id_ed25519,id_rsa,id_ecdsa) - Single-click cell editing in the data grid (no more double-click)
- Multi-cell paste from TSV clipboard data, grouped as one undo
- Shift+Tab navigates to the previous cell
- Copy rows in TSV, HTML table, and plain text for richer paste in spreadsheet apps
- AI provider settings allow manually entering a model name when the provider does not return one
- VoiceOver: column headers announce sort direction and priority; cells expose row and column index ranges
Changed
- Result safety cap is enforced after the query runs, not by rewriting your SQL. When a result is capped, the status bar shows "Showing N rows (truncated)" with a Fetch All button. Load More on user-query tabs is removed; table-tab pagination is unchanged
- MCP server lazy-starts on first external request; manual enable is gone
- Settings tab renamed from "MCP" to "Integrations" with sections for connected clients, activity log, and pairing
- Activity log gained an Export button that writes the current filtered list to CSV
- Connection Advanced settings: AI Policy and External Clients share a single External Access section with a segmented control
- Create Database is driver-driven; engines without creation support hide the Create button instead of failing on click
- Data grid: persistent column reuse pool, SF Symbol sort indicators that respect light and dark mode, header divider taps trigger resize instead of sort, focus ring follows system accent
- Data grid undo/redo uses the window's UndoManager, unifying Cmd+Z across editor and grid
- Right-click during cell editing shows the native text context menu instead of the row menu
- OpenSSL shared as dylib across app and plugins, reducing bundle size by ~15MB
Removed (BREAKING)
- Old name-based deep links (
tablepro://connect/{name}/...) are gone. Use UUID-keyed paths from "Copy Connection Deep Link" in the sidebar context menu; saved bookmarks must be regenerated - MCP server data directory moved from
~/Library/Application Support/com.TablePro/to~/Library/Application Support/TablePro/. Re-pair external clients after upgrading. Delete the old directory withrm -rf ~/Library/Application\ Support/com.TablePro - Separately distributed plugins (Oracle, DuckDB, MSSQL, MongoDB, BigQuery, LibSQL, Cassandra, Etcd, Cloudflare D1, DynamoDB) require update before use. PluginKit ABI bumped to 9
- Settings renamed:
enforceQueryResultLimitis nowtruncateQueryResults,queryResultLimitis nowqueryResultRowCap. Custom values revert to defaults on first launch
Fixed
- SELECT queries with a user-written LIMIT now return the requested row count. The query engine no longer strips your LIMIT and substitutes its own cap, so
LIMIT 10returns 10 rows. Affected SQLite, DuckDB, LibSQL, ClickHouse, Redshift, Cloudflare D1, and the MCP query path. MSSQL and Oracle no longer silently injectORDER BY 1either (#956) - Crash on macOS 26 when opening SQL Preview
- File associations for
.sql,.sqlite,.duckdbnow appear in Finder's Open With menu - New tab from the empty state replaces the placeholder instead of opening a side-by-side tab
- PostgreSQL Create Database collation errors on glibc-initialized servers (#927)
- Redshift Create Database emits valid
COLLATE { CASE_SENSITIVE | CASE_INSENSITIVE }instead of PostgreSQLLC_COLLATEsyntax - SSH agent and
IdentityAgentsocket paths now expand~so 1Password and similar agents work - Connection form
usePrivateKey=truefrom URL no longer disables Test and Create buttons - Transient connections from URL clean up keychain entries on connection failure
- Native Search Field focus regression when clearing text
- Group and connection deletions persist before firing the sync notification, fixing a race that could re-upload deleted records to iCloud
- MCP
execute_query: trailing semicolons no longer break appended LIMIT/OFFSET - Pairing approval: 5-minute countdown timer, searchable connection list, can no longer grant via Return key, requires explicit Approve click
- Token deletion and client disconnect now require confirmation
- Activity log: searchable across action, token, connection, and details; connection name shown instead of UUID prefix; single scroll owner
- Token, audit, and pairing sheets respect Dynamic Type and dark mode; warning banner stays visible in dark mode
- Token list switched to a native list with keyboard navigation, multi-select, and a context menu (Revoke, Copy ID, Delete)
- "Last used" timestamps use RelativeDateTimeFormatter for correct localization
- Refuse to generate SQL when the database dialect cannot be resolved, instead of silently emitting unquoted identifiers