sql.js v1.13 Release Notes
This release of sql.js brings significant updates and improvements, primarily focused on modernizing the underlying toolchain and enhancing functionality.
The online playground was rewritten:
Key highlights include:
🚀 Dependency Updates and Modernization
-
SQLite Core Upgrade: sql.js is now built with SQLite version 3.49. This incorporates all the enhancements and bug fixes from SQLite versions 3.45.0 through 3.49.1. See SQLite release notes. Notable SQLite improvements in this range include:
- Query Planner Enhancements: Expect improved query performance due to optimizations in query planning, especially for complex queries, star joins, and queries involving
IN
operators. These improvements are detailed in the SQLite release notes for versions 3.47.0, 3.49.0, and 3.46.0. - New SQL Features: Take advantage of new SQL functions and features introduced in SQLite 3.47+, such as:
- Enhanced
iif()
function with support for multiple arguments (SQLite 3.49.0). - Right-hand side negative indexing for JSON
->>
operator (SQLite 3.47.0). json_pretty()
function for formatted JSON output (SQLite 3.46.0).- Support for underscore characters in numeric literals (SQLite 3.46.0).
- Improved date and time function modifiers like
ceiling
andfloor
(SQLite 3.46.0).
- Enhanced
- Bug Fixes and Stability: Benefit from numerous bug fixes and stability improvements across various SQLite components, ensuring a more robust database experience. Refer to the SQLite Changelog for detailed fixes in versions 3.45.1, 3.45.2, 3.45.3, 3.46.1, 3.47.1, 3.47.2, 3.49.1, and 3.44.2.
- Query Planner Enhancements: Expect improved query performance due to optimizations in query planning, especially for complex queries, star joins, and queries involving
-
Emscripten 4.x Upgrade: sql.js is now compiled with Emscripten 4. See changes in emscripten. This major update to the Emscripten toolchain brings several under-the-hood improvements:
- Modern JavaScript Output: Emscripten 4 generates more modern JavaScript code. While compatibility with older browsers is still maintained through transpilation where necessary, this move to modern JS internally can lead to performance improvements in modern environments.
- LLVM 19.1.6: The underlying compiler toolchain is updated to LLVM 19.1.6, which includes improvements to code generation, optimizations, and potentially better support for newer WebAssembly features.
- Minimum Node.js Version Increase (for Emscripten Toolchain): While sql.js itself aims for broad compatibility, the Emscripten toolchain now requires Node.js v18.3 as a minimum (and is tested with Node.js 22 in this release). This is primarily relevant for developers building sql.js from source.
-
Node.js Worker Thread Compatibility: The worker scripts are now fully compatible with Node.js worker threads, allowing for seamless integration in Node.js environments leveraging worker threads. This is a significant step towards better performance and concurrency in Node.js.
-
Removal of Puppeteer Dev Dependency: The project no longer depends on Puppeteer for worker tests. Worker tests now utilize Node.js worker threads directly, simplifying the testing setup and removing an external dependency. This also speeds up the devcontainer installation.
✨ New Features
updateHook
API (#604): This release introduces a new low-level API,Database.updateHook
, providing a mechanism to register a callback function that is invoked whenever a row is updated, inserted, or deleted in the database. view docs- This feature wraps the native
sqlite3_update_hook
functionality, allowing developers to monitor database modifications at a granular level. - Callbacks receive information about the operation type (update, insert, delete), the database name, table name, and rowid.
- This feature wraps the native
🛠️ Internal and Development Changes
- Worker Debug Script: Added a new debug script specifically for worker environments to aid in development and troubleshooting of worker-related issues.