Firenook replaces the emulators for Firestore, Auth, Storage, Functions, Extensions, and many other services with native Rust services. It's a drop-in replacement, so simply install one npm package, no Java, change `firebase emulators:start` to `firenook emulators:start`, and your firebase.json, ports, SDKs, rules and Functions code stay as they are.
We tested it heavily. On two hours of a real app's traffic, Firenook peaked at 2.11 GiB against 22.57 GiB on official emulator and answered writes in 5.1 ms against 208 ms at the median. On an idle emulator a write is only 1.5× faster and 40× is under load. With --keep-data, millions of documents come back in about 0.5s. Results are here: https://firenook.dev/benchmarks
The console sits on the Emulator UI's port. It shows every function call with its logs and stack, and you can run a failed one again. It shows your rules beside each decision, with the line that decided it, and an inbox of the emails and codes Auth would have sent. Screenshots: https://firenook.dev/console. Honestly, I built the console from scratch as the one the emulators should have had from the start. It's fast, clean, full of the detail you need while developing, and still able to browse and edit millions of documents.
The terminal shows a start-up card, then one line per function call with its outcome and, when it fails, the stack. And `npx firenook mcp add` gives Claude Code, Cursor or VS Code tools over the running emulators, so an agent can read the logs or ask the rules why a request was denied, without touching production.
It's still new and I'm sure it misses things, so if you use the Firebase emulators, I'd love for you to try it on your project. `npx firenook init --adopt --dry-run` checks your project without changing anything. If something behaves differently from the official emulator, please tell me here or open an issue. That's the most useful feedback I can get.