 
Small. Fast. Reliable.
Choose any three.
 
SQLite Release 3.50.3 On 2025-07-17
Prior changes from version 3.50.0 (2025-05-29):
- 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.
- 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.
- New SQL functions:
    
    -  unistr()
    
-  unistr_quote()
    
 
- 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().
- CLI enhancements:
    
    -  Avoids direct output of most control characters.
    
-  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.
    
-  Better formatting of complex partial indexes in the output
         from the ".schema --indent" command.
    
 
- Enhancements to sqlite3_rsync:
    
    -  The requirement that the database be in WAL mode has been removed.
    
-  The sync protocol is enhanced to use less network bandwidth when both
         sides start out being very similar to one another.
    
-  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
    
 
- Changes to JSON functions:
    
    -  Bug fix: Enforce the JSON5 restriction that the
         "\0" escape must not be followed by a digit.
    
-  Bug fix: When the LABEL argument to json_group_object(LABEL,VALUE)
         is NULL, that element of the resulting object is omitted.
    
-  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.
    
 
- Improved support for building on Cygwin and MinGW and similar, as well
    as Termux.
- Typo fixes in the documentation and in the source code comments.
- Miscellaneous performance improvements.
-  JavaScript/WASM:
     
     -  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):
-  Fix a long-standing bug in jsonb_set() and similar that was exposed by
     new optimizations added in version 3.50.0.
-  Fix an apparently harmless ASAN warning that can occur on builds that
     use -DSQLITE_DEFAULT_MEMSTATUS=0.
-  Fix an off-by-one bug in sqlite3_rsync that can result in the last
     page not being transferred for the replicate database.
-  Query planner optimization: Allow the right-hand side of a LEFT JOIN
     to be flattened even if it is a virtual table.
-  Fix sqlite3_setlk_timeout() to use a blocking lock when opening a
     snapshot transaction and when blocked by another process running recovery.
-  Other minor fixes that were reported after the 3.50.0 release.
Prior changes from version 3.50.2 (2025-06-28):
-  Fix the concat_ws() SQL function so that it includes empty strings
     in the concatenation.
     Forum post 52503ac21d.
-  Fix the file-io extension (used by the CLI) so that it can be built
     using the MinGW compiler chain.
-  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.
-  Fix the Bitvec object to avoid stack overflow when the database is within
     60 pages of its maximum size.
-  Fix a problem with UPDATEs on fts5 tables that contain BLOB values.
-  Fix an issue with transitive IS constraints on a RIGHT JOIN.
-  Raise an error early if the number of aggregate terms in a query
     exceeds the maximum number of columns, to avoid downstream assertion
     faults.
-  Ensure that sqlite3_setlk_timeout() holds the database mutex.
-  Fix typos in API documentation.
Changes in this specific patch release, version 3.50.3 (2025-07-17):
-  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.
-  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.
-  Fix an incorrect answer due to over-optimization of an AND operator.
     Forum post f4878de3e.
-  Fix minor makefile issues and documentation typos.
Hashes:
 
- SQLITE_SOURCE_ID: 2025-07-17 13:25:10 3ce993b8657d6d9deda380a93cdd6404a8c8ba1b185b2bc423703e41ae5f2543
- SHA3-256 for sqlite3.c: 934fafe96caa7f4c16e82e0c2b674441a715c038acc9780bf15e09411daba70c
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.