React Native 0.85 - New Animation Backend, New Jest Preset Package
Today we are excited to release React Native 0.85!
This release includes the New Animation Backend, moves the Jest preset to a dedicated package, and includes many other improvements and fixes.
Highlights
Breaking Changes
- Jest Preset Moved to New Package
- Dropped Support for EOL Node.js Versions
StyleSheet.absoluteFillObjectRemoved- Other 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).
| iOS | 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.
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,
Button,
View,
useAnimatedValue,
} from 'react-native';
function MyComponent() {
const width = useAnimatedValue(100);
const toggle = () => {
Animated.timing(width, {
toValue: 300,
duration: 500,
useNativeDriver: true,
}).start();
};
return (
<View style={{flex: 1}}>
<Animated.View
style={{width, height: 100, backgroundColor: 'blue'}}
/>
<Button title="Expand" onPress={toggle} />
</View>
);
}
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.
- 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:
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:
- 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
Pressableno longer unmounts event listeners in hiddenActivity.- Removed deprecated C++ type aliases for
ShadowNode::Shared,ShadowNode::Weak,ShadowNode::Unshared,ShadowNode::ListOfWeak,ShadowNode::ListOfShared,SharedImageManagerandContextContainer::Shared— Those were not in use and consumer libraries should use the type directly.
Android
- We re-added
receiveTouchestoRCTEventEmitterwith default no-op. This is a fix to reduce breaking changes for libraries that haven't migrated away from this method yet. ReactTextUpdateis now internal and should not be accessed publicly directly.- Multiple classes deprecated or removed as legacy architecture cleanup:
ReactZIndexedViewGroupis now deprecated.UIManagerHelperis now deprecated.CatalystInstanceImplhas been removed (it was deprecated).NativeViewHierarchyManagerhas been fully stubbed out.
iOS
- The
RCTHostRuntimeDelegateis now deprecated and merged intoRCTHostDelegate. - Fixed duplicate symbol error when using
React.XCFramework(viafmtbump to 12.1.0).
Other Changes
- Metro bumped to
^0.84.0. - React updated to consume Hermes
250829098.0.10. - Yoga:
YogaNodemigrated to Kotlin on Android. - Accessibility: Deprecated
AccessibilityInfo.setAccessibilityFocusin favor ofAccessibilityInfo.sendAccessibilityEvent. - TypeScript: Multiple utility type transformations (
$Values,mixed,$ReadOnly,$ReadOnlyArray). - Android Build: Allow specifying dev server IP via
reactNativeDevServerIpGradle 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.
- Zeya Peng, Bartłomiej Błoniarz, and Dawid Małecki for the Animated Backend
- Vitali Zaidman for Metro TLS
- Moti Zilberman for Multiple CDP Connections
- Phil Pluckthun and Alex Hunt for the Jest Preset migration
Moreover, we also want to thank the additional authors that worked on documenting features in this release post:
Upgrade to 0.85
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.









