DEV Community

Cover image for React Native 0.80 Official: It's Out! What Really Changed?
Aroldo Goulart
Aroldo Goulart

Posted on

React Native 0.80 Official: It's Out! What Really Changed?

TL;DR 📌

React 19.1.0 update introduces native radial gradients, faster iOS builds, smaller Android APKs, frozen legacy architecture, deprecation warnings for deep imports, opt-in strict TypeScript API, official JSC support ending, and breaking changes with Kotlin 2.1.20, Java-to-Kotlin conversions, and ESLint updates.

Hey there, dev folks! 👋 The official React Native 0.80 version is finally out! After following the RCs, we now have the stable version with all confirmed features. Let's see what actually made it in, what changed since the RCs, and what you need to know before updating your projects.

Major Confirmed Features! 🚀

React 19.1.0 Has Arrived!

The final RN 0.80 version comes with fresh React 19.1.0 (0e11e6a28b)! This brings improvements like "owner stacks" to help identify which component caused a specific error (although there's a known bug if you use the @babel/plugin-transform-function-name plugin).

No More Deep Imports! 🚫

Those deep imports like import {Alert} from 'react-native/Libraries/Alert/Alert' are now officially deprecated (319ba0afd2, 9fc2a9b9e6). ESLint and the JS console will warn you when you do this (87809d9326). The idea is that in the future you'll only use direct imports from the root:

// Before - deep import
import {Alert} from 'react-native/Libraries/Alert/Alert';

// Now - root import
import {Alert} from 'react-native';
Enter fullscreen mode Exit fullscreen mode

Some APIs aren't available at the root and will actually disappear. This is intentional to reduce the surface area of the React Native API.

Strict TypeScript API (Optional) 🧐

There's a new option for more precise and safer TypeScript types (6ea24f7bb9)! These types are:

  • Generated directly from the source code (more accurate)
  • Restricted to React Native's index file (better defining the public API)

It's opt-in for now, so you can migrate when you're ready. If you use standard APIs, you probably won't need to change anything.

Legacy Architecture Officially Frozen ❄️

The New Architecture has been the default since version 0.76, and now the Legacy Architecture is officially frozen. This means:

  • No new bugfixes or features in the Legacy Architecture
  • No testing on the Legacy Architecture during the development of new versions
  • Warnings in DevTools for APIs that won't work in the New Architecture (706b6e878d)

You can still choose to use the Legacy Architecture, but it will be removed in the future.

iOS Prebuilt Dependencies (Experimental) ⚡

Tired of waiting for the first iOS build? Now there's an experimental option to use prebuilt dependencies that reduce initial build time by ~12%! To use it, just:

RCT_USE_RN_DEP=1 bundle exec pod install
Enter fullscreen mode Exit fullscreen mode

Or add to your Podfile:

ENV['RCT_USE_RN_DEP'] = '1'
Enter fullscreen mode Exit fullscreen mode

Slimmer Android APKs 📦

Thanks to Interprocedural Optimization (IPO) enabled for React Native (f107c28d2f) and Hermes (2da062f9d1), Android APKs are ~1MB smaller! And you don't need to do anything besides updating to version 0.80.

New App Screen Redesign 🎨

The template's initial screen has been moved to its own package (3cf0102007) and got a new look. This reduces initial boilerplate and improves the experience on larger screens.

Last Version with Official JSC Support ⚠️

This is the last version of React Native with official JavaScriptCore support. In the future, support will be provided via the community package @react-native-community/javascriptcore.

What Changed Since the RCs? 🔄

"exports" Field in package.json

The "exports" field was added to react-native's package.json to prepare for the stable JavaScript API. For now, it still exposes all subpaths by default, but this may affect how modules are resolved:

  • In Metro, platform-specific extensions won't be automatically expanded
  • In Jest, the ability to mock deep imports may be altered

Kotlin 2.1.20

The Kotlin version was updated to 2.1.20, bringing new preview language features that you can start using in your modules/components.

More Internal Classes and Kotlin Migrations

Several classes were marked as internal in Android, including StateWrapperImpl (9f941c50c9), ChoreographerCompat (f8b2956437), and ModuleDataCleaner (6fa1864d52). Additionally, more classes were migrated from Java to Kotlin, including the entire com.facebook.react.devsupport package (9da485b54c).

Breaking Changes You Need to Know 💥

JavaScript

  • ESLint Plugin React Hooks updated from v4.6.0 to v5.2.0 (4de592756b), which may generate new lint errors
  • Component names can no longer start with _ (underscore)

Android

  • StandardCharsets was removed (40b38d0a44) (use java.nio.charset.StandardCharsets)
  • Classes like ReactEditText (cac27d15be), NetworkModule (8726e26348), ReactTextInputManager (ab47834eb1) were converted to Kotlin
  • Several classes were marked as internal and should not be accessed directly

iOS

  • RCTFloorPixelValue was removed from RCTUtils.h (dc97df10a2)
  • BridgeModuleBatchDidComplete configuration helpers were deleted (cbad8aafa5)

Extra Confirmed Features 🌟

Radial Gradients

We finally have native support for radial gradients (1b45dc8033, a2409941c2, d7533dce1c)!

More CSS Colors

Support for hwb() notation (692b05e77d) and alpha in rgb() like rgb(R G B / A) (7441127040).

Native URLSearchParams

Native implementation of URLSearchParams (af1f1e4fe5) to handle query strings without needing extra libs.

Improved Accessibility

New accessibilityOrder prop for Android and iOS (8cf4d5b531), plus screenReaderFocusable for Android (4ce093154d) and accessibilityRespondsToUserInteraction for iOS (fd8a3456ca).

Pressable with onPressMove

Now the Pressable component exposes the onPressMove prop (6df938c72e) for more control during touch interactions.

How to Update? 🛠️

Use the React Native Upgrade Helper to see code changes between versions and follow the official upgrade documentation.

If you use Expo, React Native 0.80 will be supported in a canary version of the Expo SDK.

In Summary... 🎯

React Native 0.80 brings React 19.1, stabilizes the JavaScript API, officially freezes the Legacy Architecture, reduces Android APK size and iOS build time. It's a version focused on stability, performance, and preparation for the future without the Legacy Architecture.

Now it's time to update your projects and enjoy all these improvements! Happy coding! 🚀


Stay Tuned! 👀

This review was updated for the final 0.80 version, based on the official release post and the complete changelog.

Top comments (0)

Some comments may only be visible to logged-in visitors. Sign in to view all comments.