You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
|**Analytics**| Cross-platform modular API | On-device conversion measurement helpers (`initiateOnDeviceConversionMeasurement*`) are **iOS only**; on Android and web the JS layer resolves without calling native (no-op). `logTransaction` (verified iOS in-app purchase events) is **iOS only** and **rejects** on other platforms. |
90
-
|**Realtime Database**|`goOnline` / `goOffline` are synchronous; web transport toggles |`goOnline` / `goOffline` are **synchronous** through TurboModules, matching firebase-js-sdk. `getServerTime`, `setPersistenceEnabled`, and `setPersistenceCacheSizeBytes` are RN-specific. `forceLongPolling` / `forceWebSockets`**throw** — transport is native-controlled. |
91
-
|**Phone Number Verification**| N/A (Android SDK only) |**Android only** — all entry points throw on iOS and Web. |
92
-
|**Cloud Storage**|`uploadBytes` / `uploadString` from JS blobs |`putFile` and `writeToFile` are **native-only** file-path APIs with no firebase-js-sdk equivalent. Retry-time setters are modular functions on RN, not instance properties. |
93
-
|**Cloud Messaging**| Web push / service-worker surface | FCM token lifecycle, permissions, background handlers, and **APNs token APIs are iOS only**. Event delivery still uses the legacy native event proxy during the TurboModule migration; behavior matches pre-v26 releases but will change when Codegen events land in a future release. |
94
-
|**Remote Config**|`reset()` clears server and local state |`reset()` is **Android only** — iOS does not clear activated, fetched, or default Remote Config values. `setDefaultsFromResource` loads from native resource files (`.plist` / XML). |
95
-
|**Performance**|`initializePerformance` returns synchronously; trace `start`/`stop` are sync |`initializePerformance` is **synchronous** on RN (applies settings to the native instance). Trace, HTTP metric, and screen trace `start`/`stop` are **synchronous** through TurboModules, matching firebase-js-sdk. |
96
-
|**Firestore**| IndexedDB persistence, `memoryLocalCache`, `persistentLocalCache`| Local cache factories and IndexedDB APIs are **web only**. Persistence is controlled by the native Firestore SDK. `initializeFirestore` returns **`Firestore` synchronously** (settings apply in the background). |
97
-
|**App Check**| reCAPTCHA version 3 / Enterprise web providers | Use `ReactNativeFirebaseAppCheckProvider` for Device Check, App Attest, Play Integrity, etc. Web reCAPTCHA provider classes have **no RN equivalent**. |
98
-
|**RN-native-only modules**| No web SDK |`crashlytics`, `in-app-messaging`, `app-distribution`, and `ml` are **React Native only** — no firebase-js-sdk modular surface. |
86
+
{/* prettier-ignore */}
87
+
| Area | firebase-js-sdk (web) | React Native Firebase |
|**Analytics**| Cross-platform modular API | On-device conversion measurement helpers (`initiateOnDeviceConversionMeasurement*`) are **iOS only**; on Android and web the JS layer resolves without calling native (no-op). `logTransaction` (verified iOS in-app purchase events) is **iOS only** and **rejects** on other platforms. |
91
+
|**Realtime Database**|`goOnline` / `goOffline` are synchronous; web transport toggles |`goOnline` / `goOffline` are **synchronous** through TurboModules, matching firebase-js-sdk. `getServerTime`, `setPersistenceEnabled`, and `setPersistenceCacheSizeBytes` are RN-specific. `forceLongPolling` / `forceWebSockets`**throw** — transport is native-controlled. |
92
+
|**Phone Number Verification**| N/A (Android SDK only) |**Android only** — all entry points throw on iOS and Web. |
93
+
|**Cloud Storage**|`uploadBytes` / `uploadString` from JS blobs; upload task controls return sync `boolean`|`putFile` and `writeToFile` are **native-only** file-path APIs. `UploadTask.pause()` / `.resume()` / `.cancel()` also return sync `boolean` values through native TurboModules. |
94
+
|**Cloud Messaging**| Web push / service-worker surface | FCM token lifecycle, permissions, background handlers, and **APNs token APIs are iOS only**. Event delivery still uses the legacy native event proxy during the TurboModule migration; behavior matches pre-v26 releases but will change when Codegen events land in a future release. |
95
+
|**Remote Config**|`reset()` clears server and local state |`reset()` is **Android only** — iOS does not clear activated, fetched, or default Remote Config values. `setDefaultsFromResource` loads from native resource files (`.plist` / XML). |
96
+
|**Performance**|`initializePerformance` returns synchronously; trace `start`/`stop` are sync |`initializePerformance` is **synchronous** on RN (applies settings to the native instance). Trace, HTTP metric, and screen trace `start`/`stop` are **synchronous** through TurboModules, matching firebase-js-sdk. |
97
+
|**Firestore**| IndexedDB persistence, `memoryLocalCache`, `persistentLocalCache`, FieldValue `maximum()` / `minimum()` sentinels | Local cache factories and IndexedDB APIs are **web only**. Persistence is controlled by the native Firestore SDK. `initializeFirestore` returns **`Firestore` synchronously**. FieldValue `maximum()` / `minimum()` are not exported yet because iOS SDK 12.15.0 lacks matching native factories. |
98
+
|**App Check**| reCAPTCHA version 3 / Enterprise web providers | Use `ReactNativeFirebaseAppCheckProvider` for Device Check, App Attest, Play Integrity, etc. Web reCAPTCHA provider classes have **no RN equivalent**. |
99
+
|**RN-native-only modules**| No web SDK |`crashlytics`, `in-app-messaging`, `app-distribution`, and `ml` are **React Native only** — no firebase-js-sdk modular surface. |
99
100
100
101
Per-package notes also appear in each module's [usage](/) page under **Platform support**.
101
102
@@ -107,6 +108,7 @@ v26 aligns React Native Firebase modular types and several runtime signatures wi
107
108
108
109
### Phase S — TurboModule sync conversion (new-architecture)
109
110
111
+
{/* prettier-ignore */}
110
112
| Method | Before (pre-v26 / legacy bridge) | After (v26) | Notes |
|`registerVersion(library, version, variant?)`|`Promise<void>` (web) |`void` — throws on RN | Web-only on RN; remove `await` if copied from web samples |
@@ -117,9 +119,11 @@ v26 aligns React Native Firebase modular types and several runtime signatures wi
117
119
|`ScreenTrace.start()` / `.stop()`|`Promise<null>`|`void`| Same as traces |
-`UploadTask.pause()`, `UploadTask.resume()`, and `UploadTask.cancel()` now return `boolean` synchronously (previously `Promise<boolean>`), matching firebase-js-sdk task semantics. Remove `await`, `.then()`, and `.catch()` from these control calls and use the returned boolean directly.
635
+
-`cancel()` delegates to the native SDK. Android cancels active uploads; iOS active-upload cancel follows the current Firebase Storage iOS SDK 12.15.0 behavior tracked in [firebase-ios-sdk#16353](https://github.com/firebase/firebase-ios-sdk/issues/16353).
636
+
616
637
# Authentication
617
638
618
639
The namespaced API for `@react-native-firebase/auth` has been **removed**. This package is **modular-only** — use `getAuth()` / `initializeAuth()` and root-level helper functions.
@@ -667,7 +688,7 @@ The namespaced API for `@react-native-firebase/firestore` has been **removed**.
@@ -676,7 +697,9 @@ The namespaced API for `@react-native-firebase/firestore` has been **removed**.
676
697
## Signature changes
677
698
678
699
-`initializeFirestore(app, settings, databaseId?)` returns `Firestore` synchronously (previously `Promise<Firestore>`). Remove `await` and `.then()`; settings apply on the native bridge after return.
679
-
-`aggregateFieldEqual()` is now exported for aggregate queries (firebase-js-sdk parity).
700
+
-`TransactionOptions` is now exported. `runTransaction(firestore, updateFunction, options?)` accepts `{ maxAttempts?: number }` and passes the retry limit to the native iOS and Android Firestore SDKs.
701
+
-`aggregateFieldEqual()` and `aggregateQuerySnapshotEqual()` are now exported for aggregate query equality checks (firebase-js-sdk parity).
702
+
- FieldValue `maximum(n)` and `minimum(n)` sentinels from firebase-js-sdk 12.15.0 are not exported yet. Android Firebase Firestore SDK 34.15.0 supports them, but iOS Firebase Firestore SDK 12.15.0 does not expose matching `FIRFieldValue` factories, so React Native Firebase waits for cross-platform support.
680
703
681
704
## Example
682
705
@@ -742,6 +765,8 @@ For each modular-only package you use:
Also remove `await`, `.then()`, and `.catch()` from `UploadTask.pause()`, `UploadTask.resume()`, and `UploadTask.cancel()`. For Firestore transactions, import `TransactionOptions` when you pass `{ maxAttempts }`, and import `aggregateFieldEqual()` / `aggregateQuerySnapshotEqual()` for aggregate equality checks.
0 commit comments