Firenook 0.2.0
The first release for public use. Published on .
npm install --save-dev firenook@0.2.0What changed
12 changes you will notice, as the release notes give them.
A stable version
npm install firenookand a barenpx firenookget 0.2.0 on any Node from 20 up; previews keep their own versions, and a preview install is told about 0.2.0.firenook initin a terminalOne screen with every choice made (the project id, the emulators on their usual ports, TypeScript, JavaScript or no Functions, the coding agents, the set-up), then the installs, Firenook pinned, the first build and the emulators started in the same terminal. TypeScript is the default, from the official template. Without a terminal it writes the files and prints the commands that finish the set-up;
--yesruns them.TypeScript compiled as you save
--buildruns each codebase's ownbuild:watchbeside the engine and starts it after the first compile; errors show in the log.emulators:exec --buildrunsbuildonce and no test when it fails.Ordered and range queries
An order-preserving field index serves
orderBy, range filters and cursors on a top-level field, and checks equality on other fields before a document is read; a batch get writes stored documents straight into the reply. The six query shapes the official emulator answered faster in the 0.2.0-next.6 benchmark are now 1.8 to 8 times faster than it (orderByan integer, limit 20: 12.0 ms against 96.3 ms). A store an earlier release wrote builds the index once on its first open (7.4 s for 211,202 documents, 49.3 s for 2.7 million on the benchmark server); an earlier release opening a 0.2.0 store rebuilds its own index.Node 22, 24 and 26
Older is refused with how to switch; an odd or newer major starts with a warning; a codebase whose
engines.nodeasks for another Node is warned about, as the official emulator warns.doctorreports the Node and every problem.Older Linux
The engines need glibc 2.28 (RHEL 8, Debian 10, Ubuntu 20.04, node:24-slim and later) instead of 2.39; Alpine and older systems are told what they lack.
Security Rules as the official emulator applies them
A gRPC request without an
Authorizationheader is signed out, not the owner.@firebase/rules-unit-testingworks. A databasefirebase.jsondoes not list follows the default database's rules; a Storage target with several buckets applies its rules to each; a denial names the rule line.Nothing reaches production
The console's snippets (Python Storage, Apple Firestore, Tasks and Eventarc everywhere) and
emulators:exec, which now sets the official variables for the running emulators only. The demo credentials ofexecand of the Functions workers take their token from the emulators: no firebase-admin release tested asked Google for one, and a function no longer falls back to the developer's own gcloud login.Functions
Params' defaults,
.env.<alias>, the.envvalues at discovery, the projectfirebase usechose, warnings for triggers on services that do not run,functions:invoke --help,ext:vendor --offline, the Firebase login on Windows.REST
createDocumentworks, and every v1 method answers as the official emulator does (the differences kept are listed inCOMPATIBILITY.md).Starts and stops
Two suites with one project id; Firestore closed after browser sessions; a killed launcher stops its engine, which saves the data;
--importwithout metadata and a bad indexes file warn;firebase.jsonfound from a folder inside the project;localhostand::1bound as officially.Polish
init --forcekeeps your rules,init --adoptkeeps your formatting,--uicomes beforeui.enabled: false, counts agree with their nouns, every service's lines reach the screen,CI=falseis not CI.
What got faster
Measured on the same data with 0.2.0-next.8 and with 0.2.0. Lower is better.
orderBy a timestamp, limit 20, on 2.7 million documents
1,192× faster
- 0.2.0-next.8
- 5,128 ms
- 0.2.0
- 4.3 ms
orderBy an integer field, limit 20
14× faster
- 0.2.0-next.8
- 177 ms
- 0.2.0
- 12.0 ms
Every multiple is rounded down. Every release’s measures.
Your data
What this release does to data an earlier one kept, and to the ports and protocols.
- Data 0.2.0 saves opens in 0.2.0-next.8, which rebuilds its own field index first; no emulator protocol or port changed, except that
localhostnow binds::1as well for the hub and the console, as officially.
How it was checked
The source it was built from, the runs it passed, and how it was published.
- Pin the engine to
7a9614bea49f8208f96d2126b29ef11ee2f2810b, the merge of PR #117 on 0.2.0-next.8. Its tree is the PR head's,bbd437e, which passed CI (run 39667251564) and the five-platform packed-install matrix (run 39667251694). - Benchmarked against the official emulator on one application's two hours of traffic: 10 times less emulator memory (2.11 against 22.57 GiB), writes 40 times faster (5.1 against 208 ms at the median), listener updates 19 times faster and 61% less CPU; a restart with the data kept is ready in 0.59 s against 30.8 s, and Firenook is faster on 25 of 26 query shapes and ties on the last.
- Published straight to
latest; the CLI'snextstays on 0.2.0-next.8 until it is moved by hand.
Install Firenook 0.2.0
Install it in your project next to firebase-tools, and change one word in your emulator script.
npm install --save-dev firenook@0.2.0