npm / react-native-screens
react-native-screens
What changed in react-native-screens 4, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-18.
28 breaking75 new APIs and options24 behavior and defaults1 tooling82 fixes and other
See which of these apply to your code, ranked, in your agent:
npx @unstale/cli initreact-native-screens 4210 changes
Breaking changes 28
Opaque headers no longer minimize on scroll.
Prevents use of the ViewInstance type.
In Android Stack v4, consume*Inset props now default to true.
Native Stack v5 header items support menus, press handlers, and toggling items with managed flow; their label and key fields were renamed to title and id.
The minimum supported React Native version is now 0.84, so projects using older versions are no longer supported.
This version supports React Native 0.84 and later.
The web SafeAreaView export changes from a default export to a named export.
The controlledBottomTabs option was removed.
The controlNavigationStateInJS option was removed.
The Tabs API no longer accepts the freezeContents prop.
The library no longer supports the legacy architecture and will most likely fail to build when used with it.
The Tabs event onTabChange was renamed to onTabSelected; update event handlers to use the new name.
The Tabs API no longer accepts the placeholder prop.
A minimum required React Native version is now defined in peerDependencies, affecting which React Native versions satisfy the package dependency.
The Tabs key was renamed from tabKey to screenKey; update code using the old name.
Tabs scrollEdgeEffects moved from TabsScreen to ScrollViewMarker, and iOS now forwards the setting to the inner screen in modals.
TabsAccessory was renamed to TabsBottomAccessory; update references to the renamed component.
Stack v5 on Android can prevent native dismiss support.
The experimental name maxLifecycleState is changed to activityMode.
The experimental component is renamed to StackHost.
Experimental tabs-related components are exported under the Tabs object, dropping the Bottom* prefix.
Changes the default bottom tabs implementation to managed.
Removes the long-deprecated native-stack v5 code from the repository.
Drops support for React Native 0.79 starting with this release.
This property has moved to the menu button item.
The header items API renames label to title.
Android native code and dependencies related to props deprecated by edge-to-edge enforcement were removed.
An experimental submodule is available, and SafeAreaView has moved there from /private.
New APIs and options 75
Tabs.Host gains prominentScreenKey on iOS 27+ so a chosen tab stays visible when the tab bar minimizes.
ScreenStackItem gains unstable_safeAreaEdges, letting a screen override the insets applied on iOS 26+.
Adds a Tabs prop backed by UISearchTab.
Adds custom drawable or symbol tab-bar icons with per-slot coloring, per-tab sizing, indicator sizing, and an iOS fallback.
Adds a Tabs prop to control whether hiding the tab bar is animated.
Adds a Tabs prop to choose between a sidebar and tab bar on iOS 27.
Adds a visibilityPriority prop to Stack v4 header items on iOS.
Exposes the tab item testID as viewIdResourceName.
Adds basic view commands for the iOS Stack v5 header menu.
Android Stack v5 supports sending multiple updates via a view command.
Introduces the experimental iOS ScrollToTopGuard component.
Adds subtitle support to UIMenu header button submenus in Stack v4 on iOS.
The Tabs actionOrigin type adds the programmatic-native variant.
iOS Tabs adds the bottomAccessoryHidden prop.
Nested container integration introduces Container and ContainerItem across Android and iOS Stack and Tabs.
Android Stack v4 adds disable*InsetApplication props.
The standalone FormSheet adds support for fitToContents on iOS and Android.
An experimental standalone FormSheet native component is available on Android and iOS.
The standalone iOS FormSheet adds lifecycle events.
The standalone Android FormSheet adds support for fractional detents.
The Android Native Stack v5 adds support for header scroll flags.
The standalone iOS FormSheet can be configured with an initial detent index.
Native Stack v5 menuItems add keepsMenuPresented.
The standalone iOS FormSheet adds support for largestUndimmedDetentIndex.
Android Native Stack v5 supports menuTitle (headerTitle) in submenus.
The standalone iOS FormSheet adds support for nativeContainerStyle.
The standalone iOS FormSheet emits an event when its detent changes.
The standalone iOS FormSheet adds an event for prevented native dismissal.
The standalone iOS FormSheet adds the preferredCornerRadius prop.
The standalone FormSheet adds support for controlling grabber visibility.
The standalone iOS FormSheet adds support for expanding when scrolled to the edge.
The standalone iOS FormSheet adds support for preventing native dismissal.
Android Native Stack v5 exposes showAsAction for toolbar menu items.
Split adds a colorScheme prop.
TabSelectionPreventedEvent is re-exported from the package root.
Native Stack v5 adds toolbar menu items, including icons, tinting, text props, groups, nested menus, and disabled items.
Android Stack v5 adds basic header support, including header configuration, custom subviews, and a customizable back button.
Tabs now support preventNativeSelection.
Tabs on Android and iOS partially implement RFC-1028.
An experimental ScrollViewMarker component is available.
Tabs on Android now support selectedIcon.
iOS Stack v4 now allows customization of the header background color.
Android Stack v4 adds a prop for opting out of applying an inset to the header.
Tabs on Android now support state-driven appearance.
Tabs on Android add a prop to configure whether the tab bar respects IME insets.
The Tabs operation model adds TabSelectionRejectedEvent and supports rejecting stale state updates.
A usesStableTabsApi compatibility flag was added for the Tabs API.
Menu icons now support imageSource.
An opt-out flag is available for interactions during transitions on iOS 26.
The Split API adds a show(column) command.
Menu icons now support templateSource.
The Split API adds the topColumnForCollapsing prop.
Added a skeleton native implementation for Stack v5.
Added iOS support for xcassets.
Adds accessibilityLabel to BottomTabsScreen.
Adds testId to BottomTabsScreen for identifying it in tests.
Adds accessibilityLabel to Item.
Adds testId to Item for identifying it in tests.
Tabs now allow styling the full tabs background color.
Adds bottomAccessory support for native tabs on iOS.
Adds primaryBackgroundStyle support to iOS SplitView.
Adds the snapshotAfterUpdates property to RNSScreenView.
Adds special effects support for bottom tabs on Android.
Adds an option to change the number of SplitView columns dynamically on iOS.
Adds support for synchronous state updates on Fabric for native stack, behind a feature flag.
Adds a prop to hide the tab bar on iOS and Android.
Adds an experimental prop to override user interface style for iOS Stack and Tabs.
Header bar button items now have a type.
The systemDefault option was added to the iOS SearchBar autoCapitalize prop.
autoFocus was added to the Android Fabric SearchBar spec.
Support was added for glassy form sheets on iOS 26.
An experimental safe area component is available for iOS and Android, handling native headers, bottom tabs, and other safe area cases.
iOS headers now support UIBarButtonItem items.
Support was added for scroll edge effects.
Support was added for UITabBarController.Mode for the iPad sidebar feature.
Behavior and default changes 24
Migrates the iOS Tabs implementation to the UITab API on iOS 26.1 and later.
Changes the default value from the string 'true' to the boolean true.
Removes the explicit React Native peer dependency version from package configuration to improve dependency compatibility.
Tabs integrate with ScrollViewMarker for special effects on iOS and Android.
The Tabs API is now stable, so developers can use it without treating it as experimental.
Android FormSheet coordinates animations from different sources and prioritizes keyboard animation over content resize animation.
Tabs on iOS and Android now handle colorScheme for dark mode.
iOS Tabs add proper support for moreNavigationController; its behavior is also decoupled from navigation state.
Bottom tabs now have native RTL support on iOS and Android.
The iOS Stack v5 implementation was aligned with RFC 753.
This iOS Stack v4 option is enabled by default.
Android Stack v5 allows nested containers to be popped via JS.
The default ScreenStackHeaderSubview type on Android is LEFT.
Nested Stack v5 uses the parent container's childFragmentManager.
Stack v5 allows native navigation in nested stacks.
Added handling for preloading screens in Stack v5 on Android.
Android formSheet now supports dynamic content size when fitToContents is selected, and fixes height changes and Y translation when overflowing the screen.
iOS SafeAreaView uses synchronous state updates.
The bottom tabs icons API was refactored, changing how developers configure tab icons.
Support was added for interactiveContentPopGesture on iOS 26.
The hideNavigationBar prop can use native behavior.
The obscureBackground prop can use native behavior.
SplitView updates are synchronous.
The approach for loading external sources for Android tab icons was updated.
Tooling 1
The package's types now support TypeScript's exactOptionalPropertyTypes option.
Fixes and other changes 82
Applies async-loaded icons to tabs that overflow into More on the UITab path.
Prevents legacy and tabs containers on Android from delaying child pressed state.
Updates header subview positions after navigation bar layout on iOS 26+.
Uses the native screen origin as the shadow tree offset.
On iOS 26+, screens are laid out under an opaque navigation bar and inset through the safe area instead of using UIKit's extended-layout frame.
Filters UIKit's didSelectTab: for programmatic selection while More is active.
Fixes broken published types for the tabs host and screen.
Prevents user selection of UISearchTab from being dropped on mount transactions.
On iOS 27+, useHeaderHeight reports the visible height of the bar while it is minimized.
Enforces consistent width for the bottom accessory.
Skips header updates for a screen detached from its stack.
Sends the dismiss event to JavaScript when the pop animation ends.
Hides the Edit button in the sidebar when using the UITab API.
Skips form sheet scroll view frame correction after a screen is invalidated and prevents resizing a recycled scroll view.
Makes Android fragment restoration R8-safe.
Allows touches to pass through the strip left behind by a hidden tab bar.
Prevents a crash in setupFabric during instance teardown.
Removes orphaned fragments when ScreenContainer detaches.
Prevents the tab bar hidden animation from running on first render.
Restores touch coordinates after covered screens rotate.
Uses ViewIdGenerator rather than sequential IDs to identify tab MenuItems.
Prevents adding preloaded and dismissed fragments when popping from an opaque to a translucent screen in Stack v4.
Fixes a use-after-free involving RNSScreenRemovalListener registered as a mounting override delegate.
Appends a transition filler for SwipeRefreshLayout in Stack v4+.
Handles forceLayout so the tab bar is properly laid out after a configuration change.
Android Stack no longer adds a top inset to measured header height when the inset is disabled.
Fixes an Android crash when a header is updated during screen removal.
Stack v4 on iOS falls back to inheriting orientation when it is not defined on the screen.
Adds support for React Native 0.87 and fixes an iOS runtime crash.
Re-layouts the tab bar after an asynchronous icon load to prevent label truncation on iOS 26.
Prevents swapping a view controller's view during a transition.
Fixes transition finalization to prevent screens from unmounting during fast navigation in Stack v5 on Android.
Fixes a potential Android crash with container state restoration in Tabs.
Fixes ShadowState inside SplitView columns after a transition on iOS.
The standalone iOS FormSheet emits onDismiss when dismissal is initiated from JavaScript.
Touch handling for Pressables in transparent iOS headers is fixed.
On Android, the shadow update includes keyboard translationY.
On Android, appearance updates are triggered when the user selects a tab.
Animations coming from different sources are synchronized.
Tabs now handle reattachment to the window.
On iOS Stack v4, tapping a formSheet backdrop now calls the usePreventRemove callback.
On iOS Stack v4, the usePreventRemove callback is now called when tapping a formSheet backdrop.
Applies a workaround for controlling insets on Android BottomSheetBehavior.
Fixes keyboard navigation focus for form sheets on Android Stack v4.
Fixes the lifecycle of the prevent native dismiss callback on Android Stack v5.
On iOS Tabs, the scroll view behavior override is deferred until props are set.
The Transition API now works with Stack v5 on Android.
On Android, the keyboard is dismissed when a FormSheet BottomSheet is presented.
iOS now respects all screen orientations on iPad.
Stack v5 updates its stack model after a native pop.
Fixes updateSelectedTab removing fragments it does not own.
Added compression resistance to iOS Stack button items.
Fixed a Fabric Android crash when sending a key event to open the dev menu.
Fixed Android FormSheet constraint calculations based on screen size.
Accounted for the initial translationY in the default Android FormSheet animation.
Fixed FullWindowOverlay not mounting when fullScreenModal is presented.
Fixed possible Mac Catalyst build issues caused by implicit conversions.
Fixed modal content flicker during the enter transition on iPad.
Removed code that disabled interaction for modals.
Fixed Screens reattaching incorrectly when swiping back quickly on iOS.
Requests a layout pass after loading an image from source in iOS Tabs.
Fixed tvOS compilation in split-view.
Fixes an iOS Stack issue where a centered header subview was not visible or was misaligned.
Fixes library typing for React 19.
Fixes an ill-formed program caused by using static_assert(false).
Restores gestureResponseDistance support on iOS 26.
ScreenStackItem now considers the default value for headerConfig.hidden.
ScreenStackItem now considers the default value for stackPresentation.
iOS menu items now accept multiple attributes.
Prevents freezing from unmounting native components.
Tab title font configuration now uses the default UITabBarItem title font as its base.
Fixes tabBarTintColor behavior on iPadOS.
Fixes handling of variable icons in header items.
Fixes a build error in release mode caused by imageLoader being undefined.
Content pop with horizontal scrolling is fixed.
iOS 26 Stack v4 content rendering under UINavigationBar is fixed.
The fullScreenSwipeEnabled prop is available again on iOS.
Defaults for obscureBackground and hideNavigationBar are now consistent in iOS Stack v4.
Defaults for obscureBackground and hideNavigationBar are now consistent in iOS Stack v4.
Custom screen swipe transitions are fixed.
Canceling search on Android is fixed.
Dismissing transparent modals no longer has a delay.