⚠ BREAKING CHANGES
- auth: migrate to TypeScript and bring auth closer in alignment with firebase-js-sdk API (#8991)
- messaging: deprecate permissions APIs, use react-native-permissions or expo-notifications (#9053)
- installations: installations modular types now match firebase-js-sdk
Please see https://rnfirebase.io/migrating-to-v25 for help migrating if needed.
react-native-firebase has a goal to be a drop-in replacement for firebase-js-sdk, with native extensions and performance. It has always worked that way at the javascript level but the typescript types have been divergent.
We are fixing that as we refactor to typescript. Please bear with us as we get closer to our goal of react-native-firebase matching firebase-js-sdk both in functionality where possible, but also in exact typescript typing.
Specifics for Installations:
changed modular getInstallations() to return the firebase-js-sdk-style Installations type, which only exposes app; TypeScript consumers should use the modular helpers getId(installations), getToken(installations), and deleteInstallations(installations) instead of calling .getId(), .getToken(), or .delete() on the returned instance.
changed modular deleteInstallations(installations) so the installations argument is required in the TypeScript surface, matching firebase-js-sdk. Code that previously relied on the old optional typing should pass getInstallations() explicitly.
preserved the namespaced API surface: installations(), firebase.installations(), firebase.app().installations(), and FirebaseInstallationsTypes.Module remain available for compatibility, with deprecation annotations added.
added explicit modular public types including Installations, IdChangeCallbackFn, and IdChangeUnsubscribeFn.
- perf: perf types now match firebase-js-sdk as closely as possible
Please see https://rnfirebase.io/migrating-to-v25 for help migrating if needed.
react-native-firebase has a goal to be a drop-in replacement for firebase-js-sdk, with native extensions and performance. It has always worked that way at the javascript level but the typescript types have been divergent.
We are fixing that as we refactor to typescript. Please bear with us as we get closer to our goal of react-native-firebase matching firebase-js-sdk both in functionality where possible, but also in exact typescript typing.
Specifics for Performance:
- changed modular
initializePerformance(app, settings)to returnFirebasePerformancesynchronously instead ofPromise<Performance>, matching firebase-js-sdk; TypeScript consumers that call.then(...)on it will need to use the returned instance directly. - aligned the modular
FirebasePerformancetype with firebase-js-sdk, so it no longer exposes older namespaced instance-style methods such asnewTrace,startTrace,newHttpMetric,newScreenTrace,startScreenTrace, orsetPerformanceCollectionEnabledin the modular typings; usetrace(perf, name),httpMetric(perf, url, method),newScreenTrace(perf, name),startScreenTrace(perf, name), and thedataCollectionEnabledproperty instead. - changed
PerformanceSettingsto the firebase-js-sdk shape, with optionaldataCollectionEnabledandinstrumentationEnabled. - changed modular trace and metric
getAttribute(...)typings fromstring | nulltostring | undefined, matching firebase-js-sdk. - kept React Native-only modular exports for native functionality:
httpMetric,newScreenTrace,startScreenTrace, plusHttpMethod,HttpMetric, andScreenTrace. - kept the deprecated namespaced API under
FirebasePerformanceTypes, but split it from the modular public types and marked it as deprecated for compatibility.
- analytics: as anyone that relied on this param previously is hopefully happy
to have it actually work now versus silently fail - database: database types now match firebase-js-sdk as closely as possible
Please see https://rnfirebase.io/migrating-to-v25 for help migrating if needed
react-native-firebase has a goal to be a drop-in replacement for firebase-js-sdk, with native extensions and performance. It has always worked that way at the javascript level but the typescript types have been divergent
We are fixing that as we refactor to typescript. Please bear with us as we get closer to our goal of react-native-firebase matching firebase-js-sdk both in functionality where possible, but also in exact typescript typing.
Specifics for Database:
- removed the modular ServerValue named export from @react-native-firebase/database; consumers must use serverTimestamp() / increment() instead.
- changed modular goOffline(db) and goOnline(db) so they no longer return a chainable value, which breaks consumer code that awaits them or calls .then(...) on them.
- aligned the modular TypeScript surface with the firebase-js-sdk, so modular types like DatabaseReference, Query, DataSnapshot, OnDisconnect, and QueryConstraint no longer expose the older namespaced instance-style API in their public typings; TypeScript consumers will need to switch to the function-based modular helpers.
- corrected getServerTime(db) to a synchronous Date return in the modular type surface, so TypeScript consumers that previously treated it as promise-like will need to update their code.
- remote-config: remote-config types now match firebase-js-sdk as closely as possible
Please see https://rnfirebase.io/migrating-to-v25 for help migrating if needed
react-native-firebase has a goal to be a drop-in replacement for firebase-js-sdk, with native extensions and performance. It has always worked that way at the javascript level but the typescript types have been divergent
We are fixing that as we refactor to typescript. Please bear with us as we get closer to our goal of react-native-firebase matching firebase-js-sdk both in functionality where possible, but also in exact typescript typing.
Specifics for Remote Config:
the primary modular remote-config types now use Firebase JS SDK names: LogLevel, FetchStatus, Value, and RemoteConfigSettings
RemoteConfig.settings is now typed as RemoteConfigSettings, which uses fetchTimeoutMillis rather than the older RNFB-style fetchTimeMillis on the modular surface
modular getAll() and getValue() now return SDK-aligned types: Record<string, Value> and Value
modular setLogLevel() now matches the Firebase JS SDK signature and returns void
the legacy modular helper exports fetchTimeMillis(), settings(), and lastFetchStatus() have been removed from @react-native-firebase/remote-config. Modular callers should read remoteConfig.fetchTimeMillis, remoteConfig.settings, and remoteConfig.lastFetchStatus from the RemoteConfig instance instead
modular fetch() has been removed. Modular callers should use fetchConfig(remoteConfig) instead; the RNFB-only modular expirationDurationSeconds helper is no longer part of the public modular API
modular setConfigSettings() and setDefaults() have been removed. Modular callers should use remoteConfig.settings = ... and remoteConfig.defaultConfig = ... on the RemoteConfig instance instead
modular onConfigUpdated() has been removed. Modular callers should use onConfigUpdate(remoteConfig, observer) instead
deprecated RemoteConfigValue.value and .source getters have been removed. Callers should use asString() and getSource() instead
Remove LastFetchStatus, ValueSource, ConfigSettings, ConfigDefaults, ConfigValue, ConfigValues, LastFetchStatusType, and RemoteConfigLogLevel from modular exports
- app-check: AppCheck has had all types moved to conform to firebase-js-sdk typescript types
Please see https://rnfirebase.io/migrating-to-v25 for help migrating if needed
react-native-firebase has a goal to be a drop-in replacement for firebase-js-sdk, with native extensions and performance. It has always worked that way at the javascript level but the typescript types have been divergent
We are fixing that as we refactor to typescript. Please bear with us as we get closer to our goal of react-native-firebase matching firebase-js-sdk both in functionality where possible, but also in exact typescript typing.
Specifics for AppCheck:
modular AppCheck now matches firebase-js-sdk (no instance methods); use modular functions like initializeAppCheck, getToken, getLimitedUseToken, setTokenAutoRefreshEnabled, onTokenChanged instead, matching firebase-js-sdk.
modular onTokenChanged callback result type changed from AppCheckListenerResult to AppCheckTokenResult
FirebaseApp is no longer exported from @react-native-firebase/app-check; import FirebaseApp from @react-native-firebase/app
modular type exports no longer include the old statics-based surface (e.g. AppCheckStatics), aligning closer to firebase-js-sdk
FirebaseAppCheckTypes is now a type-only export (no runtime export); update any value imports to import type
chore React-Native-Specific provider classes were moved into lib/providers.ts (exports updated)
- storage: migrate to TypeScript and match firebase-js-sdk API (#8824)
- sdks: firebase-ios-sdk 12.12.0+ requires Xcode 26.2+
Features
- ai: add AnyOfSchema support (e037945)
- ai: expose automatic function calling options (152704d)
- ai: expose LiveServerGoingAwayNotice (211db68)
- ai: expose ObjectSchemaRequest (6432f73)
- ai: expose TemplateChat APIs (1096452)
- ai: expose ThinkingLevel and ThinkingConfig.thinkingLevel (a064c23)
- ai: expose UsageMetadata token details (23d1095)
- ai: implement Firebase JS SDK 12.15.0 portable API parity (7eb76f3)
- ai: support chat function auto-calling (193df56)
- ai: support FunctionResponse parts (c2127a9)
- ai: support generateContent function auto-calling (35d1794)
- ai: support per-call request options (163e8c0)
- ai: support responseJsonSchema generation config (6b54462)
- ai: support streaming chat function auto-calling (6d65d5f)
- ai: support template chat function auto-calling (7f31d9c)
- analytics: add Expo config plugin for withoutAdIdSupport (#8969) (483c143)
- analytics: add support for googleAppMeasurementOnDeviceConversion in iOS Expo plugin (#9014) (6edab6f)
- android, pnv: add support for Firebase Phone Number Verification (#9045) (ae03f3f)
- firestore: add 'source' option to enable local cache firestore listeners (2ccd763)
Bug Fixes
- adopt firebase-android-sdk 34.13.0 (5fcaff1)
- adopt firebase-ios-sdk 12.13.0 (d488470)
- adopt firebase-js-sdk 12.12.1 (bfbf562)
- adopt firebase-js-sdk 12.13.0 (a536afc)
- analytics: cast item INDEX param to integer (16efa30)
- analytics: coerce all number params from js double to native integral (f913b77)
- analytics: success param type now boolean - never worked before, now works (ff53e9e)
- android: catch RejectedExecutionException on executor-backed Tasks (d70520d)
- database, android: remove RTDB listeners before shutting down executors (f527153)
- docs: workflow to generate+publish API docs, call same on publish (8222a96)
- firestore, android: catch RejectedExecutionException in sendOnSnapshotEvent (d0c6513)
- firestore: restore generic root type exports for
DocumentSnapshot,Transaction, andWriteBatch(#8997) (7cf9502) - sdks: firebase-ios-sdk (requires Xcode 26.2+), firebase-android-sdk 34.12.0, firebase-js-sdk 12.12.0 (c8c1fc1)
Miscellaneous Chores
- messaging: deprecate permissions APIs, use react-native-permissions or expo-notifications (#9053) (fc317fa)
Code Refactoring
- app-check: match AppCheck type with firebase-js-sdk (#8889) (71e8eb5)
- auth: migrate to TypeScript and bring auth closer in alignment with firebase-js-sdk API (#8991) (7cf7c1a)
- database: migrate to TypeScript (#8977) (fc8b839)
- installations: migrate to TypeScript (739a4ca)
- perf: migrate to TypeScript (4aedfe8)
- remote-config: migrate to TypeScript (#8972) (4625961)
- storage: migrate to TypeScript and match firebase-js-sdk API (#8824) (663b57c)