Repository navigation
hidane 0.1.0
The first release of hidane (火種, the seed of fire), a Firestore emulator without Java. It is a single binary that speaks the official Cloud Firestore emulator's gRPC, REST and WebChannel protocols and runs under firebase-tools. Each behaviour is checked against the official emulator v1.22.0.
hidane is an independent project and is not affiliated with or endorsed by Google.
Install
curl -fsSL https://hidane.dev/install.sh | sh # macOS, Linux: into ~/.local/bin, SHA-256 checked
brew install hidane-dev/tap/hidane # Homebrew (macOS, Linux)
npm install --save-dev hidane # npm, every platform
cargo binstall hidane # or: cargo install hidane (Rust 1.88+)
dart pub global activate hidane # pub.dev launcher
docker run --rm -p 8080:8080 ghcr.io/hidane-dev/hidaneThen run it under firebase-tools, with no Java installed:
hidane exec -- firebase emulators:start --only firestoreOr run it on its own and point your clients at it:
hidane --host 127.0.0.1 --port 8080
export FIRESTORE_EMULATOR_HOST=127.0.0.1:8080What 0.1.0 does
- The Firestore API, as the official emulator answers it, error messages included:
- documents, batch writes and the Write stream;
- queries with every filter, cursors, collection groups and queries over every collection;
count,sumandavg;- vector search (
findNearest); - transactions, with the official emulator's locks and timeouts;
- listeners, which resume from a token with only what changed.
- One port, three transports:
- gRPC (with reflection and the
v1beta1name); - REST, whose JSON matches the official emulator's byte for byte;
- WebChannel, which the browser SDK uses.
- gRPC (with reflection and the
- firebase-tools:
hidane exec -- firebase emulators:startoremulators:execlaunches hidane in place of the official jar, with no Java needed. The Emulator UI can browse, create and delete documents and clear data. - Export and import in the official format, readable by either emulator in both directions:
firebase emulators:start --import/--export-on-exit,emulators:export,--seed_from_export,POST …:export/:import. - The emulator's own endpoints:
/reset,/shutdown, clearing a database, CORS, and theAuthorizationheader (owner and mock tokens). - Speed: the port accepts in 5.5 ms, and hidane idles at 7.4 MiB. 100,000 documents written in batches with a listener attached take 4.9 s, flat per batch. These are measurements, not yet side by side with the official emulator's (#50).
These clients were verified against the official emulator:
- firebase-admin /
@google-cloud/firestore - firebase-js-sdk in Node, Lite and the browser
@firebase/rules-unit-testing, without rules
Go, Python, Java, iOS, Android and Flutter use the same transports but are not verified yet (compatibility).
Not yet
- Security Rules (v0.2): every request is allowed.
--rulesis accepted with a warning. - The Emulator UI's request monitor (#69), events for the Functions emulator (#70), Datastore mode (#81) and Enterprise pipelines (#80).
Where hidane deliberately differs from the official emulator (performance bugs and known defects it does not reproduce) is listed in parity exceptions.
Verifying the downloads
Each archive is listed in sha256sums.txt and carries a build provenance attestation:
sha256sum --check --ignore-missing sha256sums.txt
gh attestation verify hidane-0.1.0-<target>.tar.gz --repo hidane-dev/hidaneThe macOS binaries are not signed yet. A binary downloaded through a browser needs xattr -d com.apple.quarantine hidane; curl, Homebrew and npm installs are unaffected.
License
MIT OR Apache-2.0. The archives include the third-party notices (THIRD-PARTY-LICENSES.txt, also printed by hidane --licenses).