Firenook and the Firebase Local Emulator Suite

Both run your Firebase project on your machine from the same files. Firenook is faster, lighter and keeps your data; the official suite emulates more services and is the reference. Here they are side by side.

Side by side

The measured rows are from the benchmark of Firenook against firebase-tools 15.22.0 on Java 26, on a real application.

TopicFirenookFirebase Local Emulator Suite
What you installOne npm package with a native engine for your platform. Nothing else is downloaded.firebase-tools, which downloads the Java emulators and the Emulator UI the first time they start.
What it runs onNode 22, 24 or 26 on macOS, Linux with glibc 2.28 or newer, or Windows x64. No Java.Java 21 or newer, and Node for the CLI and your functions.
EmulatorsFirestore, Authentication, Cloud Storage, Cloud Functions, Pub/Sub, Cloud Tasks, Eventarc and ExtensionsThe same, and Realtime Database, Hosting, App Hosting and Data Connect.
A write, median5.1 ms208.2 ms
Memory at peak2.11 GiB22.57 GiB, growing with your data
Firestore query shapesFaster on 25 of 26, and a tie on the lastFaster on none. On 2.7 million documents it ran out of memory on Java’s defaults.
Data between runsKept on disk with --keep-data. A restart takes 0.59 s.Exported at every stop and imported at every start. A restart took 30.8 s.
After a crashAt most the last second of writes is lost.Everything since the last export is lost.
Firestore databasesEvery database your app names, each with its own rules.One. It refuses a second.
The consoleEvery service it runs: function calls, Pub/Sub, Cloud Tasks and Eventarc included.The Emulator UI: Firestore, Auth, Storage, Realtime Database, Extensions and logs.
Functions runtimesNodeNode and Python
TypeScript functionsCompiled as you save with --build, with the compiler’s errors in the log.Compiled by npm run build:watch, which you run yourself beside the emulators.
Deploy and loginNo. Keep firebase-tools for them.Yes: it is the whole Firebase CLI.
Status0.2.0, its first release for public use, open source under the Apache License 2.0.Generally available, made by Google.

The brighter cell is ahead on its row. Firebase is a trademark of Google LLC; Firenook is independent and not affiliated with Google. How it was measured.

What stays the same

Firenook reads what the official suite reads and answers on the same ports, so switching is one word.

  • Your configuration

    firebase.json, .firebaserc, rules and indexes, read the way the Firebase CLI reads them.

  • Your ports and SDKs

    Every emulator on its usual port, so connectFirestoreEmulator and the emulator variables work unchanged.

  • Your data

    The official export format, both ways: --import what you have, and export for the official emulator any time.

  • Your commands

    emulators:start and emulators:exec, with --only, --import, --export-on-exit and --inspect-functions.

Choose Firenook when

  • You restart the emulators often and want your data back at once.
  • Your machine or CI runner is short of memory, or you’d rather not install Java.
  • Your app writes a lot, or your tests wait on Firestore.
  • You want to see every function call, message and task, or give an agent the emulators.

Keep the official suite when

  • You need Realtime Database, Hosting, App Hosting and Data Connect.
  • Your functions are in Python.
  • You need a generally available release, or your queries mostly order large collections.
  • You can also run both: Firenook for what it covers, the official suite for the rest, on other ports.

Try it on your project

Install it next to firebase-tools and change one word in your emulator script. If it isn’t for you, export your data and change the word back.

npm install --save-dev firenook
Switch in three steps