Every native app linked bundled SQLite, about 1.5 MB, because every JS
engine load installed the SQLite storage provider. A production build
now selects it from `sqlite.open` in the app's grants (TypeScript or
Rust) or `link: ["sqlite"]` in the manifest; development builds and a
build whose grant ceiling is unknown keep it. The shop benchmark's app,
which grants only `net.fetch`, goes from 23,970,931 to 22,355,807 bytes
built for speed.
The generated `Default` constructor registers the provider before it
constructs the data, on Apple, Linux, Windows and Android. Without it
both storage executors refuse an open as `Unlinked("sqlite")`. The
provider stays a crate of its own: no core crate gains a feature.
Native shells declare `ibex2-sqlite`, and `exact update` adds it to an
existing app's manifests beside each native host and follows a moved
SDK. It parses its result before writing; where it cannot edit a
manifest correctly (dependencies written as an inline table) it leaves
the file as it was and names the line to add.
Adding `sqlite.open` to an installed app is a new compatibility
identity, so a new binary, whether or not `link` named `sqlite`.
Co-Authored-By: Claude Fable 5.2 <[email protected]>