Electric Firebird runs the Firebird database engine compiled to WebAssembly, in the browser and in Node, similar to what PGlite does for PostgreSQL. It ships on npm as firebird-wasm, and the repo and the package share version numbers. Six releases came out between October 24 and October 27, 2026. Here is what each one brought.
npm install firebird-wasm@0.14.0
v0.14.0 – Zero-copy results and Firebird 5.0 LTS builds (Oct 27)
v0.14.0 release notes on GitHub
- Zero-copy query results across workers. Query results now travel in a packed binary format (
FBR\x01) and are handed from the worker to the page without copying, throughWorkerTransport,SharedEngineTransportandserveEngine. - Firebird 5.0 LTS and 6.0 engines.
wasm/build.sh --firebird-ref 5now builds a Firebird 5.0 LTS (ODS 13.1) WASM engine, alongside Firebird 6.0 (ODS 14.0). CI builds and tests both. - Idle cached statements are released before DDL or dropping a database.
v0.13.0 – BLOB streaming, migrations, sweep and an offline write queue (Oct 27)
v0.13.0 release notes on GitHub
- Segmented BLOB streaming:
db.openBlobStream()anddb.createBlobStream()read and write large BLOBs as Web streams, segment by segment. - Schema introspection and migrations:
db.introspect()returns typed metadata for tables, views and sequences.db.migrate()runs ordered, transactional migrations and tracks them inFB_MIGRATIONS$. - Sweep:
db.sweep()(and a Sweep button in<firebird-repl>) runs garbage collection and reports how far the OIT moved and how many pages were reclaimed. - Durable offline writes for Electric sync: pending changes are stored in a
FB_WRITE_QUEUE$table, survive page reloads, and roll local rows back if the server rejects them. - Prepared statement streaming:
stmt.queryStream()streams rows in batches without preparing the SQL again.
v0.12.0 – Developer experience: live queries, plans, diagnostics (Oct 26)
v0.12.0 release notes on GitHub
- Zero-config live queries:
db.live(sql, onChange)and the React/VueuseLiveQuery(sql)hooks now find the tables a query uses and install the change triggers themselves. - Query plans:
db.explain(sql)returns the compactPLAN (...)or Firebird's detailed plan tree, without running the query. - Database diagnostics:
db.databaseInfo()reports page size, database size, ODS version, OIT/OAT/OST transaction counters, memory use and I/O counters. - Prepared statement handles:
db.prepare(sql)returns a reusable statement withquery,execandexecBatch. - Streaming dump and restore:
dumpDataStream()andloadDataStream()work in 64 KiB chunks, with optional gzip, so the whole database never has to sit in memory at once. - ICU locale packs: locale collations such as
de_DE,es_ES,fr_FRandja_JPcan be loaded on demand, so the default WASM binary stays the same size.
v0.11.0 – Unicode collations built in (Oct 25)
v0.11.0 release notes on GitHub
- The engine now embeds ICU 68 collation data (about 130 KB gzipped), so
COLLATE UNICODE,UNICODE_CI(case-insensitive) andUNICODE_CI_AI(case- and accent-insensitive) work out of the box in tables,ORDER BY,WHERE,GROUP BYand indexes. - Fixed an ICU function signature mismatch that WebAssembly's strict call checking rejected.
v0.10.1 – Fixed npm package (Oct 25)
v0.10.1 release notes on GitHub
- The 0.10.0 npm package had shipped the older 0.9.0 WASM binaries by mistake. 0.10.1 ships the rebuilt ones, so
queryStream()andDECFLOATsupport actually work. - Multi-row
INSERTs in the Kysely and Drizzle dialects now go throughexecBatch, avoiding Firebird error -804 (Data type unknown). - Build script and CI fixes, including GCC 15 support.
v0.10.0 – Kysely and Drizzle ORMs, streaming queries (Oct 24)
v0.10.0 release notes on GitHub
- ORM dialects:
firebird-wasm/kyselyandfirebird-wasm/drizzlesupport Firebird pagination, upserts viaUPDATE OR INSERT ... MATCHING,RETURNING, identity columns, transactions and savepoints. - Streaming queries:
queryStream()returns rows in batches (500 by default) over an open cursor. Stopping afor awaitloop early closes the cursor right away. - Node parity: the Node backend now returns the same value types and field metadata as the browser.
- Electric shape server:
replica=fullsends old values on updates and deletes, andapplyWrite()confirms queued writes directly. - Faster batches on Node through Firebird 4.0+'s native
IBatchAPI, plus zero-copy OPFS reads and writes in the browser.
Try it
The source, demos and full changelog are on GitHub, and the package is on npm. Bug reports and feedback are welcome.
No comments:
Post a Comment