Skip to content

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.

  • 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.
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).

Breaking14
Removes deprecated type aliases; use the type directly.
Removes the deprecated StyleSheet.absoluteFill API.
StyleSheet.absoluteFill
Re-adds receiveTouches to RCTEventEmitter with a default no-op implementation to avoid breaking ecosystem libraries.
RCTEventEmitterreceiveTouches
Stub UIViewOperationQueue and remove its usages
UIViewOperationQueue
Removes AnimationBackendChoreographer and AndroidAnimationChoregrapher
AnimationBackendChoreographerAndroidAnimationChoregrapher
Remove deprecated CatalystInstanceImpl
CatalystInstanceImpl
Removed Paper-specific event dispatching methods.
Remove Deprecated ReactTextInputShadowNode
ReactTextInputShadowNode
Removes support for ReactZIndexedViewGroup on Android.
ReactZIndexedViewGroup
Fixes unsafe rawPointer access in Animated cloneMultiple.
AnimatedcloneMultiple
Moves the Jest preset to the new react-native/jest-preset package.
react-native/jest-preset
Stubs the UIImplementation class, which is unused in the new architecture.
UIImplementation
Stub out NativeViewHierarchyManager (Legacy Architecture)
NativeViewHierarchyManager
Makes ReactTextUpdate internal.
ReactTextUpdate
Security1
Bumps chromium-edge-launcher to ^0.3.0 to drop the rimraf dependency.
chromium-edge-launcherrimraf
Platform1
Drops support for end-of-life Node.js lines and old minors.
Deprecated4
Deprecates UIManagerHelper.getEventDispatcherForReactTag and UIManagerHelper.getEventDispatcher(ReactContext, UIManagerType Int); use getEventDispatcher.
UIManagerHelper.getEventDispatcherForReactTagUIManagerHelper.getEventDispatchergetEventDispatcher
Deprecated AccessibilityInfo.setAccessibilityFocus in favor of AccessibilityInfo.sendAccessibilityEvent
AccessibilityInfo.setAccessibilityFocusAccessibilityInfo.sendAccessibilityEvent
Deprecate NativeViewHierarchyOptimizer as part of Legacy Architecture cleanup
NativeViewHierarchyOptimizer
Deprecate RCTHostRuntimeDelegate and merge into RCTHostDelegate
RCTHostRuntimeDelegateRCTHostDelegate

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…