react-native-screens
4.30.0 · 13 Oct 2026MIT6.4M / weekRepositoryHomepagenpmAtom feed
124 stable releases, newest first, by release line. Notes are quoted as the maintainers published them.
- 4.x · latest line
4.30.0
13 Oct 2026On iOS 26,
edgesForExtendedLayout(which we used to lay out the screen below an opaque header) doesn't position the screen correctly in landscape and in modals. We partially worked around this with aSafeAreaView(#3231).On iPhone Duo (iOS 27) the same problem affects regular screens in portrait. The screen ended up partially under the header. Additionally, changes to internal hierarchy of the header introduced new bugs related to
Pressables.An opaque header's background doesn't reach the top of the screen and leaves a strip above it. When this was reported on the Apple Developer Forums, Apple didn't treat it as a bug and pointed to the guidance against custom bar backgrounds instead.
What's changed
This release focuses on iOS 27 and iPhone Duo support in Stack v4. On iOS 26+ screens are now laid out under an opaque navigation bar and inset through the safe area instead of UIKit's extended-layout frame and
useHeaderHeightreports the visible height of the bar while it is minimized. The newunstable_safeAreaEdgesprop onScreenStackItemlets a screen override the insets applied on iOS 26+, and opaque headers no longer minimize on scroll.Tabs.HostgainsprominentScreenKey(iOS 27+), backed byprominentTabIdentifier, so a chosen tab stays visible when the tab bar minimizes.iOS 26+: opaque headers in native stack (iOS)
Starting with iOS 26, Apple recommends against custom navigation bar backgrounds. Bars are transparent by default and content is meant to extend under them - see WWDC25: Build a UIKit app with the new design. Opaque headers (
headerTransparent: false) aren't deprecated, but UIKit's support for them is getting worse:On iOS 26,
edgesForExtendedLayout(which we used to lay out the screen below an opaque header) doesn't position the screen correctly in landscape and in modals. We partially worked around this with aSafeAreaView(#3231).On iPhone Duo (iOS 27) the same problem affects regular screens in portrait. The screen ended up partially under the header. Additionally, changes to internal hierarchy of the header introduced new bugs related to
Pressables.An opaque header's background doesn't reach the top of the screen and leaves a strip above it. When this was reported on the Apple Developer Forums, Apple didn't treat it as a bug and pointed to the guidance against custom bar backgrounds instead.
[!TIP]
We recommend following Apple's guidance and using a transparent header on iOS 26+.Improvements
iOS, Tabs: add
prominentScreenKeyso a chosen tab stays visible when the tab bar minimizesiOS, Stack v4: add
unstable_safeAreaEdgespropiOS, Stack v4: prevent header minimization for opaque header
Bugfixes
fix broken types being published for tabs host and screen
iOS, Stack v4: use native screen origin as shadow tree offset
iOS, Stack v4: lay out screens under an opaque navigation bar on iOS 26+
iOS, Stack v4: update header subview positions after navigation bar layout on iOS 26+
iOS, Stack v4: report minimized header height on iOS 27+ via
useHeaderHeightiOS, Tabs: don't drop user selection of UISearchTab on mount transactions
iOS, Tabs: apply async-loaded icons to tabs that overflow into More on the UITab path
iOS, Tabs: filter UIKit's didSelectTab: for programmatic selection while More is active
Android: prevent legacy and tabs containers from delaying child pressed state
4.29.0
9 Oct 2026iOS, Tabs: add
tabBarHiddenAnimationEnabledpropiOS, Tabs: add tabBarSidebarPreferredPlacement prop to choose between sidebar and tab bar on iOS 27
iOS, Tabs: Migrate to UITab API for iOS >= 26.1
What's changed
This release migrates the Tabs implementation on iOS 26.1+ to the
UITabAPI and extends theTabscomponent with several new props:tabBarHiddenAnimationEnabled,tabBarSidebarPreferredPlacement,automaticallyActivatesSearch(backed byUISearchTab) and custom drawable/symbol tab-bar icons with per-slot coloring and per-tab sizing. Header items in Stack v4 gain avisibilityPriorityprop on iOS.It also brings a number of fixes, most notably hardening of the Android fragment lifecycle (R8-safe restoration, orphaned fragment cleanup, no crash during instance teardown) and corrections to form sheet scroll view handling on iOS.
Improvements
iOS, Tabs: add
tabBarHiddenAnimationEnabledpropiOS, Tabs: add tabBarSidebarPreferredPlacement prop to choose between sidebar and tab bar on iOS 27
iOS, Tabs: Migrate to UITab API for iOS >= 26.1
iOS, Tabs: Use
UISearchTabwithautomaticallyActivatesSearchpropTabs: custom drawable/symbol tab-bar icons — per-slot coloring, per-tab size, indicator sizing, iOS fallback
iOS, Stack v4: Add
visibilityPriorityprop to header items
Bugfixes
iOS: skip form sheet scroll view frame correction once the screen is invalidated
iOS, Stack v4: stop form sheet from resizing a recycled scroll view
iOS, Stack v4: send dismiss event to js when pop animation ends
iOS, Tabs: prevent tab bar hidden animation on first render
iOS, Tabs: enforce consistent bottom accessory width
iOS, Tabs: Hide "Edit" button in sidebar for UITab API
iOS, Tabs: Reorder tab image configuration calls
Android: make fragment restoration R8-safe
Android: don't crash in setupFabric during instance teardown
Android: restore touch coordinates after covered screens rotate
Android, Stack v4: don't run header update for a screen detached from its stack
Android, Stack v4: remove orphaned fragments when ScreenContainer detaches
Android, Tabs: let touches through the strip a hidden tab bar leaves behind
4.28.0
14 Sep 2026Android, Tabs: handle forceLayout to ensure tab bar is properly laid out after configuration change
Android, Stack v4+: append SwipeRefreshLayout transition filler
Android, Tabs: use ViewIdGenerator to identify MenuItems instead of sequential ids
What's changed?
This is a small release that brings several fixes to the library.
Bugfixes
Android, Tabs: handle forceLayout to ensure tab bar is properly laid out after configuration change
Android, Stack v4+: append SwipeRefreshLayout transition filler
Android, Tabs: use ViewIdGenerator to identify MenuItems instead of sequential ids
Android, Stack v4: prevent adding preloaded and dismissed fragments when popping from opaque to translucent screen
Android, Tabs: expose tab item testID as viewIdResourceName
Example: Upgrade kotlin to 2.3.*
Android: use-after-free of RNSScreenRemovalListener registered as mounting override delegate
4.27.0
7 Aug 2026Android, Stack v5: support sending multiple updates via view command
Stack v5, iOS: Implement basic view commands for iOS header menu
experimental, iOS: add experimental ScrollToTopGuard component
What's changed
This release adds support for React Native 0.87, fixing a runtime crash on iOS in the process. It also introduces the experimental
ScrollToTopGuardcomponent and fully migrates theSplitcomponent implementation from Swift to Objective-C.Improvements
Android, Stack v5: support sending multiple updates via view command
Stack v5, iOS: Implement basic view commands for iOS header menu
experimental, iOS: add experimental ScrollToTopGuard component
ios, Stack v4: add subtitle support for UIMenu header button submenus
Bugfixes
Android: defensively guard against an unexpected menuItem Id
Android, Stack: don't add top inset to measured header height when it's disabled
iOS, Stack v4: fall back to inheriting orientation if it's not defined on the screen
iOS: Don't swap view controller's view during transition
iOS, Tabs: re-layout tab bar after async icon load to prevent label truncation on iOS 26
Android: Fix crash when header gets update during screen removal
Android, FormSheet v4: Cleanup inset and layout listener
JS: Prevent using ViewInstance type
iOS, Stack v5: use framework-style imports for React core headers
4.26.2
16 Jul 2026Reading the note…
4.26.1
14 Jul 2026Reading the note…
4.26.0
10 Jul 2026Reading the note…
4.25.2
21 May 2026Reading the note…
4.25.1
18 May 2026Reading the note…
4.25.0
11 May 2026Reading the note…
4.24.0
23 Feb 2026Reading the note…
4.23.0
6 Feb 2026Reading the note…
4.22.0
3 Feb 2026Reading the note…
4.21.0
2 Feb 2026Reading the note…
4.20.0
19 Jan 2026Reading the note…
4.19.0
15 Dec 2025Reading the note…
4.18.0
22 Oct 2025Reading the note…
4.17.1
15 Oct 2025Reading the note…
4.17.0
15 Oct 2025Reading the note…
4.16.0
4 Sep 2025Reading the note…
4.15.4
28 Aug 2025Reading the note…
4.15.3
26 Aug 2025Reading the note…
4.15.2
22 Aug 2025Reading the note…
4.15.1
21 Aug 2025Reading the note…
4.15.0
20 Aug 2025Reading the note…
4.14.1
14 Aug 2025Reading the note…
4.14.0
13 Aug 2025Reading the note…
4.13.1
17 Jul 2025Reading the note…
4.13.0
17 Jul 2025Reading the note…
4.12.0
16 Jul 2025Reading the note…
4.11.1
28 May 2025Reading the note…
4.11.0
27 May 2025Reading the note…
4.10.0
27 Mar 2025Reading the note…
4.9.2
12 Mar 2025Reading the note…
4.9.1
25 Feb 2025Reading the note…
4.9.0
21 Feb 2025Reading the note…
4.8.0
19 Feb 2025Reading the note…
4.7.0
18 Feb 2025Reading the note…
4.6.0
31 Jan 2025Reading the note…
4.5.0
10 Jan 2025Reading the note…
4.4.0
20 Dec 2024Reading the note…
4.3.0
21 Nov 2024Reading the note…
4.2.0
19 Nov 2024Reading the note…
4.1.0
14 Nov 2024Reading the note…
4.0.0
6 Nov 2024Reading the note…
- 3.x
3.37.0
7 Mar 2025Reading the note…
3.36.0
26 Feb 2025Reading the note…
3.35.0
25 Oct 2024Reading the note…
3.34.1
24 Oct 2024Reading the note…
3.34.0
5 Aug 2024Reading the note…