# What changed in @op-engineering/op-sqlite

> 47 changes in @op-engineering/op-sqlite 15 to 18 from its official release notes, upgrade guides and advisories: 2 breaking, 1 security, 13 new APIs and options. Each one cited. Sources checked 2026-10-21. HTML: https://unstale.sh/npm/@op-engineering/op-sqlite/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## @op-engineering/op-sqlite 18

### Breaking changes

- crsqlite has been removed. (18.0.0) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/18.0.0)

### Security

- Fixes a use-after-free in the commit hook callback. (18.2.4) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/18.2.4)

### New APIs and options

- Adds support for using op-sqlite on watchOS. (18.2.1) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/18.2.1)
- Prepared statements now provide executeSync. (18.2.0) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/18.2.0)
- Storage database names can now be customized. (18.0.0) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/18.0.0)

### Performance

- Skips redundant sqlite3_clear_bindings and long long disambiguation on the hot insert path. (18.1.4) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/18.1.4)

### Tooling

- Initial SPM support was added, allowing developers to use SPM with the package. (18.1.0) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/18.1.0)

### Fixes and other changes

- Finalized handles are now preserved. (18.2.3) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/18.2.3)
- Transaction commits are now awaited, so callers can rely on commit completion before continuing. (18.2.3) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/18.2.3)
- Skips the explicit Kotlin plugin when AGP provides built-in Kotlin. (18.2.0) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/18.2.0)
- Unsubscribing a reactive query no longer touches a closed connection. (18.1.2) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/18.1.2)
- Fixes the missing Package.swift in the NPM release, so the package includes this file. (18.1.1) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/18.1.1)
- Compatibility fixes for 0.87 were added. (18.1.0) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/18.1.0)

## @op-engineering/op-sqlite 17

### New APIs and options

- Adds the failOnCreate option. (17.2.0) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/17.2.0)
- Read-only databases are now supported. (17.1.0) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/17.1.0)

### Performance

- Various performance improvements were made; the notes do not specify which operations are affected. (17.1.1) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/17.1.1)

### Behavior and default changes

- Raw execution now returns column names. (17.0.0) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/17.0.0)

### Fixes and other changes

- Excludes the libsql_experimental and turso_sdk_kit xcframeworks to fix the sqlcipher iOS build. (17.1.5) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/17.1.5)
- Fixes web support for Expo web. (17.1.4) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/17.1.4)

## @op-engineering/op-sqlite 16

### Breaking changes

- delete no longer takes any parameters, changing how developers call it. (16.0.0) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/16.0.0)

### New APIs and options

- Adds a method to convert strings more efficiently. (16.2.1) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/16.2.1)
- The key-value Storage class can now close its database. (16.2.0) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/16.2.0)
- Exposes sqlite3_interrupt() as db.interrupt(). (16.1.0) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/16.1.0)

### Behavior and default changes

- The native implementation now uses the SQLCipher key API. (16.1.0) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/16.1.0)

### Fixes and other changes

- Manual UTF-8 parsing was reverted, changing how UTF-8 parsing is handled. (16.2.2) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/16.2.2)
- Native ATTACH/DETACH parameters are now bound. (16.1.0) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/16.1.0)

## @op-engineering/op-sqlite 15

### New APIs and options

- Adds React Native Web support. (15.2.11) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/15.2.11)
- Adds Turso support. (15.2.11) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/15.2.11)
- Memory databases are now supported for Node. (15.2.3) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/15.2.3)
- Adds partial, experimental support for using @op-engineering/op-sqlite with Node.js. (15.2.0) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/15.2.0)
- Exposes flushPendingReactiveQueries as an API. (15.1.1) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/15.1.1)

### Performance

- libsql switches to a dylib, reducing disk size. (15.1.15) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/15.1.15)
- Tried performance optimizations; the notes do not specify their effects. (15.1.4) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/15.1.4)
- Simple result creation is faster. (15.1.0) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/15.1.0)

### Behavior and default changes

- On Android, user-supplied sqliteFlags can override performanceMode defaults. (15.2.13) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/15.2.13)
- sqlite-vec is updated to support 16kb pages. (15.1.15) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/15.1.15)
- Encryption keys can now be empty. (15.1.3) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/15.1.3)

### Fixes and other changes

- Android now uses SQLITE_STRICT_SUBTYPE=1 to match iOS. (15.2.14) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/15.2.14)
- Android now uses SQLITE_THREADSAFE=2 to match iOS. (15.2.14) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/15.2.14)
- Fixes incorrect boolean casting on macOS. (15.2.12) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/15.2.12)
- Fixes sub array insertion. (15.2.12) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/15.2.12)
- Updated sqlitevec signatures; the notes do not specify which signatures changed. (15.2.1) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/15.2.1)
- Fixes null Android build config flags. (15.1.17) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/15.1.17)
- Fixes a threading performance regression. (15.1.14) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/15.1.14)
- Fixes a botched podspec script, which may affect iOS package builds. (15.1.6) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/15.1.6)
- Fixes invalidated modules not resolving promises. (15.1.2) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/15.1.2)
- Fixes the Android external directory absolute path being null. (15.1.0) — [release notes](https://github.com/OP-Engineering/op-sqlite/releases/tag/15.1.0)
