Changelog
Every release, newest first. Downloads for each version are on GitHub Releases.
v3.3.02026-10-09
Fixed
- Results grid no longer hangs or jumps while scrolling — rows are measured instead of estimated and the per-cell copy button is gone; wide 100-row results scroll at full frame rate.
- Query history shows your history — the panel follows the tab's connection, refreshes after every run, and the favourite star updates.
WITH / CALL / TABLE / VALUES returned 0 rows when a database was selected in the tab. CALL now shows every result set.
- Index Manager broke on tables with a functional index (which also broke tree expand and the ALTER designer); prefix (
name(20)) and DESC index parts are supported; the list refreshes after create/drop.
- ALTER designer keeps the full column definition — UNSIGNED, charset/collation, ON UPDATE, GENERATED, INVISIBLE, SRID and comments survive a modify; move up/down reorders only the moved column; PK/UNIQUE ticks and foreign keys work.
- One statement scanner with
DELIMITER (stored procedures and triggers), double quotes, backticks, # comments and $$ bodies. Run All executes on one pinned connection, so SET @x, temp tables and session settings carry across statements.
- MySQL types: BLOB/VARBINARY/GEOMETRY render as hex,
BIT(n) as an integer, BIT(1) edits bind correctly; database names with - or space can be queried.
- Connectivity: SSH tunnel + SSL connects; custom CA / client cert fields; EXPLAIN works on MariaDB and MySQL 5.6 and honours the tab database; mysqldump gets the missing flags and a "Backup Schema Only" item.
- Table editor writes a real NULL; CSV import treats empty cells as NULL, runs in one transaction, strips a BOM and streams large files. Kill offers "Kill connection" for idle-in-transaction sessions.
- Redis: a sorted set with a
+inf/-inf score no longer exits the app; connection-state commands are refused in the console; the read-only allow-list no longer blocks common reads; "Scan all" stops on error; Add Key refuses to overwrite.
- A stale run can no longer overwrite a newer result; per-tab state is released on close; dumps and exports are owner-only; session/settings writes are atomic; logs go to
~/.querypilot/logs/.
Added
- Production confirmation on CreateTable, every ALTER, index create/drop, table-editor writes, grid Apply, CSV import, Restore and Kill; read-only is enforced on every mutating binding. Typed
BEGIN is refused on MySQL/Postgres.
- Result size cap (32 MB per result, 256 KB per cell) with a "limited to N rows · Load more" badge.
- App is ~9 MB smaller — Monaco ships only SQL and JSON; undo history survives pane switches.
v3.1.02026-08-25
Added — MySQL server monitoring
- Performance → Overview: live rates rather than raw counters — queries/s split into reads, writes, prepared statements and other; threads running against
max_connections; InnoDB buffer-pool hit rate and dirty pages; slow queries; full table scans and unindexed joins; temp tables spilling to disk; row lock waits; network throughput; new vs aborted connections; uptime; replication lag. Each tile carries a sparkline over the last few minutes, and a health strip states the verdict in plain language with the tab to check next.
- Performance → Connections: the process list aggregated by user@host, user, host or database (active, sleeping, in-transaction, longest), plus every session past a chosen age. The threshold covers open-transaction age too, so a sleeping session holding a long transaction is caught and flagged idle in transaction — the case that pins locks and undo while looking idle. Sessions can be killed through the existing production-gated dialog.
- Metric drill-downs: the full-table-scan tile opens the statements that ran without a usable index, each expandable into who runs it, a sample statement, copy and EXPLAIN-in-editor. Other tiles jump to Slow Queries, Locks, Index Health or Connections.
Added — schema and query tools
- ER diagrams generated from foreign keys — right-click a database (MySQL) or schema (PostgreSQL). Referenced tables sit left of the tables that reference them; hover to spotlight a table and its relations, click to open one. Nothing to configure or draw.
- EXPLAIN before/after comparison — capture a plan as a baseline, add an index, run EXPLAIN again and see what moved: access type, chosen key, rows examined, with an improved/regressed verdict per table.
EXPLAIN ANALYZE for MySQL 8.0.18+ — measured per-operator time, actual rows and loops instead of the optimiser's estimate.
- ANALYZE / CHECK / OPTIMIZE TABLE from the table context menu, reporting MySQL's own result message. OPTIMIZE confirms first, since it rewrites the table.
Fixed
- Right-click context menus did nothing in every v3.0.x build — the menu closed itself on the click that opened it. Tables, databases, connections and the results grid all work again.
- Performance → Variables could not be scrolled; the list was clipped instead.
v3.0.22026-08-25
Fixed
- Enabling the MCP server did nothing on a fresh install — it stayed Not running because starting it deadlocked while creating the per-install auth token.
- MySQL table and column suggestions stayed empty until a database was expanded in the tree. Connecting now loads the active database's tables, and switching databases (toolbar, tree, or
USE db) loads that one too.
- PostgreSQL, Redshift and DynamoDB kept showing a stale schema tree after disconnecting and reconnecting.
Performance
- Loading schema on one connection no longer invalidates every other connection's autocomplete cache.
- Searching the schema tree queries a few databases at a time instead of every database at once.
v3.0.12026-08-25
Fixed
- The MCP Server settings dialog failed to open on a fresh install — the allowed-connections list was sent as
null instead of an empty list. It now opens correctly on first run and on upgrades from older settings files.
v3.0.02026-08-23
Added — Redis (new engine)
- Connect with just host:port — standalone vs. cluster is detected automatically and the remaining cluster nodes are discovered; Sentinel profiles supported. TLS, ACL user/password, DB index, SSH tunnel (standalone).
- Visual key browser: glob/prefix filter, type filter, keys grouped into a collapsible
: tree with per-folder counts, Results · Scanned X / Total progress, Load more and Scan all across every cluster master, and a main-pane results table for prefix/glob lookups.
- Type-aware key editor — string (Format JSON), hash, list, set, sorted set, stream (read-only); rename (works across cluster slots via DUMP/RESTORE), TTL edit, delete with confirm; read-only connections block edits.
- Analyze pane: Overview (version, uptime, clients, memory, keys, ops/s, hit rate, per-primary-node table, memory/keys share per node), Database Analysis (sampled memory-by-TTL histogram with extrapolate / no-expiry toggles, top namespaces by memory or keys with data types), Slow Log across all masters.
- Raw command console with history recall; Redis MCP tools (
redis_scan_keys, redis_get_key, redis_server_info, redis_run_command — read-only unless a write grant is active).
Added — Redshift
- SSH tunnel and IAM authentication (provisioned
GetClusterCredentials or serverless GetCredentials via the AWS profile/SSO/default chain).
- Dialect-aware autocomplete: Redshift/PostgreSQL get
DISTKEY/SORTKEY/ENCODE, UNLOAD/COPY/VACUUM, LISTAGG, APPROXIMATE COUNT(DISTINCT), DATE_TRUNC/DATEADD, NVL, DECODE, CONVERT_TIMEZONE, JSON_EXTRACT_PATH_TEXT, REGEXP_*; MySQL-only suggestions no longer appear.
- Structured EXPLAIN — rows, cost and distribution strategy parsed;
DS_BCAST_INNER, DS_DIST_BOTH, nested loops and ≥1M-row sequential scans flagged as expensive.
- Queue vs execution time (WLM) in slow queries; Generate UNLOAD… / COPY… statement builders on any table; table-health badges (unsorted % / skew) in the tree; Spectrum external schemas browsable.
Added — DynamoDB
- Per-query cost visibility: every Scan/Query/PartiQL shows
Items returned · Items scanned · Efficiency · RCUs consumed, with a warning when DynamoDB stopped at its 1 MB page.
- Load more pagination, strongly-consistent read toggle, and IAM Role / default credential chain auth in the connection form.
Added — App
- Connections grouped by database engine in the sidebar (MySQL / PostgreSQL / DynamoDB / Redshift / Redis), with a one-click switch back to custom groups.
- Design refresh: surface/semantic tokens, native macOS title strip, new Modal/ContextMenu/ConfirmDialog primitives, regrouped editor toolbar, running overlay with elapsed time and Cancel.
- Typing no longer re-renders the whole app; memoized grid rows; async history recording; concurrent schema loads; Monaco bundled locally (no CDN).
Fixed
- Data safety: inline edit/delete in the results grid is blocked when no primary key is known — the previous all-columns fallback combined with MySQL's
LIMIT 1 could silently modify the wrong of two look-alike rows.
- Credential encryption at rest now covers PostgreSQL and Redis passwords and all SSH secrets; the table editor runs inside the open transaction and batch apply is all-or-nothing; the server-side production guard is enforced on every execute path including MCP.
- Redshift: schema selection pins
search_path and the query to the same connection (previously they could run on different pooled connections and unqualified names silently resolved against public); Export-as-INSERT used MySQL syntax for Redshift/PostgreSQL; TIMESTAMPTZ lost its offset; BEGIN/COMMIT/ROLLBACK silently auto-committed — now reported.
- DynamoDB: Query and Get Item failed on every table with a numeric partition/sort key; removing an attribute in the item editor reported success but left it in place.
- Connecting to a slow or unreachable server no longer freezes queries and health checks on every other open connection.
- The health check skipped Redis, so auto-reconnect recycled the client mid-scan.
- MCP server: enabling it could show "Not running" forever with no explanation — bind/token failures (e.g. port 47823 already in use) are now surfaced; Redis connections appear in
list_connections.
v2.4.02026-08-22
Added — Full PostgreSQL support
- PostgreSQL joins MySQL, Amazon Redshift, and DynamoDB as a fully-supported engine: transactions (BEGIN/COMMIT/ROLLBACK + auto-commit), an index manager, table relations (outgoing + incoming foreign keys), a full Alter Table designer, CSV/SQL file import, connection-string paste-to-parse, and EXPLAIN ANALYZE.
- PostgreSQL-native features with no MySQL equivalent: an extensions viewer/installer, custom ENUM types (creatable and selectable directly in the table designer), materialized views (create/refresh/drop), array column types (
TYPE[]), sequences (list/create/restart/drop, with SERIAL-owned sequence detection), table bloat stats (dead-tuple % and last-vacuum time) with one-click VACUUM/ANALYZE, and read-only visibility into Row-Level Security policies and declarative table partitioning.
Fixed
- The query editor's autocomplete only ever called MySQL's schema-loading functions regardless of a tab's actual engine, so PostgreSQL and Redshift tabs never fetched column/table suggestions through that path — and no engine reopened the suggestion list once a lazy load finished, so the first reference to any not-yet-loaded table showed an empty dropdown. Suggestions now load per-engine and reappear automatically.
- PostgreSQL and Redshift query plans were run through MySQL's severity heuristics and always flagged as a false "full table scan," regardless of the actual plan. Text-based plans now render correctly.
v2.3.02026-08-18
Security — MCP server hardening
- Per-install bearer token + Host/Origin request validation, closing a DNS-rebinding / malicious-webpage localhost-probing gap in the local MCP server.
- Connection allow-list replaces "every open connection is reachable via MCP" — MCP tools now only ever see connections you've explicitly allowed.
- Per-connection, time-bounded write grants replace the global write-enable toggle; grant/revoke are desktop-app-only, never exposed as MCP tools.
- Fixed a SQL-injection-style bypass in
run_query's Redshift schema parameter, a read-only classifier gap around SELECT ... INTO disguised writes, and MCP tool responses that returned a bare JSON array (rejected by strict MCP clients).
Added — DynamoDB PartiQL query mode
- New PartiQL tab in the DynamoDB explorer — write real SQL-like statements (
SELECT * FROM "table" WHERE ...) instead of building filters through the GUI.
- Context-aware autocomplete: keywords, table names (only right after FROM/INTO), and attribute names learned per-table from key schema and prior query results.
Cmd/Ctrl+Enter runs the statement; destructive PartiQL on production connections goes through the same confirmation dialog as SQL writes; truncated results now show a warning instead of silently looking complete.
v2.2.02026-08-14
Fixed — DynamoDB
- Results grid no longer guesses which table produced a scan/query by scanning every table in the account — was slow and could lock onto the wrong table when key names collided. It now reads which table was actually queried directly from the backend response.
- "Get Item" mode now actually gets the item instead of silently running a scan/query
- Table-info load failures now show an error instead of failing silently
Changed — Smarter SQL Autocomplete
WHERE col=val now suggests AND/OR + the next column instead of re-offering comparison operators on an already-complete condition
Added — Explorer & Editor
- Tables/views grouped into collapsible Tables (N) / Views (N) folders with counts shown up front
- Drop Table.../Drop View... in the table context menu — still goes through the existing production/read-only safety confirmation on Run
- In-toolbar data-source switcher — rebind a query tab to a different connection without the sidebar
Fixed — Performance
- The sidebar's expanded table tree was fully re-rendering on every keystroke while typing a query — this was the main cause of reported typing lag
- Dropping/creating/altering a table or view now refreshes the sidebar automatically; disconnecting a connection clears its cached schema so reconnecting shows current state
Added — Local MCP Server
- Now works with Redshift connections too (previously MySQL-only)
- New DynamoDB tools: list tables, describe table, scan, query, get item, plus write tools when "Allow writes" is enabled
v2.1.02026-08-14
Added — MySQL Productivity
- Stored procedure/function/trigger/event visibility (list + view
SHOW CREATE definitions)
- Real database backup/restore via
mysqldump/mysql CLI (distinct from app-config backup)
- Full MySQL user management: create/alter/drop user, grant/revoke privileges
SHOW VARIABLES viewer in the Performance pane
- Connection-string paste-to-parse (
mysql://user:pass@host:port/db)
- Auto-update check against GitHub releases
- Table Relations view (outgoing + incoming foreign keys)
- Saved/reusable result-grid filters
- CSV import field-mapper (remap/skip columns, insert-vs-upsert)
Added — Local MCP Server
- Lets local MCP clients (Claude Code, Cursor, etc.) query your open connections through DB Connect
- Off by default, localhost-only, read-only by default — toggle under Sidebar → "MCP Server"
Changed — Connection UI
- Permanent connection rail replaces the connection dropdown;
⌘P fuzzy switcher
- Brand-stripe engine picker and redesigned three-section connection form
Fixed
- Query-timeout setting no longer gets silently overridden by a hardcoded socket timeout, which previously surfaced as "invalid connection" well before the configured timeout
- Several error toasts that showed "undefined" now show the real error message
- Smoother results-grid scrolling and paste handling for heavy queries
- Closed an identifier-injection gap in the Create Table flow
v2.0.02026-05-23
Added — Performance Monitoring
- MySQL Performance pane with four tabs: Slow Queries, Live Activity, Locks (Blocking Tree / Locks / Wait Time), Index Health (Unused / Redundant / Table-Scan Hot Spots)
- One-click Kill Query for live sessions (uses
KILL QUERY via CONNECTION_ADMIN)
- "Where this query is fired from" drill-down — per slow-query digest, expand to see top
user@host aggregations and recent raw samples with full SQL_TEXT
- Suggestion-to-draft — copy
DROP INDEX statements straight from Index Health into a new tab
- Redshift Performance pane — slow queries, live activity, lock waits via
STV_* / STL_* system views
- DynamoDB Performance pane (native) — read/write capacity, throttle counts, hot-partition signals, GSI status. No CloudWatch dependency.
Added — Smarter SQL Autocomplete
- Step-aware suggestions for statement-start, after
SELECT, after FROM/JOIN, in WHERE, after a column reference (operators), and in GROUP BY/ORDER BY
- FROM-clause scoping —
WHERE order_ now suggests columns of order_details (the table in scope) instead of unrelated tables containing "order_"
- Cross-database completions —
db. lists tables; db.table. lists columns
- MySQL keyword and function catalogues with prefix-match boost (
SELECT, UPDATE, COUNT(...), NOW(), etc.)
- After-column operator snippets —
WHERE col suggests = != > < LIKE NOT LIKE IN BETWEEN IS NULL ...
- Same-server cross-database querying — pick a target DB per tab without losing autocomplete
Added — Production Safety
- Tiered destructive-op confirmation modal (
DROP/TRUNCATE require typing the connection name; DELETE/UPDATE/ALTER show a one-click confirm with statement preview) replacing the easy-to-dismiss confirm() prompt
- Server-side query cancel — Stop now issues
KILL QUERY <thread_id> on MySQL and PG_CANCEL_BACKEND($1) on Redshift
- Local audit trail (SQLite-backed) for destructive actions and kill events
- Configurable persistent query timeout with clear error messages
Added — Cross-Schema Queries & Backup
- Cross-Schema Queries — JOIN and query across multiple schemas in a single connection. Autocomplete resolves tables across schemas automatically (MySQL and Redshift)
- Backup & Restore — One-click logical backups of tables, schemas, or full databases, saved locally to your laptop. Restore into any connection without leaving the app (MySQL, Redshift, DynamoDB)
Added — Editor & UI
- Monaco editor theme follows the app theme (light/dark/system) with runtime switching
- Sortable columns in every Performance pane
- Expandable cells for long SQL / lock data
- Row-count footer plus per-panel client-side filter
- SQL
VIEW create and inspect for MySQL and Redshift
Changed
- Results-grid filter now works correctly for queries with no derivable source table
- Performance-pane filter matches rendered cell values, not just raw row data
- Connection-layer security hardening for credential handling and DB clients
Install
- Homebrew Cask (recommended):
brew install --cask shubhesh07/db-connect/db-connect — Homebrew unblocks Gatekeeper automatically; upgrade with brew upgrade --cask db-connect. Tap: [shubhesh07/homebrew-db-connect](https://github.com/shubhesh07/homebrew-db-connect)
- macOS one-line installer:
curl -fsSL https://github.com/shubhesh07/db-connect/releases/latest/download/install.sh | bash (no Gatekeeper prompt — curl downloads don't get quarantined)
- DMG still bundles
install-mac.sh for users who prefer the GUI path
v1.0.02026-05-03
Added
- MySQL Support — Full SQL execution, transactions (BEGIN/COMMIT/ROLLBACK), auto-commit toggle, SSH tunnels, SSL modes
- Amazon Redshift Support — SQL queries via PostgreSQL wire protocol, schema browser, EXPLAIN plans (text format)
- DynamoDB Support — Visual Scan/Query/GetItem builder, filter expression builder, item create/edit/delete, GSI-aware querying, multiple auth modes (Access Key, SSO Profile, IAM Role)
- Monaco SQL Editor — Syntax highlighting, autocomplete (tables, columns, keywords), multi-cursor, statement selection (Cmd+D), SQL formatting
- Multi-Tab / Multi-Connection — Work across multiple databases simultaneously with connection badges per tab
- Schema Browser — MySQL (Databases > Tables > Columns/Indexes/FKs), Redshift (Schemas > Tables > Columns), DynamoDB (Tables > Items)
- EXPLAIN Visualization — Color-coded query plans with severity indicators (Efficient/Moderate/Slow), warning badges for full table scans and missing indexes
- Query History — Auto-saved with search, favorites, date grouping (Today/Yesterday)
- Saved Queries — Named queries with
{{param}} parameter support and tags
- Table Designer — Visual CREATE TABLE (columns, types, PK, engine, charset), ALTER TABLE (change tracking, DDL preview), Index Manager (create/drop with type badges)
- Inline Row Editing — Batch Apply/Revert with PK-based WHERE clauses, Insert/Delete rows from results grid
- Command Palette — Cmd+K for quick access to all actions
- Export — CSV, JSON, Excel (XLSX) via native save dialog
- Built-in SQL Snippets — Admin (Processlist, Table Status, Variables), Info (Table Size, Index Usage, Database Size), Performance (Long Running Queries, Table Locks, InnoDB Status)
- Security — AES-256-GCM encrypted credentials, OS keychain integration (macOS Keychain / Windows Credential Manager), production safety warnings before destructive queries
- Virtual Scrolling — Handle large result sets without UI lag
- Dark Theme — Default dark UI
- Keyboard Shortcuts — Cmd+Enter (run), Cmd+D (select statement), Cmd+K (palette), Cmd+T (new tab), Cmd+W (close tab), Cmd+S (save), Cmd+Shift+F (format), Cmd+E (explain)