hidane (火種, the seed of fire) — a Firestore emulator without Java.

A 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

Why hidane

941 ms · 148 MiB

941 ms to start, 148 MiB idle

In 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 included
11× slower

Writes slow down as data grows

With 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 logs

Startup 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.

Works with

Status in v0.5.0: planned not verified verified
gRPCfirebase-admin (Node)verified
gRPC@google-cloud/firestoreverified
gRPCfirebase-js-sdk on Nodeverified
RESTfirebase-js-sdk Liteverified
WebChannelBrowser firebase-js-sdkverified
gRPCGoverified
gRPCPythonverified
gRPCJavaverified
gRPCiOSnot verified
gRPCAndroidnot verified
gRPCFlutter (mobile / desktop)not verified
WebChannelFlutter Webverified
filesfirebase-tools export / importverified
rulesSecurity Rulesverified

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.

Parity

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.

AreaTransportsRecorded answersCompared in fullSDK transcripts
Documents & writesgRPC, RESTgRPC, REST5,2464,8744 documented differences
Queries & aggregationsgRPC, RESTgRPC, REST4964546 identical
TransactionsgRPC, RESTgRPC, REST1921872 identical3 documented differences
Listen & Write streamsgRPCgRPC49484 identical2 documented differences
RESTRESTREST1181141 identical
WebChannelREST, WebChannelREST, WebChannel34312 identical1 documented difference
Security RulesgRPC, REST, WebSocket, in-processgRPC, REST, WebSocket, in-process13,2645,5412 documented differences
Export & importREST, CLIREST, CLI70673 identical
Auth & admin endpointsgRPC, RESTgRPC, REST6215731 identical2 documented differences
Values & limitsgRPC, REST, WebChannel, in-processgRPC, REST, WebChannel, in-process278274—
Total20,36812,16319 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.

Roadmap

  1. v0.1

    Server SDKs and native clients: firebase-admin, the Google Cloud libraries, iOS, Android and Flutter, running under firebase-tools.

    v0.1 milestone on GitHub
  2. v0.2

    Security 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 GitHub
  3. v0.3

    Browser 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 GitHub
  4. v0.4

    Functions 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 GitHub

Scope, targets and risks: ROADMAP.

Install

Every channel installs the same release binaries: macOS (arm64, x86_64), Linux (arm64, x86_64; static) and Windows (x64).

GitHub ReleasesArchives, checksums, build provenanceavailable
cargo binstallcargo binstall hidaneavailable
Homebrew tapbrew install hidane-dev/tap/hidaneavailable
npmnpm install --save-dev hidaneavailable
pub.devdart pub global activate hidaneavailable
Dockerdocker run -p 8080:8080 ghcr.io/hidane-dev/hidaneavailable
curl | shcurl -fsSL https://hidane.dev/install.sh | shavailable