{
  "id": 14080407,
  "title": "Recording what the Firestore emulator sends to Cloud Functions, and replaying it in Rust",
  "url": "https://urgent.news/2026/10/13/recording-what-the-firestore-emulator-sends-to-cloud-functions-and",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-10-13T00:48:32.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/nomunomu0504/recording-what-the-firestore-emulator-sends-to-cloud-functions-and-replaying-it-in-rust-2pn8"
  },
  "original_language": "en",
  "account": "The Firestore emulator has been reimplemented as a single Rust binary named hidane, which provides the same gRPC, REST, and WebChannel wire protocols. hidane runs under firebase-tools and records the official emulator's responses, ensuring compatibility tests are met. Before this update, hidane lacked support for Firestore-triggered Cloud Functions. However, in version 0.4.0, hidane now accepts functions emulator trigger registrations, allowing events to reach the functions.\n\nWhen you start firebase emulators with Firestore and Functions, the Functions emulator registers each Firestore trigger with the Firestore emulator. After a commit, the Firestore emulator sends an event for each changed document to every relevant trigger by sending a POST request to /functions/projects/{p}/triggers/{key}.\n\nhidane treats the official emulator as a black box and observes the wire communication to understand their conversation. It starts the official emulator with various configurations several times, registers triggers as firebase-tools does, and records all requests, answers, and warnings. The event format differs for v1 and v2 triggers, with v1 using compact JSON bodies and v2 using binary-mode CloudEvents. The order of events is based on a presized hash order of the triggers, and hidane reproduces this order to ensure compatibility.\n\nIn case of delivery failures, the official emulator logs a WARNING, and hidane prints the same wording. The replay process in hidane's tests compares the answer status, requests, and warnings of each event between the official emulator and hidane. hidane also fixed an issue where Java prints the smallest double as 4.9E-324, while hidane printed 5.0E-324.",
  "summary": "hidane is a reimplementation of the Cloud Firestore emulator as a single Rust binary: no JDK, the same gRPC, REST and WebChannel wire protocols, and it runs under firebase-tools with hidane exec -- firebase emulators:start . Its rule is that every claim of compatibility has a test behind it: scripts record how the official emulator answers, and hidane's test suite replays every recording. Until…",
  "key_points": [
    "hidane, Firestore emulator, reimplemented as Rust binary",
    "hidane records official emulator responses for compatibility tests",
    "hidane replays Firestore trigger events in Cloud Functions"
  ],
  "editors_take": "Reimplementing the Firestore emulator in Rust allows developers to verify protocol compatibility and trigger accuracy by treating the official tool as a black box for recording and replaying event communication.",
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}