Skip to content

Limitations

Fireemu does not yet reproduce every feature and behavior of production Firebase. This page lists the main limitations; it is not exhaustive. Check individual APIs in the capability manifest, or run:

Terminal window
npx fireemu capabilities

App Hosting and Data Connect are not currently supported. Firebase Extensions support is not planned.

  • Realtime Database. Served and verified against production for its recorded cases only (see Production verification). Broader production compatibility is unverified, and there is no parity claim against the official emulator. Details: Realtime Database and the list below.
  • The Enterprise Pipeline API supports a limited subset of read operations (see Enterprise pipelines).
  • Enterprise text search provides finite local lexical search and explicit build controls. Analysis and ranking are approximations; productionExact refuses unobserved search semantics.
  • Sign-in flows that talk to external identity providers, hosted authorization-code exchange and live key discovery and rotation are not supported.
  • Local configured signed OIDC/SAML verification is supported by the strict signed-assertion path, using auth.idpSigners public keys or the SAML provider’s configured certificates.
  • Finite SAML checks cover present status, destination, issuer, audience and validity fields, and responses to known daemon-issued requests. Absent fields, unparseable times and other unrecorded combinations remain unobserved.
  • Verifying the signature of a signed URL or a POST policy (their expiry and conditions are checked).
  • Object ACLs other than allUsers read, IAM and bucket-level public access.
  • Object composition (compose) and notification configuration.
  • Verified against production for its recorded cases only (see Production verification); broader production compatibility is unverified, and there is no parity claim against the official emulator. Comparison is limited to recorded official-emulator cases.
  • The listed unsupported syntax and evaluation cases (regular-expression constructs, case mappings and the other differences listed there) are refused when rules load or produce rule errors. query.endBefore, query.isOrderByChild(), the OrderByKey, OrderByValue and OrderByPriority names, http.encodeURL(), method reads without a call and ternary callees load and evaluate as production was recorded doing.
  • The eight recorded patterns refused by the official emulator’s determinization resource limit are also rejected when Fireemu loads rules, including in unevaluated expression branches. This does not establish complete regular-expression or production equivalence.
  • Functions trigger delivery has been observed for a limited set of recorded handlers and writes; broader cases remain unverified.
  • Behavior taken from the official emulator where production has not been observed may change.

See Realtime Database.

  • Triggers for products Fireemu does not deliver events for, such as Data Connect (deferred). Remote Config handlers run only through the local injection action, and its production event shape is unobserved.
  • Dart codebases, and protobuf CloudEvents ingress other than Firestore events. Firestore events reach the Python SDK as protobuf, and Node 2nd-gen functions as protobuf under strict.
  • The exact shape of Storage archive events remains unrecorded.
  • Python codebases serve HTTP, callable, Firestore, Pub/Sub, Storage, Eventarc, Realtime Database, scheduled, task-queue and Auth blocking functions. They see real time only (no virtual clock), do not reload source changes (Node source changes reload automatically), and run on macOS and Linux only. Their callables’ App Check tokens are verified by the Python SDK against the App Check emulator’s keys (no limited-use consumption, and an explicit App Check configuration refuses to start). See Cloud Functions (Python).
  • Schemas, BigQuery and Cloud Storage subscription delivery, exactly-once delivery and message transforms.
  • UpdateTopic supports only the labels and, in the emulator profile, message_storage_policy and kms_key_name update masks; DetachSubscription is not implemented.
  • messageStoragePolicy is stored as sent and never checked against Google Cloud’s regions; the strict profile refuses it.
  • Topic key names and tags are stored as sent and never validated in the emulator profile; the strict profile refuses them.
  • Attestation through Play Integrity, App Attest, DeviceCheck or reCAPTCHA, and replay protection with limited-use tokens. Local testing with debug tokens is supported.

Sessions share clocks, rules, Functions and the admission barrier. Snapshots are held in memory for the daemon lifetime; they do not capture outstanding Functions work. awaitIdle does not wait for Text Index work or provide causal fences across sessions.

A successful local operation does not guarantee the same result in production. Fireemu does not reproduce real quota accounting, billing, IAM, organization policies, regional or network differences, or service rollouts. Local performance does not predict production latency or throughput.

Security Rules and API behavior are implemented from documentation and from observations of Firebase’s actual behavior. Changes in Firebase, or conditions that have not been tested, may introduce differences that have not been recorded yet.

Some limits exist only in Fireemu, to bound memory use: the Firestore history limits and the optional Storage stored-byte limit.

Configuration and behavior may change between releases. See the CHANGELOG.