Java 21 is now required
firebase-tools 15 dropped support for Java older than 21. Running a local database should not require a JDK.
Source: firebase-tools v15.0.0 release notesA single Rust binary that replaces the official Cloud Firestore emulator. No JVM. Starts in milliseconds. Tested for parity against the official emulator.
curl -fsSL https://hidane.dev/install.sh | sh
v0.5.0 · macOS · Linux
Installs the latest release in ~/.local/bin, checked against its SHA-256. Homebrew, npm (Windows too), cargo and Docker: Install.
v0.5.0 · hidane doctor, migrate, benchmark savings and report; Testcontainers
firebase-tools 15 dropped support for Java older than 21. Running a local database should not require a JDK.
Source: firebase-tools v15.0.0 release notesIn our canonical benchmark environment, the official emulator takes a median 941 ms to open its port and sits at 148 MiB idle. hidane v0.4.0 on the same machine: 1.56 ms and 7.8 MiB.
Source: benchmark result, every sample includedWith a listener attached, the official emulator's batch writes slow down in proportion to the number of documents: 11 times slower at 100k. hidane is designed so that a commit costs only what it changes: the same 100k documents take 4.9 s, flat per batch.
Source: measurements and raw logsStartup and memory: medians for both emulators on one AWS c7i.xlarge (Ubuntu 24.04, Java 21, firebase-tools 15.33.0), 2026-10-13; methodology in bench/. Writes with a listener: Phase 0 measurements, not side by side, as the benchmark does not cover that case yet. Context: why hidane.
Verified means the client's results were compared with the official emulator's; not verified means hidane serves its transport but nobody has run that client yet. Which transport each SDK needs: compatibility.
hidane treats the official emulator as the oracle: its answers are recorded, and the test suite replays every recording against hidane. No claim of compatibility without a test behind it.
So far: 20,368 answers of the official emulator in 41 recordings, each replayed against hidane in CI, and SDK transcripts from both emulators compared side by side (results). How they are counted: docs/parity.md.
| Area | Transports | Recorded answers | Compared in full | SDK transcripts |
|---|---|---|---|---|
| Documents & writesgRPC, REST | gRPC, REST | 5,246 | 4,874 | 4 documented differences |
| Queries & aggregationsgRPC, REST | gRPC, REST | 496 | 454 | 6 identical |
| TransactionsgRPC, REST | gRPC, REST | 192 | 187 | 2 identical3 documented differences |
| Listen & Write streamsgRPC | gRPC | 49 | 48 | 4 identical2 documented differences |
| RESTREST | REST | 118 | 114 | 1 identical |
| WebChannelREST, WebChannel | REST, WebChannel | 34 | 31 | 2 identical1 documented difference |
| Security RulesgRPC, REST, WebSocket, in-process | gRPC, REST, WebSocket, in-process | 13,264 | 5,541 | 2 documented differences |
| Export & importREST, CLI | REST, CLI | 70 | 67 | 3 identical |
| Auth & admin endpointsgRPC, REST | gRPC, REST | 621 | 573 | 1 identical2 documented differences |
| Values & limitsgRPC, REST, WebChannel, in-process | gRPC, REST, WebChannel, in-process | 278 | 274 | — |
| Total | 20,368 | 12,163 | 19 identical14 documented differences |
Compared in full: answers whose test compares everything the recording keeps (status, message or body, values), masking only what changes from run to run, such as times and IDs. The others are compared on the Security Rules decision and its reasons, in part, or on their status; docs/parity.md breaks them down, test by test. SDK transcripts: the same steps run through an SDK against both emulators; a documented difference is one results/README.md or the parity exceptions explain. Known, intentional differences (68) are listed in parity exceptions.
Server SDKs and native clients: firebase-admin, the Google Cloud libraries, iOS, Android and Flutter, running under firebase-tools.
v0.1 milestone on GitHubSecurity Rules, evaluated once per request as the official emulator decides them: reads, writes, listeners and queries, measured against it case by case, with its compiler warnings, rule coverage reports and debug() output. Released in v0.2.0; v0.2.1 feeds the Emulator UI's request monitor, and @firebase/rules-unit-testing is verified end to end, in Node and in the browser.
v0.2 milestone on GitHubBrowser clients: firebase-js-sdk in the browser and Flutter Web. Released in v0.3.0: the SDK's own browser test suite passes on hidane as on the official emulator, 1,183 tests in Chromium, and Flutter Web is verified.
v0.3 milestone on GitHubFunctions triggers: Firestore events delivered to the Functions emulator, v1 and v2, under firebase emulators:start. Released in v0.4.0: the events are recorded from the official emulator and replayed, and functions receive the same data end to end.
v0.4 milestone on GitHubScope, targets and risks: ROADMAP.
Every channel installs the same release binaries: macOS (arm64, x86_64), Linux (arm64, x86_64; static) and Windows (x64).
cargo binstall hidaneavailablebrew install hidane-dev/tap/hidaneavailablenpm install --save-dev hidaneavailabledart pub global activate hidaneavailabledocker run -p 8080:8080 ghcr.io/hidane-dev/hidaneavailablecurl -fsSL https://hidane.dev/install.sh | shavailable