# SQLite 3.53.0 — version-3.53.0: Version 3.53.0 - Product: SQLite (https://whatsnew.fyi/product/sqlite) - Vendor: SQLite - Date: 2026-04-09 - Version: 3.53.0 - Original notes: https://github.com/sqlite/sqlite/releases/tag/version-3.53.0 - Permalink: https://whatsnew.fyi/product/sqlite/releases/3.53.0 What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. --- - **fixed** — Fix the WAL-reset database corruption bug - **added** — Add the Query Result Formatter (QRF) library for formatting the results of SQL queries for human readability on a fixed-pitch font screen - **added** — Add the format method to the TCL Interface so that QRF is accessible from TCL - **changed** — Use QRF for result formatting in the CLI, resulting in improved display capabilities - **changed** — Enhance ALTER TABLE to permit adding and removing NOT NULL and CHECK constraints - **added** — Add the REINDEX EXPRESSIONS statement to rebuild expression indexes - **changed** — Allow the body of TEMP triggers to modify and query tables in the main schema - **changed** — Enhance VACUUM INTO so that a reserve=N query parameter on the target URI sets the reserve amount for the generated database copy - **added** — Add the json_array_insert() SQL function - **added** — Add the jsonb_array_insert() SQL function - **changed** — Make major enhancements to the .mode command - **changed** — Improve result formatting in the CLI with numeric values now right-justified by default in tabular output modes - **changed** — Change the default output mode for interactive CLI sessions to use QRF with Unicode box-drawing characters for improved legibility - **changed** — Silently ignore bare unquoted semicolons at the end of dot-commands - **fixed** — Fix the .testcase and .check commands so that they actually work - **changed** — Allow command-line arguments matching *.sql or *.txt that are names of non-empty files to be read and interpreted as scripts - **changed** — Allow the argument to the .timer command to be once to run the timer on only the next SQL statement - **added** — Add the --timeout S option to the .progress dot-command to interrupt SQL statements after S seconds - **changed** — Change the .indexes command PATTERN argument to match the name of the index instead of the table being indexed and add several new options - **added** — Add the sqlite3_str_truncate() C-language interface - **added** — Add the sqlite3_str_free() C-language interface - **added** — Add the sqlite3_carray_bind_v2() C-language interface - **added** — Add the SQLITE_PREPARE_FROM_DDL option to sqlite3_prepare_v3() to permit virtual table implementations to safely prepare SQL statements derived from the database schema - **added** — Add the SQLITE_UTF8_ZT constant for use with sqlite3_result_text64() or sqlite3_bind_text64() to indicate UTF-8 encoded and zero-terminated values - **added** — Add the SQLITE_LIMIT_PARSER_DEPTH option to sqlite3_limit() - **added** — Add the SQLITE_DBCONFIG_FP_DIGITS option to sqlite3_db_config() - **changed** — Always use a sort-and-merge algorithm for EXCEPT, INTERSECT, and UNION queries - **changed** — Improve join order selection in large multi-way joins on a star schema - **changed** — Enhance the EXISTS-to-JOIN optimization to allow inserted JOIN terms outside inner-most loops when dependencies are satisfied - **changed** — Enhance the omit-noop-join optimization to omit a chain of joins that do not affect the output - **changed** — Allow queries using GROUP BY e1 ORDER BY e2 with identical expressions except for ASC/DESC sort-orders to be optimized using a single index - **changed** — Allow virtual tables to optimize DISTINCT when the result-set does not exactly match the ORDER BY clause - **added** — Add sqlite3changegroup_change_begin(), sqlite3changegroup_change_blob(), sqlite3changegroup_change_double(), sqlite3changegroup_change_int64(), sqlite3changegroup_change_null(), sqlite3changegroup_change_text(), sqlite3changegroup_change_finish(), and sqlite3changegroup_config() interfaces to the session extension - **changed** — Reimplements floating-point to text conversions to improve performance - **changed** — Change default floating-point rounding to 17 significant digits instead of 15 - **added** — Add the self-healing index feature to deal with the stale expression index problem - **added** — Add the -p|--port option to sqlite3_rsync - **removed** — Discontinue support for Windows RT - **added** — Add the opfs-wl VFS for JavaScript/WASM, functionally identical to the opfs VFS but using Web Locks for fairer lock sharing - Fix the WAL-reset database corruption bug. - Add the Query Result Formatter (QRF) library for formatting the results of SQL queries for human readability on a fixed-pitch font screen. - Add the format method to the TCL Interface so that QRF is accessible from TCL. - QRF is used for result formatting in the CLI, resulting in improved display capabilities. - New SQL language features: - Enhance ALTER TABLE to permit adding and removing NOT NULL and CHECK constraints. - The REINDEX EXPRESSIONS statement rebuilds expression indexes. (Useful to repair stale expression indexes.) - The body of TEMP triggers may now modify and/or query tables in the main schema. - Enhance VACUUM INTO so that if a URI filename is used as the target and that filename has a reserve=N query parameter with N between 0 and 255, then the reserve amount for the generated database copy is set to N. - New SQL functions: - json_array_insert() - jsonb_array_insert() - Renovations to the CLI: - Major enhancements to the .mode command. - Improved result formatting, due to the addition of the QRF extension. For example, numeric values are now right-justified by default in tabular output modes. - The default output mode for interactive CLI sessions now uses QRF to display query results in boxes formed using Unicode box-drawing characters, for improved legibility. Batch CLI sessions use the legacy output format for compatibility. - Bare (unquoted) semicolons at the end of dot-commands are silently ignored.  ← Potential incompatibility! - Fix the .testcase and .check commands so that they actually work, and use those commands in scripts that are part of the standard SQLite test suite included with the source tree. - Command-line arguments that match *.sql or *.txt and are the names of non-empty files are read and interpreted as scripts of SQL statements and/or dot-commands. - The argument to the ".timer" command can now be "once", to run the timer on only the next SQL statement. - The new "--timeout S" option to the ".progress" dot-command causes SQL statements to interrupt after S seconds. - The ".indexes" command was changed so that the PATTERN argument matches the name of the index, not the name of the table being indexed (thus making the PATTERN argument actually useful). And, several new options were added to ".indexes". - New C-language interfaces: - sqlite3_str_truncate() - sqlite3_str_free() - sqlite3_carray_bind_v2() - Add the SQLITE_PREPARE_FROM_DDL option to sqlite3_prepare_v3() which permits virtual table implementations to safely prepare SQL statements that are derived from the database schema. - Added the SQLITE_UTF8_ZT constant which can be used as the encoding parameter to sqlite3_result_text64() or sqlite3_bind_text64() to indicate that the value is UTF-8 encoded and zero terminated. - The SQLITE_LIMIT_PARSER_DEPTH option is added to sqlite3_limit(). - The SQLITE_DBCONFIG_FP_DIGITS option is added to sqlite3_db_config(). See also item 9b below. - Query planner improvements: - Always use a sort-and-merge algorithm for EXCEPT, INTERSECT, and UNION, since this is almost always faster than using a hash table. - Improvements to join order selection in large multi-way joins on a star schema. - Enhance the EXISTS-to-JOIN optimization so that the inserted JOIN terms are not required to be on the inner-most loops, as long as all dependencies for the EXISTS-to-JOIN loops are in outer loops. - Enhance the omit-noop-join optimization so that it is able to omit a chain of joins that do not affect the output. - Allow queries that use "GROUP BY e1 ORDER BY e2" where e1 and e2 are identical apart from ASC/DESC sort-orders to be optimized using a single index. - Allow virtual tables to optimize DISTINCT in cases where the result-set of a query does not exactly match the ORDER BY clause. - Add new interfaces to the session extension that enable an application to add changes one at a time to the sqlite3_changegroup object: - sqlite3changegroup_change_begin() _[Truncated at 4000 characters — full notes: https://github.com/sqlite/sqlite/releases/tag/version-3.53.0]_