Skip to content

hidane 0.1.0

Choose a tag to compare

@github-actions github-actions released this 10 Oct 16:57
· 97 commits to main since this release
e119365

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/hidane

Then run it under firebase-tools, with no Java installed:

hidane exec -- firebase emulators:start --only firestore

Or 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:8080

What 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, sum and avg;
    • 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 v1beta1 name);
    • REST, whose JSON matches the official emulator's byte for byte;
    • WebChannel, which the browser SDK uses.
  • firebase-tools: hidane exec -- firebase emulators:start or emulators:exec launches 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 the Authorization header (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. --rules is 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/hidane

The 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).