Releases: OtterMind/Chat2DB
Release list
Chat2DB v5.3.7
Chat2DB Community 5.3.7 adds in-app desktop updates for the packaged macOS, Windows and Linux builds; basic configuration and preview for Excel, JSON and SQL imports, plus an ultra-fast CSV import mode; an Update Time column in the table list; Oracle EXPLAIN PLAN results; and 28 user-visible improvements and fixes across the query console, task center, dashboards, AI history and connection handling.
Added (5)
- In-app desktop updates: the packaged macOS, Windows and Linux builds discover and install new versions, and a package is installed only after its signed manifest is verified. Settings → About gained a "Receive beta versions" switch. A downloaded update is kept when the application restarts or checks for updates again, so it installs without downloading again and also works offline; on macOS the update helper runs independently of the application so the update survives the application closing; on some machines the previous version is restored and reopened when an update does not start healthily. by @haizhi03 @openai0229 in #2698 #2917 #2923 #2931 #2943 #2947 #2949
- Basic configuration for Excel, JSON and SQL imports: non-CSV imports previously had neither configuration nor preview. Excel/XLS now select the worksheet, header row, first and last data row and the column range, treat empty fields as NULL, and set the date, time and decimal formats for text cells; JSON selects the encoding, the data structure (array of objects, single object, JSON Lines) and the data node path, and can skip individual nested fields; SQL supports a file encoding (detected automatically or given explicitly, such as GBK). The preview and the import run use the same options, so the mapping shows what is imported. by @openai0229 in #2921
- Ultra-fast CSV import mode: after the file preview an "Ultra-fast mode" can be enabled, which imports in parallel batches over a dedicated connection and adapts concurrency and batch size to the measured throughput; a failure or cancellation cancels the registered statements and waits for every worker to stop, and the standard mode stays the default. by @liushikuan63 in #2908
- Update Time column in the table list: shown after Create Time, left empty when unknown, translated in all five languages. by @openai0229 in #2915
- Oracle
EXPLAIN PLANshows the execution plan: running it in the Oracle SQL console now returns the plan instead of reporting success with no result: the statement runs under a generated statement id, the plan is read back fromPLAN_TABLEthroughDBMS_XPLAN.DISPLAYand returned as a result set. A missingPLAN_TABLEreports an actionable message,EXPLAIN PLAN ... INTO <custom table>still goes to the database, and requesting the plan of a statement that already is an explain command no longer nests twoEXPLAIN PLANclauses. by @openai0229 in #2945
Optimization (3)
- More reliable task center polling and paging: records are merged by id and update time, terminal states and already loaded history are kept, and responses that arrive after a task was deleted or the panel was closed are dropped; a failed load ends the loading state, reports an error and can be retried, and tasks cancelled abnormally no longer stay in RUNNING. by @HandSonic in #2795
- MCP token reset is serialized: a reset shows a busy state, repeated clicks no longer create several tokens, and a stale callback no longer overwrites the newest token. by @HandSonic in #2845
- Editable results for single-table subqueries: queries such as
SELECT * FROM (SELECT * FROM APP.EVENT_LOG ORDER BY CREATE_TIME DESC) WHERE ROWNUM <= 100now resolve the physical table key, so the result set can be edited directly. by @openai0229 in #2916
Fixed (20)
- Redis key updates validate the type: a missing or unknown old or new key type reports an error instead of falling back to string commands that delete and recreate the key. by @Aias00 in #2437
- CockroachDB editing without a primary key: updates and deletes without a visible primary key use the native
LIMIT 1form and keep the original row predicate, instead of failing with PostgreSQL'sctid. by @Aias00 in #2484 - Redshift and CockroachDB database creation: each dialect generates a concise
CREATE DATABASE, Redshift hides the unsupported database comment, and creating a database or schema stops after the first failing statement instead of overwriting an existing database comment with a duplicate-name error. by @Aias00 in #2486 - Informix table operations: renaming a table, changing a column and reading the execution plan are generated by the Informix plug-in, owner references are correct, and character type aliases are no longer collapsed into a single character. by @Aias00 in #2488
- DuckDB paging: pagination uses
LIMIT … OFFSETinstead of the comma syntax DuckDB does not support. by @Aias00 in #2490 - JSON import null semantics: a missing field and an explicit null are distinguished, both are written as SQL NULL, and non-object records are rejected before an INSERT is generated. by @HandSonic in #2809
- Clearer import failures: a failed CSV, XLSX, XLS, JSON or SQL import names the setting that caused it (encoding, data node, file row or column, duplicated source field, column range, row range) or reports the database error class with its
SQLStateand error code, instead of a generic failure. by @openai0229 in #2921 - Exports no longer overwrite a file with the same name: an occupied target name falls back to a numbered available name, and a failed copy is rolled back and cleaned up on the next start. by @HandSonic in #2800
- Dashboard list: an oversized page number returns an empty page instead of an index error, the dropdown keeps loading when a dashboard has more than 20 items, and a failed request shows a retryable error state while keeping the data that is already loaded. by @HandSonic in #2812
- Out-of-range paging: console records and table data compute offsets with long arithmetic, so a very large page number returns an empty page instead of wrapping around or throwing
IndexOutOfBoundsException. by @HandSonic in #2815 #2824 - Corrupted caches recover: a corrupted scalar JSON entry no longer makes the key unusable for the rest of its TTL; only the damaged key is removed and the cached value is rebuilt. by @HandSonic in #2828
- A failed save no longer leaves memory and disk out of sync: data source order, namespace position, ER-diagram position and small data writes are persisted before memory is updated, so a failed write is not shown as saved and does not revert to the old state after a refresh. by @HandSonic @Aias00 in #2480 #2830 #2840 #2846
- More reliable AI conversation history: sessions and message history are written with a temporary file and an atomic replace, so an interrupted write no longer destroys the last usable history, and a failed message deletion rolls back the session index instead of losing the owning record. by @HandSonic in #2843 #2841
- Line endings when copying results on Windows: copied result rows use CRLF, so pasting into native programs such as SAP GUI no longer merges the rows or shows
#. by @openai0229 in #2909 - SSH connection test failures: a failed request or a desktop timeout reports a clear message instead of leaving the test loading forever. by @Aias00 in #2548
- Cursor flickering in the Windows editor: moving the mouse inside the SQL editor no longer switches between the arrow, I-beam and zoom cursors, and macOS and Linux keep their previous behaviour. by @openai0229 in #2922
- Duplicated connections keep their fields: duplicating a data source keeps the BigQuery and service name fields, deep-copies the SSH, driver and extension configuration, and resets runtime handles. by @HandSonic in #2793
- Local data source filtering: alias search and type filters apply before paging and counting,
PRIVATEandSHAREDmatch case-insensitively, and a missing type in older data is treated as private. by @HandSonic in #2820 - Clean process exit: the cookie cleanup thread is a daemon thread, so exiting or stopping the service no longer blocks process termination. by @Aias00 in #2522
- Redacted IPC debug logs: passwords, SSH passphrases and JDBC connection strings in desktop request and response debug logs are no longer written in clear text. by @Aias00 in #2473
Full Changelog: v5.3.6...v5.3.7
Chat2DB v5.3.7-beta.4
Chat2DB Community 5.3.7-beta.4 is a Beta prerelease. Oracle EXPLAIN PLAN now returns the execution plan instead of reporting success with nothing to show; on some macOS machines a desktop update stopped after the application closed, and the update helper now runs independently of the application so the update completes and restarts into the new version; desktop installs that update by replacing the whole package no longer keep an unverified installation when an update fails, and instead restore and relaunch the previous version.
Added (1)
- Running
EXPLAIN PLANin the Oracle SQL console now shows the execution plan instead of "executed successfully" with no result: the statement runs under a generated statement id, and the plan is read back fromPLAN_TABLEthroughDBMS_XPLAN.DISPLAYand returned as a result set. A missingPLAN_TABLEreports an actionable message,EXPLAIN PLAN ... INTO <custom table>still goes to the database, and requesting the plan of a statement that already is an explain command no longer nests twoEXPLAIN PLANclauses by @openai0229 in PR #2945.
Fixed (2)
- (macOS) On some machines an update stopped after the application closed: the update helper ended together with the application, so the version never changed. The helper now runs independently of the application, the application waits until the helper has accepted the plan before closing, and the update restarts into the new version by @openai0229 in PR #2943.
- Desktop installs that update by replacing the whole package (macOS, Linux AppImage) no longer keep an unverified installation when an update fails: the updater keeps the previous version aside and restores and relaunches it when the trial or the restart does not report a healthy startup. It also refuses to switch while another instance of the same application is running, which used to make the trial exit immediately and was reported as a trial failure, and the update log now records the failing process id, exit status and elapsed time by @openai0229 in PR #2943.
Full Changelog: v5.3.7-beta.3...v5.3.7-beta.4
Chat2DB v5.3.7-beta.3
Chat2DB Community 5.3.7-beta.3 is a Beta prerelease. Packaged desktops can now update themselves: the app checks the release channel, verifies the signed manifest, downloads and installs the full package, and restarts into it, with Beta releases offered only when Receive Beta versions is enabled. This build also adds preview and options for Excel, JSON, and SQL imports, an optional parallel CSV import mode, a table update-time column, and fixes across imports, tasks, storage, copying, and the desktop shell.
Added (4)
- Packaged desktops on macOS, Windows, and Linux can discover, download, verify, and install a newer release from inside the app and restart into it. The update is recorded only after both the trial and the normal startup report healthy, and Receive Beta versions additionally offers Beta releases to users who opt in by @haizhi03 and @openai0229 in PR #2698.
- Excel (
.xlsx,.xls), JSON, and SQL imports now support preview and the basic options the CSV flow already had: sheet, header row, data row range, column range, empty cells as NULL, and date, time, and decimal formats for Excel; encoding and document shape for JSON; statement and encoding handling for SQL. Import failures now name their cause and the offending value by @openai0229 in PR #2921. - CSV imports can opt into a parallel FAST mode after the preview confirms the rows have no ordering dependencies, with batch size and concurrency adapted to measured throughput. Failing or cancelling the import cancels the running statements, waits for its workers, and closes its dedicated connections by @liushikuan63 in PR #2908.
- The table list shows an Update Time column next to Create Time, left blank when the database reports no value, with translated titles in all supported languages by @openai0229 in PR #2915.
Improved (3)
- The task center keeps its rows, order, and paging while polling: records are merged by ID instead of being replaced, and a task whose executor was cancelled unexpectedly is reported as failed instead of staying RUNNING by @HandSonic in PR #2795.
- Local datasource lists apply the alias search and datasource-kind filters before paging, so the total and the page contents match the filter, kind codes are matched case-insensitively, and entries saved without a kind are treated as private by @HandSonic in PR #2820.
- Dashboard and console lists no longer fail on extreme page numbers: out-of-range requests return an empty page with accurate totals instead of an index error, far-out console pages keep their newest-first order without reversing the source list, and Dashboard infinite scrolling now follows the component lifecycle by @HandSonic in PR #2812 and PR #2815.
Fixed (19)
- Copying results on Windows now writes CRLF line endings, so pasting into native applications such as SAP GUI keeps one row per line instead of collapsing rows and showing
#markers, while macOS and Linux keep LF by @openai0229 in PR #2909. - Queries that reach a table through a single-table subquery, for example
SELECT * FROM (SELECT * FROM APP.EVENT_LOG ORDER BY CREATE_TIME DESC) WHERE ROWNUM <= 100, resolve the physical table again and show its primary key in the result by @openai0229 in PR #2916. - JSON imports map missing fields and explicit JSON nulls to SQL NULL instead of the string
null, and array elements that are not objects are no longer imported as all-NULL rows by @HandSonic in PR #2809. - Exporting to a filename another file has taken preserves that file and retries with an available numbered name, and the actual destination path is recorded before the content is written by @HandSonic in PR #2800.
- AI session and message histories are written to a temporary file and replace the target atomically, so an interrupted write no longer destroys the last valid history; a failed deletion restores the previous session record instead of leaving messages without an owner by @HandSonic in PR #2843 and PR #2841.
- Saving or deleting small data records, ER-diagram positions, and namespace member positions now updates the in-memory state only after the write succeeds, so a failed write no longer shows a change that disappears after reloading by @HandSonic and @Aias00 in PR #2830, PR #2840, and PR #2846.
- Concurrent namespace membership changes no longer lose or duplicate datasource positions, and a request that reads the list while it is being changed returns a consistent order by @Aias00 in PR #2480.
- A damaged cache entry is now removed on its own and reloaded through the configured fallback instead of making that key unusable for its whole lifetime by @HandSonic in PR #2828.
- Cached relational table pages no longer throw an index error for very large page numbers, and driver jar scanning reports an unreadable directory as a clear driver error instead of a null-pointer failure by @HandSonic and @Aias00 in PR #2824 and PR #2506.
- Copying a connection preserves BigQuery and service-name fields and deep-copies SSH, driver, and extension configuration instead of sharing it between the copies by @HandSonic in PR #2793.
- A failed SSH transport is reported once: the connection dialog no longer shows a duplicate alert for the same failure, and the error keeps its original cause by @Aias00 in PR #2548.
- Desktop IPC debug logs no longer expose passwords, SSH passphrases, JDBC connection strings, or sensitive
extendInfovalues, while the request and response still reach their destination unchanged by @Aias00 in PR #2473. - MCP token resets are serialized: an older response can no longer overwrite the newest token, repeated resets produce one token, and the dialog shows a busy state until the reset finishes by @HandSonic in PR #2845.
- Redis rejects update commands for keys whose type does not match the operation instead of generating a command the server refuses by @Aias00 in PR #2437.
- DuckDB tables use DuckDB-specific
LIMIT/OFFSETpagination, so browsing no longer falls back to unsupported syntax by @Aias00 in PR #2490. - Redshift and CockroachDB create databases with their own statements instead of PostgreSQL clauses their dialects reject, and CockroachDB database comments keep quoted names and escaped literals by @Aias00 in PR #2486.
- CockroachDB tables without a primary key now generate native limited updates and deletes instead of relying on row identifiers by @Aias00 in PR #2484.
- Informix table alterations and execution plans are generated with the clauses the dialect supports by @Aias00 in PR #2488.
- Editing a result set on Windows no longer flickers the editor cursor while the cell is focused by @openai0229 in PR #2922.
Full Changelog: v5.3.6...v5.3.7-beta.3
Chat2DB v5.3.6
Chat2DB Community 5.3.6 adds import preview and mapping, flexible CSV settings, MySQL transaction inspection, and execution-history filters, while improving table browsing, database compatibility, and desktop reliability.
Added (4)
- CSV and Excel imports now offer data preview and column mapping on Web and Desktop, with field skipping and validation for duplicate mappings and missing required columns by @Aias00 and @openai0229 in PR #2652 and PR #2887.
- CSV imports support encoding, delimiter, text qualifier, and escape settings, header and data row ranges, empty-value handling, and date, time, and decimal formats by @Aias00 in PR #2653.
- MySQL 5.7 and 8.0 users can inspect active InnoDB transactions, duration, SQL, lock waits, and blocking connections, then open a console to inspect a related connection; unavailable metadata and insufficient privileges are explained explicitly by @Aias00 in PR #2636.
- Execution history can now be filtered by datasource, database, and schema, with SQL keyword search by @HandSonic in PR #2696.
Improved (5)
- Copying table structure or data now shows an editable target-name confirmation and preserves the entered name on failure. Copy and truncate operations also handle special table names without double quoting by @openai0229 in PR #2880.
- Large text and JSON/JSONB cells use compact previews with full values loaded on demand, reducing large result-page loading failures. JSON formatting and compression also preserve value-inspector actions and reset the view to the start by @openai0229 in PR #2882.
- Workspace sidebars resize more smoothly while editor bounds stay aligned, and tabs and enabled watermarks use the theme accent when no custom datasource color is set by @openai0229 in PR #2870.
- Database, schema, and result-filter lists support horizontal scrolling for long values, keep short lists aligned, and show scrollbars only when needed by @openai0229 in PR #2878 and PR #2881.
- Built-in JDBC drivers can be downloaded again even when drivers are already installed. Concurrent downloads publish complete files safely, and background downloads no longer prevent application exit by @openai0229 and @HandSonic in PR #2883 and PR #2687.
Fixed (18)
- Invalid WHERE or ORDER BY expressions no longer remove the table's filter editors or its last successful result; correcting or clearing the expression allows browsing to recover by @openai0229 in PR #2899.
- Editing multiple result rows no longer inherits current-statement execution options that caused saves to fail on MySQL connections with multi-statement execution disabled by @openai0229 in PR #2877.
- Repeated datasource saves no longer create duplicate connections, failed moves preserve the displayed tree, and creating a datasource inside a group expands and locates the new connection by @openai0229 in PR #2891 and PR #2901.
- Tree refreshes preserve hidden-node settings during overlapping refresh and hide operations, and a failed refresh after a successful datasource save is no longer reported as a failed save by @HandSonic in PR #2743.
- JSON and SQL files uploaded in Community Web can be submitted for import correctly by @Aias00 in PR #2652.
- SQL Server pagination recognizes only top-level ORDER BY clauses, and index metadata and generated DDL preserve ASC/DESC sort direction by @HandSonic in PR #2694 and PR #2686.
- Kingbase table DDL export works with catalog variants that lack expected information-schema columns and preserves identity, generated-column, enum, and default-value definitions by @openai0229 in PR #2879.
- Switching ClickHouse databases handles spaces, Unicode, and special characters without corrupting the JDBC URL by @HandSonic in PR #2692.
- DB2 procedure, function, and view definitions and related DDL exports no longer fail because JDBC queries contain trailing statement terminators by @HandSonic in PR #2738.
- Changing a Redis key to no expiration now clears its previous TTL by @HandSonic in PR #2689.
- Switching database accounts quickly no longer displays grants returned for a previously selected account by @HandSonic in PR #2691.
- Duplicate desktop launches activate the existing window, and file or protocol requests are retained during concurrent startup and exit handling by @openai0229 in PR #2875.
- AI chat restores table and view suggestions on explicit @ input, supports keyboard and mouse selection, and ignores stale suggestion responses by @openai0229 in PR #2888.
- Long custom-model connection-test errors stay inside a scrollable dialog instead of overflowing the page by @haizhi03 in PR #2873.
- Dashboard refresh controls leave the loading state when a refresh fails by @HandSonic in PR #2688.
- Interrupted task deletions can resume cleanup on application startup without deleting a newer export that reuses the original filename by @HandSonic in PR #2742.
- SSH connection-error logs no longer include passwords, private-key passphrases, or key-file fields by @Aias00 in PR #2471.
- The connection-close API now requires POST /api/connection/close with a JSON request body instead of GET query parameters. API clients that call this endpoint must update their requests by @HandSonic in PR #2679.
Full Changelog: v5.3.5...v5.3.6
Chat2DB v5.3.5
Chat2DB Community 5.3.5 adds AI conversation navigation and new database-specific capabilities, while making large result sets, workspace navigation, local files, and desktop sessions more reliable.
Added (4)
- AI chat sessions can now be renamed from both chat surfaces, and the message navigation rail jumps directly to earlier user prompts by @openai0229 in PR #2849.
- DM now supports real execution plans for both typed
EXPLAINstatements and the Explain action by @haizhi03 in PR #2771. - Import and export execution logs now show live task progress and completion state by @openai0229 in PR #2857.
- MySQL users can view and change index visibility on 8.0+, and column visibility on 8.0.23+, directly from the table editor by @Aias00 in PR #2606 and PR #2607.
Improved (8)
- SQL result page sizes above 1,000 can be configured and preserved across execution and pagination, with reliable large-page loading on Web and Desktop by @openai0229 in PR #2750, PR #2756, PR #2761, and PR #2766.
- Long result values stay compact by default, while manually resizing a row reveals the complete wrapped value without unbounded table rendering by @openai0229 in PR #2752, PR #2754, and PR #2863.
- Datasource tree search preserves its query, expansion, selection, and refresh state until explicitly closed; clicked matches locate the real node and long names scroll horizontally by @openai0229 in PR #2751, PR #2755, PR #2758, and PR #2787.
- Workspace tabs now locate the active header, scroll smoothly with mouse and trackpad input, preserve editor, result, and terminal state across pane splits, and render the first terminal tab correctly by @openai0229 in PR #2753, PR #2759, PR #2760, PR #2775, and PR #2789.
- Datasource identity colors and editor watermarks are easier to distinguish, environment IDs map correctly, and workspace headers align consistently by @openai0229 in PR #2749, PR #2763, PR #2854, PR #2859, and PR #2860.
- Redis key details can now be opened by clicking anywhere on a selectable key row by @openai0229 in PR #2853.
- MySQL autocomplete avoids full-script parsing for ordinary large SQL and large
INlists, while retaining the existing parser for complex routines and ambiguous input by @openai0229 in PR #2865. - The integrated terminal now falls back through available platform shells when the preferred shell cannot start by @liushikuan63 in PR #2737.
Fixed (11)
- Sorting, filtering, refreshing, and paging now update the active result instead of opening extra result sets; result edit actions and
Cmd/Ctrl+Salso commit the active cell correctly by @openai0229 in PR #2868. - Choosing Save while closing an unnamed SQL draft no longer leaves the naming dialog blocked behind the close confirmation by @openai0229 in PR #2736.
- Local SQL and Markdown saves are serialized and use the latest path and encoding metadata; close, rename, delete, shortcut, and exit operations wait for pending writes by @openai0229 in PR #2861.
- Large local-file contents are no longer copied into browser local storage, preventing quota failures while preserving restoration from disk by @openai0229 in PR #2866.
- Community Web JDBC driver upload, download, save, and delete workflows work again with bounded, expiry-managed staged files by @openai0229 in PR #2787.
- Desktop close, restart, and update operations now wait for editor save handling with a native fallback, while task polling runs only when needed. The unreliable manual task-cancel action and API have been removed by @openai0229 in PR #2776.
- Bundled SQL syntax plugins now load reliably in desktop runtimes without classloader incompatibility errors by @openai0229 in PR #2773.
- AI model configuration is now written atomically to avoid corruption or API-key loss during interrupted writes by @Aias00 in PR #2512.
- Result search now matches visible custom-rendered column names as well as cell values by @openai0229 in PR #2851.
- Hive namespaces now appear as database nodes, and metadata loading tolerates JDBC drivers that do not implement
getURL()by @openai0229 in PR #2855. - Dynamic datasource forms now localize common connection fields and authentication options, while preserving unknown custom labels as fallback text by @openai0229 in PR #2864.
New Contributors
- @liushikuan63 made their first contribution in PR #2737.
Full Changelog: v5.3.4...v5.3.5
Chat2DB v5.3.4
Chat2DB Community 5.3.4 expands database coverage and improves result editing, workspace navigation, desktop window behavior, and everyday stability.
Added (5)
Adds configuration-driven JDBC database support, MySQL ENUM and SET result editors, and datasource identity colors with SQL editor watermarks.
- feat: universal JDBC support — add 10 databases through configuration only by @Chat2DB-Pro in #2633
- feat: add 13 databases through configuration only (domestic + DBeaver parity) by @Chat2DB-Pro in #2644
- feat: add 12 more databases through configuration only by @Chat2DB-Pro in #2648
- feat(data-editor): add MySQL ENUM and SET result editors by @openai0229 in #2560
- feat(datasource): add identity colors and editor watermarks by @openai0229 in #2657
Improved (5)
Improves SQL result handling, main navigation, MCP settings and restart behavior, workspace navigation, Windows desktop controls, and import/export task progress.
- feat(result): refine SQL results and editor close safety by @openai0229 in #2627
- fix(client): share updated main navigation icons by @openai0229 in #2629
- fix(desktop): make MCP settings and restart deterministic by @openai0229 in #2651
- refactor(community): refine workspace and desktop navigation by @openai0229 in #2711
- refactor(task): rebuild Community asynchronous task system by @openai0229 in #2712
Fixed (6)
Fixes result inspection and column metadata, datasource tree refresh races, Redis key details, MySQL database deletion, and related desktop interaction issues.
- fix(redis): make key detail loading reliable by @openai0229 in #2661
- fix(client): sync value inspector with record field by @openai0229 in #2666
- fix: preserve result inspector field and mode by @openai0229 in #2667
- fix(frontend): make datasource tree refresh race-safe by @openai0229 in #2706
- fix(database): use server connection for MySQL deletion by @openai0229 in #2707
- fix(result): preserve complete column header details by @openai0229 in #2715
Full Changelog: v5.3.3...v5.3.4
Chat2DB v5.3.3
Chat2DB Community 5.3.3 focuses on the desktop workspace, integrated terminal, and local-file experience while improving database compatibility, data-operation safety, and application stability.
Added (5)
Adds an integrated terminal, local-file previews and workspace splitting, configurable SQL and database-tree shortcuts, MiniMax provider support, and unconditional identifier quoting across database dialects.
- feat(spi): add quoteIdentifierAlways to ISQLIdentifierProcessor by @Aias00 in #2234
- feat(client): add line and block comment shortcuts for SQL editor by @iamraydoan in #2340
- feat(database-tree): add configurable shortcuts by @openai0229 in #2357
- Add MiniMax provider support by @octo-patch in #2374
- feat(workspace): enhance previews, terminal, and tab splitting by @auenger in #2273
Improved (1)
Improves workspace tabs, navigation, and output-panel sizing.
- fix(ui): refine workspace tabs and navigation by @openai0229 in #2353
Fixed (95)
Fixes desktop terminal and navigation behavior; cross-database SQL and DDL safety; DML and pagination validation; storage consistency; result grids; AI stream ownership; BI charts; database compatibility; and macOS packaging and startup.
- fix(mysql): escape SQL identifiers and literals in metadata/DDL paths (#1914) by @HandSonic in #2172
- fix(h2): escape SQL identifiers and literals in metadata/DDL paths (#1914) by @HandSonic in #2177
- fix(db2): escape SQL identifiers and literals in metadata/DDL paths (#1914) by @HandSonic in #2173
- fix(clickhouse): escape SQL identifiers and literals in metadata/DDL paths (#1914) by @HandSonic in #2174
- fix(oracle): escape SQL identifiers and literals in metadata/DDL paths (#1914) by @HandSonic in #2195
- fix(sqlserver): escape SQL identifiers and literals in metadata/DDL paths (#1914) by @HandSonic in #2196
- fix(xugudb): escape SQL identifiers and literals in metadata/DDL paths (#1914) by @HandSonic in #2175
- fix(postgresql): escape SQL identifiers and literals in metadata/DDL paths (#1914) by @HandSonic in #2194
- fix(kingbase): escape SQL identifiers and literals in metadata/DDL paths (#1914) by @HandSonic in #2197
- fix(sqlite): escape SQL identifiers and literals in metadata/DDL paths (#1914) by @HandSonic in #2204
- fix(redshift): escape SQL identifiers and literals in metadata/DDL paths (#1914) by @HandSonic in #2203
- fix(sundb): escape SQL identifiers and literals in metadata/DDL paths (#1914) by @HandSonic in #2176
- fix(dm): escape SQL identifiers and literals in metadata/DDL paths (#1914) by @HandSonic in #2198
- fix(snowflake): escape SQL identifiers and literals in metadata/DDL paths (#1914) by @HandSonic in #2200
- fix(hive): escape SQL identifiers and literals in metadata/DDL paths (#1914) by @HandSonic in #2201
- fix(generic): escape SQL identifiers and literals in metadata/DDL paths (#1914) by @HandSonic in #2199
- fix(oscar): escape SQL identifiers and literals in metadata/DDL paths (#1914) by @HandSonic in #2202
- fix(oceanbase-oracle): escape SQL identifiers and literals in metadata/DDL paths (#1914) by @HandSonic in #2205
- fix(mongodb): escape generated shell command contexts (#1914) by @HandSonic in #2206
- fix(core-domain-api): volatile async state, escape quoted SQL values, fix XLXS typo, align PinTable hashCode by @HandSonic in #2293
- fix(domain-core): escape identifiers/comments in Excel-import DDL; propagate SQL errors; fix pinned duplication and completion fallback by @HandSonic in #2309
- fix(redis): quote key names in DEL/RENAME, apply grid edits atomically, iterate full SCAN cursor by @HandSonic in #2308
- fix(spi): guard empty UPDATE SET clause, quote-aware now() replacement, null-safe DBStructUtils by @HandSonic in #2335
- fix(snowflake): use SPI quoteIdentifierAlways for DROP, schema, and RENAME by @Aias00 in #2262
- fix(h2): log SET SCHEMA failure instead of swallowing by @Aias00 in #2155
- fix(on-mount): guard more async fetches against setState after unmount by @Aias00 in #2147
- fix(sqlite): preserve column size when decimalDigits is null by @Aias00 in #2170
- fix(redis-stream): map displayed row index to valueList correctly in handleCellChange by @Aias00 in #2165
- fix(bi): make chart sort comparator return 0 for equal values by @Aias00 in #2158
- fix(bi): adjust ComboAxisSelect splice index when both isFirst and isLast by @Aias00 in #2171
- fix(sql-generate): render count fallback with the parsed dbType, not sqlserver by @Aias00 in #2146
- fix(er-position): persist the new position, not the old record by @Aias00 in #2163
- fix(bi): restore chart fields after desktop query by @openai0229 in #2376
- fix(bi): measure actual X-axis labels instead of 'undefined' in useLabelRotate by @Aias00 in #2157
- fix(bi): guard empty data array in EditorChartSql before destructuring by @Aias00 in #2164
- fix(mysql): preserve DECIMAL precision when scale is null by @Aias00 in #2181
- fix(hive): preserve column precision when scale is null by @Aias00 in #2191
- fix(snowflake): preserve column precision when scale is null by @Aias00 in #2190
- fix(oracle): match index_owner in index metadata joins to avoid cross-schema index collisions by @HandSonic in #2286
- fix(dml): add @Valid to DbDmlController @RequestBody parameters by @Aias00 in #2381
- fix(datasource): parse driverConfig not ssh in rs2Request by @Aias00 in #2392
- fix(console): support Pro chart SQL first save by @openai0229 in #2415
- fix(connection): log swallowed custom-connection-resolution exceptions by @Aias00 in #2396
- fix(oscar): uppercase identifier in isReservedKeyword before lookup by @Aias00 in #2388
- fix(postgresql): render PostGIS geometry and geography as WKT by @openai0229 in #2419
- fix(xugudb): add CHECK to XugudbSqlGuards COLUMN_CLAUSE_KEYWORDS by @Aias00 in #2387
- fix(xugudb): preserve NUMERIC precision and scale in buildDataType by @Aias00 in #2394
- fix(spi): make ConnectionPool cleanup thread a named daemon by @Aias00 in #2386
- fix(view): /api/rdb/view/delete drops the view instead of the table by @Aias00 in #2380
- fix(converter): delete temp files after DbConverter uploads by @Aias00 in #2398
- fix(rdb): null-guard view/function/procedure list endpoints by @Aias00 in #2404
- fix(chat): write correct shape in setCurrentChat by @Aias00 in #2402
- fix(workspace): cap persisted tabs to reduce localStorage quota risk by @Aias00 in #2400
- fix(result-grid): stop infinite recursion when editing large-value cells by @Aias00 in #2382
- fix(result-grid): re-apply create/delete highlights after arrangement reset by @Aias00 in #2406
- fix(org-settings): move hooks above early return to satisfy Rules-of-Hooks by @Aias00 in #2421
- fix(tree): guard updateTreeData against null list by @Aias00 in #2423
- fix(tree): make findNode/getParentNode null-tolerant by @Aias00 in #2425
- fix(sql): escape single quotes in COMMENT text by @Aias00 in #2431
- fix(sql): clamp pageNo/pageSize to prevent paging offset int overflow by @Aias00 in #2433
- fix(mongodb): avoid Collectors.toMap NPE on null document values by @Aias00 in #2427
- fix(oceanbase-oracle): COMMENT DDL use quoteStringLiteral to stop backslash doubling by @Aias00 in #2429
- fix(ai-config): synchronize resolveTestApiKey r...
Chat2DB v5.3.2
What's Changed
- ci(dependabot): group related dependency updates by @openai0229 in #2208
- feat(ui): align Community actions with Lucide icons by @openai0229 in #2249
- fix(i18n): localize editor custom font tooltip by @openai0229 in #2253
- fix(mysql): resolve comma-separated relations in dot-scoped completion by @mvanhorn in #2088
- fix(sql-editor): remove slash-triggered AI entry by @openai0229 in #2258
- feat(workspace): improve session panel resizing by @openai0229 in #2264
- fix(sql-editor): sync action state on content changes by @openai0229 in #2263
- feat(settings): improve navigation and configuration search by @openai0229 in #2267
- feat(sql-editor): add output history retention option by @openai0229 in #2270
- fix(ui): align chart icon and page-size chevron by @openai0229 in #2284
- feat(sql-editor): use table icon for result tabs by @openai0229 in #2285
- feat(workspace): open history in editable console by @openai0229 in #2299
- feat(workspace): name SQL on initial save by @openai0229 in #2305
- fix(oscar): stop leaking internal ROWNUM column on first page of paginated queries by @HandSonic in #2304
- feat(table-editor): default new table columns to nullable by @liulipengju in #2312
- fix(opengauss): mark system databases/schemas instead of removing them by @HandSonic in #2303
- fix(mariadb): quote/escape unmapped JDBC values and keep now()/default bare in SQL conversion by @HandSonic in #2302
- fix(informix): make INFORMIXSERVER URL rewrite idempotent to avoid ever-growing JDBC URL on reconnect by @HandSonic in #2289
- fix(xugudb): use OracleSqlParser instead of MysqlSqlParser for Oracle-dialect plugin by @HandSonic in #2287
- fix(datasource): persist BigQuery project, email, and keyfile fields by @Hamza-ali1223 in #2179
- feat(sql-editor): improve result history controls by @openai0229 in #2344
- [codex] fix(history): preserve full SQL behind previews by @HanawaBanana in #2311
- fix(export): restore desktop connection export and feedback by @AlcoholTobaccoCode in #2254
- [codex] fix(result-grid): preserve change tracking after no-op undo by @HanawaBanana in #2298
- fix(clickhouse): preserve Decimal precision when scale is null (#2192) by @liulipengju in #2314
- 260728 fix selectboundinfo key index by @liulipengju in #2313
New Contributors
- @mvanhorn made their first contribution in #2088
- @HanawaBanana made their first contribution in #2311
- @AlcoholTobaccoCode made their first contribution in #2254
Full Changelog: v5.3.1...v5.3.2
Chat2DB v5.3.1
What's Changed
- fix(gaussdb): preserve comments in table DDL by @openai0229 in #1878
- fix(opengauss): preserve comments in table DDL by @openai0229 in #1875
- fix(release): isolate gray CDN artifacts by @openai0229 in #1882
- fix(jcef): use Community native window title by @openai0229 in #1885
- fix(sql): preserve execution context correctness by @openai0229 in #1870
- fix(ai): tolerate trailing /v1 in custom model base URL to avoid /v1/v1 requests by @solitude-mix in #1889
- docs(readme): restructure README for easier onboarding by @Chat2DB-Pro in #1898
- fix(ci): repair issue claim concurrency by @openai0229 in #1902
- fix(jcef): limit Community native title to Windows by @openai0229 in #1904
- fix(mongodb): support native result filtering and sorting by @openai0229 in #1903
- fix(spi): replace hardcoded Chinese "成功" in JdbcUtils.testConnect wit… by @liulipengju in #1900
- feat(automation): add AI issue and PR agents by @openai0229 in #1913
- fix(sqlserver): use ROW_NUMBER pagination for SQL Server < 2012 (#1693) by @HandSonic in #1919
- fix(redis): fix string-key update NPE and value-edit semantics across key types by @Chat2DB-Pro in #1922
- fix(spi): fix NPE in SqlUtils.buildCanEditResult when FROM clause is … by @liulipengju in #1899
- docs(readme): add star call-to-action after Security Notes by @Chat2DB-Pro in #1934
- fix(automation): harden AI issue assistant output by @openai0229 in #1921
- fix(ai): contain long markdown code blocks by @openai0229 in #1907
- feat(frontend): add SQL output ordering and explicit follow mode by @openai0229 in #1936
- feat(community): operationalize contribution workflow by @openai0229 in #1939
- fix(workspace): keep Data Browser active for database queries by @openai0229 in #1943
- fix(community): isolate project sync events by @openai0229 in #1947
- fix(release): keep gray builds in Actions by @openai0229 in #1940
- fix(workspace): preserve manual Files selection by @openai0229 in #1959
- revert(ai): remove long markdown code fix by @openai0229 in #1963
- fix(ci): stop reporting agentic no-op issues by @openai0229 in #1965
- fix(workspace): refresh saved query tree after save by @openai0229 in #1956
- fix: respect manual workspace panel selection by @Aias00 in #1969
- feat(result-set): use full-height inspector rail by @openai0229 in #1977
- fix(workspace): keep left panel selection manual by @openai0229 in #1975
- fix(ui): wire up ER diagram help button to open docs (#1695) by @HandSonic in #1892
- fix: preserve null values in copied where clauses by @Aias00 in #1967
- Fix count SQL semicolon trimming by @Aias00 in #1966
- fix: handle missing column metadata in DDL generation by @Aias00 in #1968
- feat(ci): add QQ group status notifications by @openai0229 in #1957
- fix(ci): allow QQ relay requests through Cloudflare by @openai0229 in #1989
- feat(frontend): copy query results as Markdown by @auenger in #1906
- fix(ai): separate streaming and synchronous retry policies by @HandSonic in #1894
- fix(cache): degrade safely when optional cache initialization fails by @HandSonic in #1890
- feat(ci): notify QQ of Release, Deployment, and Discussion changes by @openai0229 in #2004
- docs(ci): clarify inactive deployment notification limit by @openai0229 in #2006
- docs: link open-source Chat2DB CLI by @openai0229 in #2007
- feat(ci): notify QQ about comments and pull request reviews by @openai0229 in #2010
- fix(ui): XSS, state mutation, and miscellaneous frontend fixes by @HandSonic in #1927
- fix(snowflake): null-safe metadata compare in column-type build by @Aias00 in #2001
- fix(sundb): null-safe metadata compare in column-type build by @Aias00 in #2002
- fix(cache): init guard, corrupted entry eviction, and lock improvement by @HandSonic in #1925
- fix(sundb): use equals for NUMBER type name in DDL generation by @Aias00 in #2000
- fix(chat): contain oversized conversation content by @openai0229 in #2048
- fix(dashboard-store): use shallow equality like sibling stores by @Aias00 in #2038
- fix(copilot): scope global store subscription to editorSettings by @Aias00 in #2039
- fix(ai-setting): scope org store subscription to curOrg by @Aias00 in #2040
- fix(approval): scope user store subscription to curUser by @Aias00 in #2041
- fix(excel-import): guard excelReader.close() against null in finally by @Aias00 in #2042
- fix(chat-history): only delete message file for owned sessions by @Aias00 in #2043
- fix(hive): guard split length before indexing column default key by @Aias00 in #2044
- fix(sqlserver): drop dead Arrays.asList() branch and dedupe FLOAT by @Aias00 in #2045
- fix(excel-import): escape table/column names and comments in CREATE TABLE by @Aias00 in #2046
- fix(chat-store): pass shallow equality to useChatStore by @Aias00 in #2018
- fix(ui): make useAutoScroll smooth flag effective by @Aias00 in #2019
- fix(chat): avoid appending literal "undefined" on SSE messages by @Aias00 in #2020
- fix(excel-import): escape cell values in INSERT statements by @Aias00 in #2021
- fix(useSelectDatabase): add catch to getSchemaList by @Aias00 in #2024
- fix(result-set): bound and clean up filter/sort render polls by @Aias00 in #2025
- fix(table-editor): memoize Context.Provider value by @Aias00 in #2068
- fix(ai-button): scope AI store subscription to showPanel by @Aias00 in #2066
- fix(xterm): dispose Terminal on unmount by @Aias00 in #2067
- fix(xugudb): guard column/index enum lookups against null in CREATE/ALTER by @Aias00 in #2063
- fix(postgresql): quote view name with double quote and separate schema/view in comment by @Aias00 in #2062
- fix(sqlite): guard alter-table tail strip against empty script by @Aias00 in #2065
- fix(h2): close ResultSets in getDDL via try-with-resources by @Aias00 in #2064
- fix(notification-nav): guard on-mount async queries against unmount by @Aias00 in #2074
- fix(canvas-table): unmount cell-editor React root on end by @Aias00 in #2076
- fix(mysql): log column-size parse failures instead of swallowing by @Aias00 in #2075
- fix(auth): clear verification-code countdown timer on unmount by @Aias00 in #2073
- fix(oracle): SQL injection, view comment DOT, and pagination column leak by @HandSonic in #2052
- fix(sqlserver): view quoting, TIMESTAMP dead code, GO separator, and rename quoting by @HandSonic in #2053
- fix(sqlserver): preserve IDENTITY columns when copying table (#1691) by @HandSonic in #1918
- fix(spi): harden SQL execution and connection lifecycle by @HandSonic in #1924
- fix(plugin-menu-list): guard plugin-list fetch against unmount by @Aias00 in #2087
- fix(chat-question-template): guard example-prompt fetch against unmount by @Aias00 in #2086
- docs(readme): add Powere...
Chat2DB v5.3.0
Chat2DB Community 5.3.0 is a major new baseline for the Community edition and a fresh start for regular releases and ongoing maintenance.
Highlights
- Unified versioning: Community moves from the separate
0.3.xline to5.3.0, aligned with the current Chat2DB product family. - Shared database client core: Community, Pro, and Enterprise now share the same database client foundation, with the public Community repository serving as the upstream for that shared core.
- Local-first experience: No registration or sign-in is required. Data sources, query history, tasks, dashboards, and AI configuration are stored locally on your device.
- Complete database workflow: Connect to data sources, browse metadata, edit and execute SQL, manage database objects and data, import and export data, save SQL and history, and build dashboards and charts.
- Extensible tooling: Use the Chat2DB CLI, MCP integration, and your own configured AI models.
Before You Install
Warning
Chat2DB Community 5.3.0 does not support in-place upgrades from historical Community releases such as v0.3.7. Back up and migrate your existing data before installing this version.
License
Chat2DB Community 5.3.0 and later use the custom source-available license in the repository root. Releases published before 5.3.0 remain under the Apache License 2.0 terms that applied when they were released. Please read the complete LICENSE before using, modifying, distributing, embedding, or offering products or services based on Community.
Downloads
Installers for macOS, Windows, and Linux are attached below.
Docker images are available as chat2db/chat2db:5.3.0 and chat2db/chat2db:latest, with support for linux/amd64 and linux/arm64.
Learn More
A detailed release announcement covering the new Community direction, product boundaries, upgrade guidance, and ways to get involved will be published in GitHub Discussions.
Thank you to everyone who has continued to use, support, and contribute to Chat2DB Community.