Skip to main content

React Native 0.85 - New Animation Backend, TextInput Selection Data, New Jest Preset Package

· 6 min read
Alan Lee
Alan Lee
Software Engineer @ Meta
Calix Tang
Calix Tang
Software Engineer @ Meta
Mathieu Acthernoene
Mathieu Acthernoene
Software Engineer @ Expo
Gabriel Donadel Dall'Agnol
Gabriel Donadel Dall'Agnol
Software Engineer @ Expo
Bartłomiej Błoniarz
Bartłomiej Błoniarz
Software Engineer @ Software Mansion
Dawid Małecki
Dawid Małecki
Software Engineer @ Software Mansion
Zeya Peng
Zeya Peng
Software Engineer @ Meta
Samuel Susla
Samuel Susla
Software Engineer @ Meta

Today we are excited to release React Native 0.85!

This release includes the New Animation Backend, adds selection data to TextInput onChange events, moves the Jest preset to a dedicated package, and includes many other improvements and fixes.

Highlights

Breaking Changes

Highlights

New Animation Backend

React Native 0.85 introduces the new Shared Animation Backend, built in collaboration with Software Mansion.

This is a new internal engine that powers how animations are applied under the hood for both Animated and Reanimated. By moving the main animation update logic to React Native core, Reanimated is able to land performance improvements that weren't possible before, and can ensure that the update reconciliation process is properly tested and will remain stable with future RN updates.

In Animated, you can now animate layout props with native driver (the limitation once stated here no longer applies).

iOSAndroid
Animation Backend demo on iOSAnimation Backend demo on Android

You can find more examples under react-native/packages/rn-tester/js/examples/AnimationBackend/.

To opt in, you can enable the experimental channel of React Native as described in this page.

info

This experimental feature will only be available starting from React Native 0.85.1, which will be released in the immediate future.

How to animate layout props

With the new animation backend, you'll be able to animate Flexbox and position props with native driver in Animated.

import {
Animated,
View,
Button,
useAnimatedValue,
} from 'react-native';
import {allowStyleProp} from 'react-native/Libraries/Animated/NativeAnimatedAllowlist';

allowStyleProp('width');

function MyComponent() {
const width = useAnimatedValue(100);

const toggle = () => {
Animated.timing(width, {
toValue: 300,
duration: 500,
useNativeDriver: true,
}).start();
};

return (
<>
<Animated.View
style={{width, height: 100, backgroundColor: 'blue'}}
/>
<Button title="Expand" onPress={toggle} />
</>
);
}

React Native DevTools Improvements

React Native DevTools received several improvements in this release:

  • Multiple CDP connections: React Native now supports multiple simultaneous Chrome DevTools Protocol connections, enabling clients such as React Native DevTools, VS Code, and AI agents to connect at the same time. This unlocks richer, composable tooling workflows without unexpectedly ending sessions.
  • Native tabs on macOS: We've updated the desktop app to compile for macOS 26, and have also enabled system-level tab handling for power users. Access via Window > Merge All Windows, when multiple DevTools windows are open.
DevTools native tabs on macOS
  • Request payload previews: After being disabled due to a regression, request body previews in the Network Panel are now restored on Android.

Metro TLS Support

The Metro dev server can now accept a TLS configuration object, enabling HTTPS (and WSS for Fast Refresh) during development — useful for testing APIs that enforce secure connections.

Configure it in metro.config.js:

metro.config.js
const fs = require('fs');

config.server.tls = {
ca: fs.readFileSync('path/to/ca'),
cert: fs.readFileSync('path/to/cert'),
key: fs.readFileSync('path/to/key'),
};

For local development, mkcert is a simple way to generate a locally-trusted certificate without browser warnings.

Breaking Changes

Jest Preset Moved to New Package

React Native's Jest preset has been extracted from react-native into the new @react-native/jest-preset, reducing core package size and giving projects more flexibility in their testing setup.

Update your jest.config.js with a one-line change:

jest.config.js
- preset: 'react-native',
+ preset: '@react-native/jest-preset',

Dropped Support for EOL Node.js Versions

React Native 0.85 drops support for end-of-life (EOL) Node.js versions (v21, v23) and releases before 20.19.4. Please ensure you are running a supported version of Node.js before upgrading.

StyleSheet.absoluteFillObject Removed

The deprecated StyleSheet.absoluteFillObject API has been removed. Use StyleSheet.absoluteFill or define your own absolute positioning styles instead.

- const styles = StyleSheet.absoluteFillObject;
+ const styles = StyleSheet.absoluteFill;

Other Breaking Changes

General

  • Pressable no longer unmounts event listeners in hidden Activity.
  • Removed deprecated C++ type aliases for ShadowNode::Shared, ShadowNode::Weak, ShadowNode::Unshared, ShadowNode::ListOfWeak, ShadowNode::ListOfShared, SharedImageManager and ContextContainer::Shared — Those were not in use and consumer libraries should use the type directly.

Android

  • We re-added receiveTouches to RCTEventEmitter with default no-op. This is a fix to reduce breaking changes for libraries that haven't migrated away from this method yet.
  • ReactTextUpdate is now internal and should not be accessed publicly directly.
  • Multiple classes deprecated or removed as legacy architecture cleanup:
    • ReactZIndexedViewGroup is now deprecated.
    • UIManagerHelper is now deprecated.
    • CatalystInstanceImpl has been removed (it was deprecated).
    • NativeViewHierarchyManager has been fully stubbed out.

iOS

  • The RCTHostRuntimeDelegate is now deprecated and merged into RCTHostDelegate.
  • Fixed duplicate symbol error when using React.XCFramework (via fmt bump to 12.1.0).

Other Changes

  • Metro bumped to ^0.84.0.
  • React updated to consume Hermes 250829098.0.10.
  • Yoga: YogaNode migrated to Kotlin on Android.
  • Accessibility: Deprecated AccessibilityInfo.setAccessibilityFocus in favor of AccessibilityInfo.sendAccessibilityEvent.
  • TypeScript: Multiple utility type transformations ($Values, mixed, $ReadOnly, $ReadOnlyArray).
  • Android Build: Allow specifying dev server IP via reactNativeDevServerIp Gradle property.
  • iOS Build: Added support for clang virtual file system in React.XCFramework.

Acknowledgements

React Native 0.85 contains over 604 commits from 58 contributors. Thanks for all your hard work!

We want to send a special thank you to those community members that shipped significant contributions in this release.

Moreover, we also want to thank the additional authors that worked on documenting features in this release post:

Upgrade to 0.85

info

0.85 is now the latest stable version of React Native and 0.82.x moves to unsupported. For more information see React Native's support policy.

Upgrading

Please use the React Native Upgrade Helper to view code changes between React Native versions for existing projects, in addition to the Upgrading docs.

Create a new project

npx @react-native-community/cli@latest init MyProject --version latest

Expo

If you use Expo, the next SDK, SDK 56, will include React Native 0.85.