---
title: Pipeline SDK compatibility
description: How React Native Firebase Firestore pipelines compare to the firebase-js-sdk pipelines API.
next: /functions/usage
previous: /firestore/pipelines
---

React Native Firebase aims to be a **drop-in replacement** for the [firebase-js-sdk Firestore pipelines module](https://firebase.google.com/docs/reference/js/firestore_pipelines) on React Native targets. Most expression helpers, stage builders, and types match the JS SDK. This page summarizes deliberate gaps so you can plan migrations from web samples.

CI enforces parity through `yarn compare:types` and the `firestore-pipelines` allowlist in the repository. When a gap closes, the allowlist entry is removed and this page should be updated.

# Summary

| Category                                                                    | Status                                                                |
| --------------------------------------------------------------------------- | --------------------------------------------------------------------- |
| Core pipeline builder (`pipeline()`, stages, `execute()`)                   | **Supported** on Android, iOS, and macOS                              |
| Expression helpers (aggregates, strings, arrays, maps, timestamps, vectors) | **Mostly supported** — see gaps below                                 |
| Newer firebase-js-sdk helpers (2025–2026)                                   | **Partial** — tracked in "Not yet available"                          |
| firebase-js-sdk `Type` export                                               | **React Native Firebase only** — use `isType()` with our `Type` union |

# Not yet available in React Native Firebase

These firebase-js-sdk pipeline exports are **not** exposed yet. They are listed in the repository compare-types allowlist until implemented:

| Export                      | Kind       | Notes                          |
| --------------------------- | ---------- | ------------------------------ |
| `coalesce`                  | Expression | Null-coalescing helper         |
| `currentDocument`           | Expression | Document context helper        |
| `documentMatches`           | Expression | Document matching helper       |
| `geoDistance`               | Expression | Geospatial distance            |
| `ifNull`                    | Expression | Null handling                  |
| `score`                     | Expression | Full-text search score         |
| `switchOn`                  | Expression | Conditional switch             |
| `timestampDiff`             | Expression | Timestamp arithmetic           |
| `timestampExtract`          | Expression | Timestamp field extraction     |
| `subcollection`             | Stage      | Subcollection source stage     |
| `parent`                    | Stage      | Parent document stage          |
| `DefineStageOptions`        | Type       | Options for define stage       |
| `SearchStageOptions`        | Type       | Full-text search stage options |
| `SubcollectionStageOptions` | Type       | Subcollection stage options    |
| `TimePart`                  | Type       | Timestamp extraction part      |
| `TimeUnit`                  | Type       | Timestamp unit                 |

If you depend on one of these, follow [Firebase pipeline release notes](https://firebase.google.com/support/release-notes/js) and React Native Firebase changelogs, or open a feature request with your use case.

# Same name, slightly different shape

These exports exist in both SDKs but differ in typing or optional parameters:

| Export            | Difference                                                            |
| ----------------- | --------------------------------------------------------------------- |
| `constant`        | firebase-js-sdk added optional `preferIntegers`; not yet on RNFB      |
| `isType`          | RNFB accepts the local `Type` alias; JS SDK accepts a broader string  |
| `ExpressionType`  | JS SDK includes newer `PipelineValue` kind                            |
| `StageOptions`    | Equivalent runtime shape; declaration formatting differs              |
| `TimeGranularity` | RNFB uses `isoWeek` / `isoYear`; JS SDK also lists lowercase variants |

# React Native Firebase only

| Export | Notes                                                                   |
| ------ | ----------------------------------------------------------------------- |
| `Type` | Local type discriminator union used with `isType()` and related helpers |

# iOS expression limitations

Even when an expression helper is exported from `@react-native-firebase/firestore/pipelines`, the **iOS native runtime** may not implement it yet. Using these functions in a pipeline on iOS throws before `execute()` completes:

| Function            | Status on iOS |
| ------------------- | ------------- |
| `arrayGet`          | Not supported |
| `conditional`       | Not supported |
| `round`             | Not supported |
| `stringRepeat`      | Not supported |
| `substring`         | Not supported |
| `timestampAdd`      | Not supported |
| `timestampSubtract` | Not supported |
| `trunc`             | Not supported |

**Android** and **macOS** do not apply this check; macOS uses the web SDK path. Prefer testing pipeline samples on Android or macOS when they use the functions above until iOS parity lands.

The list is defined in `packages/firestore/lib/pipelines/pipeline_support.ts` and kept in sync with `RNFBFirestorePipelineNodeBuilder.swift`.

# Platform execution matrix

| Platform | Execution backend               | Pipeline database  |
| -------- | ------------------------------- | ------------------ |
| Android  | Native Android Firestore SDK    | Enterprise (cloud) |
| iOS      | Native iOS Firestore SDK        | Enterprise (cloud) |
| macOS    | firebase-js-sdk via web interop | Enterprise (cloud) |

All platforms require network access to your Firestore Enterprise database for pipeline `execute()`. The local Firestore emulator is not a supported target for pipeline development today.

# Staying up to date

- Upstream API reference: [firebase-js-sdk `firestore/pipelines`](https://firebase.google.com/docs/reference/js/firestore_pipelines)
- RNFB import path: `@react-native-firebase/firestore/pipelines`
- Repository parity config: `.github/scripts/compare-types/configs/firestore-pipelines.ts`

When a row in the tables above is resolved in a release, it will be removed from the compare-types allowlist. Check release notes and this page after upgrading `@react-native-firebase/firestore`.
