Small. Fast. Reliable.
Choose any three.

## SQLite Release 3.50.4 On 2025-07-30

Prior changes from version 3.50.0 (2025-05-29):

1. Add the sqlite3_setlk_timeout() interface which sets a separate timeout, distinct from the sqlite3_busy_timeout(), for blocking locks on builds that support blocking locks.
2. The SQLITE_DBCONFIG_ENABLE_COMMENTS constraint (added in the previous release) is relaxed slightly so that comments are always allowed when reading the schema out of a pre-existing sqlite_schema table. Comments are only blocked in new SQL.
3. New SQL functions:
   1. unistr()
   2. unistr_quote()
4. For the %Q and %q conversions in the built-in printf() (which covers the sqlite3_mprintf() API and the format() SQL function and similar) the alternate-form-1 flag ("#") causes control characters to be converted into backslash-escapes suitable for unistr().
5. CLI enhancements:
   1. Avoids direct output of most control characters.
   2. The output of the .dump command makes use of the new unistr() SQL function to encode special characters, unless the --escape mode is set to off.
   3. Better formatting of complex partial indexes in the output from the ".schema --indent" command.
6. Enhancements to sqlite3_rsync:
   1. The requirement that the database be in WAL mode has been removed.
   2. The sync protocol is enhanced to use less network bandwidth when both sides start out being very similar to one another.
   3. The sqlite3_rsync program now works on Macs without having to specify the full pathname of the sqlite3_rsync executable on the remote side as long as you install the sqlite3_rsync executable in one of these directories: $HOME/bin:/usr/local/bin:/opt/homebrew/bin
7. Changes to JSON functions:
   1. Bug fix: Enforce the JSON5 restriction that the "\0" escape must not be followed by a digit.
   2. Bug fix: When the LABEL argument to json_group_object(LABEL,VALUE) is NULL, that element of the resulting object is omitted.
   3. Optimization: If the jsonb_set() or jsonb_replace() functions make a change in the interior of a large JSONB object, they strive to keep the size of the JSONB object unchanged and to modify as few bytes as possible on the interior of the object. This helps reduce I/O as it allows SQLite to write only the page that contains the changed bytes and not all the surrounding pages.
8. Improved support for building on Cygwin and MinGW and similar, as well as Termux.
9. Typo fixes in the documentation and in the source code comments.
10. Miscellaneous performance improvements.
11. JavaScript/WASM:
    1. Fix a long-standing filename digest calculation bug in the OPFS SAHPool VFS. Databases created in that VFS by 3.50.0+ cannot be read by older versions of the VFS, but 3.50.0 can backwards-compatibly work with existing databases created by older versions.

Prior changes from version 3.50.1 (2025-06-06):

1. Fix a long-standing bug in jsonb_set() and similar that was exposed by new optimizations added in version 3.50.0.
2. Fix an apparently harmless ASAN warning that can occur on builds that use -DSQLITE_DEFAULT_MEMSTATUS=0.
3. Fix an off-by-one bug in sqlite3_rsync that can result in the last page not being transferred for the replicate database.
4. Query planner optimization: Allow the right-hand side of a LEFT JOIN to be flattened even if it is a virtual table.
5. Fix sqlite3_setlk_timeout() to use a blocking lock when opening a snapshot transaction and when blocked by another process running recovery.
6. Other minor fixes that were reported after the 3.50.0 release.

Prior changes from version 3.50.2 (2025-06-28):

1. Fix the concat_ws() SQL function so that it includes empty strings in the concatenation. Forum post 52503ac21d.
2. Fix the file-io extension (used by the CLI) so that it can be built using the MinGW compiler chain.
3. Avoid writing frames with no checksums into the wal file if a savepoint is rolled back after dirty pages have already been spilled into the wal file. Forum post b490f726db.
4. Fix the Bitvec object to avoid stack overflow when the database is within 60 pages of its maximum size.
5. Fix a problem with UPDATEs on fts5 tables that contain BLOB values.
6. Fix an issue with transitive IS constraints on a RIGHT JOIN.
7. Raise an error early if the number of aggregate terms in a query exceeds the maximum number of columns, to avoid downstream assertion faults.
8. Ensure that sqlite3_setlk_timeout() holds the database mutex.
9. Fix typos in API documentation.

Prior changes from version 3.50.3 (2025-07-17):

1. Fix a possible memory error that can occur if a query is made against against FTS5 index that has been deliberately corrupted in a very specific way.
2. Fix the parser so that it ignored SQL comments in all places of a CREATE TRIGGER statement. This resolves a problem that was introduced by the introduction of the SQLITE_DBCONFIG_ENABLE_COMMENTS feature in version 3.49.0.
3. Fix an incorrect answer due to over-optimization of an AND operator. Forum post f4878de3e.
4. Fix minor makefile issues and documentation typos.

Changes in this specific patch release, version 3.50.4 (2025-07-30):

1. Fix two long-standings cases of the use of uninitialized variables in obscure circumstances.

   Hashes:

2. SQLITE_SOURCE_ID: 2025-07-30 19:33:53 4d8adfb30e03f9cf27f800a2c1ba3c48fb4ca1b08b0f5ed59a4d5ecbf45e20a3
3. SHA3-256 for sqlite3.c: 9145255e83da6529e70121ee4d7a4c88fe83ca4511da0c9ed13d10842df36782

A complete list of SQLite releases in a single page and a chronology are both also available. A detailed history of every check-in is available at SQLite version control site.