Background
reactfire ships several exports that are deprecated or dead but kept because removing them breaks consumers at load time, not just at compile time. v5 is the release that can drop them. Scope widened 2026-08-03 from the two checkOptions helpers to every deprecated export, so the breaking-removals work is tracked in one place.
To do in v5
Dead helpers (no internal call sites as of #740, which rewrote checkIdField to read options?.idField directly)
Deprecated option
Deprecated components (both marked @deprecated Use useSigninCheck instead, both only functional in experimental Suspense mode and warning at runtime otherwise)
Then
Notes
Context: #740, #741.
Background
reactfire ships several exports that are deprecated or dead but kept because removing them breaks consumers at load time, not just at compile time. v5 is the release that can drop them. Scope widened 2026-08-03 from the two
checkOptionshelpers to every deprecated export, so the breaking-removals work is tracked in one place.To do in v5
Dead helpers (no internal call sites as of #740, which rewrote
checkIdFieldto readoptions?.idFielddirectly)checkOptionsfromsrc/index.tscheckinitialDatafromsrc/index.tsDeprecated option
startWithValuefromReactFireOptions(src/index.ts), marked@deprecated use initialData instead. It sits in the interface fix: tighten ReactFireOptions generic types, remove T | any widening #740 tightens, so leaving it means v5 ships a deprecated field that was just given a stricter typeDeprecated components (both marked
@deprecated Use useSigninCheck instead, both only functional in experimental Suspense mode and warning at runtime otherwise)ClaimsCheck(src/auth.tsx:215)AuthCheck(src/auth.tsx:259)Then
npm run docs:fork) to drop the corresponding pagesinitialDataforstartWithValue,useSigninCheckfor both components)Notes
checkIdFieldstays; still used by the Firestore data hooks.checkinitialData's inferred return type isunknown(wasany). Harmless while unused, and another reason to retire it.ReactFireOptionsgenerics, its squash body becomes the changelog, and a removal buried under afix:title is how a break gets missed. Same release, separate PR.Context: #740, #741.