Firenook 0.2.0-next.2

The read path, incremental listeners and a field index. Published on , as a preview.

npm install --save-dev firenook@0.2.0-next.2
Every release

A newer release is out: Firenook 0.2.0, the first release for public use.

What changed

The changes, as the release notes give them.

  1. Firestore no longer reads the whole store to serve the Emulator UI and the listings it polls: ListCollectionIds, ListDocuments with missing documents or no collection id, recursive delete and clear-database walk keys under a prefix; an unfiltered count() reads only the scope index; REST runQuery honours select. Firestore reads run on a bounded read pool instead of the shared async workers, so a long scan no longer stalls Auth, Storage or the UI; Auth persists its state only when a request changed it; the Requests-diagnostics report is summarized once a minute.

  2. Listen streams wake on a commit notifier instead of a 10 ms poll and maintain their views incrementally, falling back to full evaluation only for window exits and moves, offset, limit_to_last and nearest-neighbour queries.

  3. Disk state keeps an equality index over every document's top-level fields: a query with == or in on them reads only the documents holding the value instead of its whole collection. Every filter is still evaluated on each candidate, so results are unchanged; ranges, or, !=, not-in, array membership, nested paths and collection groups still scan. A state last written by an earlier release rebuilds the index on its first start, in the pass that already reads every document (measured at 246 s for a 32.6 GB, 1.9-million-document state); FIRENOOK_FIELD_INDEXES=0 turns it off.

  4. The emulator's own console is served under /console on the UI port, beside the Google Emulator UI, which stays the default. It is an early scaffold: overview, shell and command palette.

Your data

What this release does to data an earlier one kept, and to the ports and protocols.

  • No emulator behaviour, port, command or file format changed otherwise; the index tables are ignored by 0.2.0-next.1, which can still open the state.

How it was checked

The source it was built from, the runs it passed, and how it was published.

  • Pin the engine to 63d554c15f2699cf623c7fac19a4d1393c77f322, the qualified head of PR #66 (the equality field index) on PR #67 (clippy on Rust 1.99), PR #63 (the console scaffold) and PR #62 (the read path). This exact revision passed CI (run 37119862089) and the five-platform packed-install matrix (run 37119862029); locally the workspace tests (51 suites), clippy, the packaging tests (92/92) and the Firestore conformance suite in memory and disk modes (37/37 each) passed, and a store written by it reopened on 0.2.0-next.1, was written there and reopened here with its field index rebuilt.

The release on GitHub.

The latest is 0.2.0

The first release for public use. Install it, and read what changed on the way.

npm install --save-dev firenook@0.2.0
Read the 0.2.0 notes