Upgrading react-native 0.84 to 0.85
Breaking0.84.1 → 0.85.3Breaking15Security1Platform1Deprecated4New22Changed34Fixed50Other28
BreakingUpgrade verdict
14 breaking changes and a platform requirement change and a security fix.
In plain terms
- Some old type names are gone, so code using them must switch to the real type.
- The old StyleSheet.absoluteFill helper is gone; use the replacement style instead.
- An Android event method was restored as a no-op so third-party libraries keep compiling.
- UIViewOperationQueue is now a stub and no longer used internally.
Must act Top 5 of 20 that need code or config changes
react-native publishes an official migration guide for version 0.85. It covers more than the release notes do.
Upgrade Helper ↗Node.js requirement changed in 0.85.0-nightly-20260115-caa1fb6a0: >= 20.19.4 → ^20.19.4 || ^22.13.0 || ^24.3.0 || >= 25.0.0.
Drops @jest/create-cache-key-function, babel-jest, jest-environment-node.
Installs 230 packages in all (was 311).
What you must change
Breaking14
Removes deprecated type aliases; use the type directly.
Removes the deprecated StyleSheet.absoluteFill API.
StyleSheet.absoluteFillRe-adds receiveTouches to RCTEventEmitter with a default no-op implementation to avoid breaking ecosystem libraries.
RCTEventEmitterreceiveTouchesStub UIViewOperationQueue and remove its usages
UIViewOperationQueueRemoves
AnimationBackendChoreographer and AndroidAnimationChoregrapherAnimationBackendChoreographerAndroidAnimationChoregrapherRemove deprecated CatalystInstanceImpl
CatalystInstanceImplRemoved Paper-specific event dispatching methods.
Remove Deprecated ReactTextInputShadowNode
ReactTextInputShadowNodeRemoves support for ReactZIndexedViewGroup on Android.
ReactZIndexedViewGroupFixes unsafe rawPointer access in Animated cloneMultiple.
AnimatedcloneMultipleMoves the Jest preset to the new react-native/jest-preset package.
react-native/jest-presetStubs the UIImplementation class, which is unused in the new architecture.
UIImplementationStub out NativeViewHierarchyManager (Legacy Architecture)
NativeViewHierarchyManagerMakes ReactTextUpdate internal.
ReactTextUpdateSecurity1
Bumps
chromium-edge-launcher to ^0.3.0 to drop the rimraf dependency.chromium-edge-launcherrimrafPlatform1
Drops support for end-of-life Node.js lines and old minors.
Deprecations to plan for
Deprecated4
Deprecates UIManagerHelper.getEventDispatcherForReactTag and UIManagerHelper.getEventDispatcher(ReactContext, UIManagerType Int); use getEventDispatcher.
UIManagerHelper.getEventDispatcherForReactTagUIManagerHelper.getEventDispatchergetEventDispatcherDeprecated
AccessibilityInfo.setAccessibilityFocus in favor of AccessibilityInfo.sendAccessibilityEventAccessibilityInfo.setAccessibilityFocusAccessibilityInfo.sendAccessibilityEventDeprecate NativeViewHierarchyOptimizer as part of Legacy Architecture cleanup
NativeViewHierarchyOptimizerDeprecate
RCTHostRuntimeDelegate and merge into RCTHostDelegateRCTHostRuntimeDelegateRCTHostDelegateAPI changes
Generated by DepDelta from published .d.ts files. Not mixed with prose notes.
- changed:
constructor Animated.AnimatedColor(valueIn?: RgbaValue | RgbaAnimatedValue | ColorValue | null, config?: AnimatedConfig | null) → constructor Animated.AnimatedColor(valueIn?: AnimatedColorInputValue, config?: AnimatedConfig | null) - added:
type Animated.AnimatedColorInputValue = RgbaValue | RgbaAnimatedValue | ColorValue | null | undefined
- added:
function useAnimatedColor(inputValue?: Animated.AnimatedColorInputValue, config?: Animated.AnimatedConfig | null | undefined): Animated.AnimatedColor
- added:
function useAnimatedValueXY(initialValue: { x: number; y: number }, config?: Animated.AnimatedConfig | null | undefined): Animated.ValueXY
- added:
property PressableProps.onPressMove?: null | ((event: GestureResponderEvent) => void) | undefined
- added:
property ScrollViewPropsAndroid.scrollsChildToFocus?: boolean | undefined
- removed:
const StyleSheet.absoluteFillObject: AbsoluteFillStyle
- changed:
function cancelAnimationFrame(handle: number): void → function cancelAnimationFrame(handle: number | null | undefined): void - changed:
function clearImmediate(handle: number): void → function clearImmediate(handle: number | null | undefined): void - changed:
function clearInterval(handle: number): void → function clearInterval(handle: number | null | undefined): void - changed:
function clearTimeout(handle: number): void → function clearTimeout(handle: number | null | undefined): void
- added:
export * from '../Libraries/Animated/useAnimatedColor' - added:
export * from '../Libraries/Animated/useAnimatedValueXY'
- added:
default useAnimatedColor - added:
function useAnimatedColor(inputValue?: InputValue, config?: null | undefined | AnimatedColorConfig): Animated.Color
- added:
default useAnimatedValueXY - added:
function useAnimatedValueXY(initialValue: { x: number; y: number }, config?: null | undefined | Animated.AnimatedConfig): Animated.ValueXY
- changed:
type LogData = Readonly<{ level: LogLevel; message: Message; category: Category; componentStack: ComponentStack; componentStackType: ComponentStackType | null; stack?: string… → type LogData = Readonly<{ level: LogLevel; message: Message; category: Category; componentStack: Stack; stack?: string }>
- removed:
property LogBoxLog.componentStackType: ComponentStackType - changed:
method LogBoxLog.getAvailableComponentStack(): ComponentStack → method LogBoxLog.getAvailableComponentStack(): Stack - changed:
method LogBoxLog.updateComponentStackStatus(error: null | undefined | Error, componentStack: null | undefined | ComponentStack, codeFrame: null | undefined | CodeFrame, callback?: (status: SymbolicationStatus) => void): void → method LogBoxLog.updateComponentStackStatus(error: null | undefined | Error, stack: null | undefined | Stack, codeFrame: null | undefined | CodeFrame, callback?: (status: SymbolicationStatus) => void): void - changed:
property LogBoxLog.componentStack: ComponentStack → property LogBoxLog.componentStack: Stack - changed:
property LogBoxLog.symbolicated: Readonly<{ error: null; stack: null; status: 'NONE' }> | Readonly<{ error: null; stack: null; status: 'PENDING' }> | Readonly<{ error: null; stack: Stack; status: 'COMPLETE' }> | Readonly<{ error: Error; stack: null; status: 'FAILED' }> → property LogBoxLog.symbolicated: SymbolicationState - changed:
property LogBoxLog.symbolicatedComponentStack: Readonly<{ error: null; componentStack: null; status: 'NONE' }> | Readonly<{ error: null; componentStack: null; status: 'PENDING' }> | Readonly<{ error: null; componentStack: ComponentStack; status: 'COMPLETE' }> | Readonly<{ error: Error; componentStack: null; status: 'FAILED' }> → property LogBoxLog.symbolicatedComponentStack: SymbolicationState - changed:
type LogBoxLogData = Readonly<{ level: LogLevel; type?: string | undefined; message: Message; stack: Stack; category: string; componentStackType?: ComponentStackType; componentStac… → type LogBoxLogData = Readonly<{ level: LogLevel; type?: string | undefined; message: Message; stack: Stack; category: string; componentStack: Stack; codeFrame?: CodeFrame | undefin…
- removed:
function hasComponentStack(args: ReadonlyArray<unknown>): boolean - removed:
type ComponentStack = ReadonlyArray<CodeFrame> - removed:
type ComponentStackType = 'legacy' | 'stack' - changed:
function parseComponentStack(message: string): { type: ComponentStackType; stack: ComponentStack } → function parseComponentStack(message: string): { stack: Stack } - changed:
function parseLogBoxLog(args: ReadonlyArray<unknown>): { componentStack: ComponentStack; componentStackType: ComponentStackType; category: Category; message: Message } → function parseLogBoxLog(args: ReadonlyArray<unknown>): { componentStack: Stack; category: Category; message: Message }
- removed:
const absoluteFillObject: AbsoluteFillStyle - removed:
type absoluteFillObject = typeof absoluteFillObject
- added:
const NativeSelectableText: HostComponent<NativeTextProps> - added:
type NativeSelectableText = typeof NativeSelectableText
- removed:
export { EventSubscription } from './Libraries/EventEmitter/NativeEventEmitter' - added:
export { EventSubscription } from './Libraries/vendor/emitter/EventEmitter' - added:
export { IEventEmitter } from './Libraries/vendor/emitter/EventEmitter' - added:
export { default as EventEmitter } from './Libraries/vendor/emitter/EventEmitter' - added:
export { default as useAnimatedColor } from './Libraries/Animated/useAnimatedColor' - added:
export { default as useAnimatedValueXY } from './Libraries/Animated/useAnimatedValueXY'
- added:
const $$VirtualViewExperimentalNativeComponent: HostComponent<VirtualViewExperimentalNativeProps> - added:
default $$VirtualViewExperimentalNativeComponent - added:
type $$VirtualViewExperimentalNativeComponent = typeof $$VirtualViewExperimentalNativeComponent - added:
type NativeModeChangeEvent = Readonly<{ mode: Int32; targetRect: Readonly<{ x: Double; y: Double; width: Double; height: Double }>; thresholdRect: Readonly<{ x: Double; y: Double; width: D…