Small. Fast. Reliable.
Choose any three.

## SQLite Release 3.50.1 On 2025-06-06

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 funtion 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.

Changes in this specific patch release, 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 block by another process running recovery.
6. Other minor fixes that were reported after the 3.50.0 release.

   Hashes:

7. SQLITE_SOURCE_ID: 2025-06-06 14:52:32 b77dc5e0f596d2140d9ac682b2893ff65d3a4140aa86067a3efebe29dc914c95
8. SHA3-256 for sqlite3.c: c3bdffa01dab94be370bdcaeb819cda4a6e0c61f0c6e19a6f94ccba76fc9eeca

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.