NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #4195 most downloaded on npm
Native stack navigator using react-native-screens
Last release 2 days ago
02 Oct 2026
Ships fairly regularly
a new release about every 2 weeks
Some releases are documented
notes for 35 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
7 years old
333 releases · first in 2019
@react-navigation/native-stack@8.0.0-alpha.58
@react-navigation/native-stack@8.0.0-alpha.58
support | undefined to better work with exactOptionalPropertyTypes ( a9f81b8 ) - by @satya164
NavigationMetaContext as it's nowOne column per quarter.
preserve navigator state types in navigation helpers ( 34a1051 ) - by @
let native-stack collapse the mobile address bar on scroll ( #13237 ) ( 2a1eacd ) - by @rjmreis
measure frame size in layout effect ( #13251 ) ( 5bc7014 ) - by @satya164
NavigationMetaContext as it's nowdefer rendering lazy content with useDeferredValue ( fd840cf ) - by @satya164
-const { NavigationContent } = useNavigationBuilder(Router, props);
+const { render } = useNavigationBuilder(Router, props);
-return (
- <NavigationContent>
- <NavigatorView />
- </NavigationContent>
+return render(
+ <NavigatorView />
);custom navigators now must use the returned render function from
useNavigationBuilder instead of the NavigationContent.
the previous API isn't feasible while maintaining concurrent safety.
improve memoization for material top tabs ( f7fbf6f ) - by @
-const { NavigationContent } = useNavigationBuilder(Router, props);
+const { render } = useNavigationBuilder(Router, props);
-return (
- <NavigationContent>
- <NavigatorView />
- </NavigationContent>
+return render(
+ <NavigatorView />
);custom navigators now must use the returned render function from
useNavigationBuilder instead of the NavigationContent.
the previous API isn't feasible while maintaining concurrent safety.
read latest state to determine pop to top ( ca99c68 ) - by @satya164
-const { NavigationContent } = useNavigationBuilder(Router, props);
+const { render } = useNavigationBuilder(Router, props);
-return (
- <NavigationContent>
- <NavigatorView />
- </NavigationContent>
+return render(
+ <NavigatorView />
);custom navigators now must use the returned render function from
useNavigationBuilder instead of the NavigationContent.
the previous API isn't feasible while maintaining concurrent safety.
remove usage of deprecated APIs and prepare for strict api (060c263) - by @satya164
-const { NavigationContent } = useNavigationBuilder(Router, props);
+const { render } = useNavigationBuilder(Router, props);
-return (
- <NavigationContent>
- <NavigatorView />
- </NavigationContent>
+return render(
+ <NavigatorView />
);custom navigators now must use the returned render function from
useNavigationBuilder instead of the NavigationContent.
the previous API isn't feasible while maintaining concurrent safety.
remove usage of deprecated APIs and prepare for strict api (060c263) - by @satya164
NavigationMetaContext as it's nowremove usage of deprecated APIs and prepare for strict api (060c263) - by @satya164
remove usage of deprecated APIs and prepare for strict api (060c263) - by @satya164
@react-navigation/native@8.0.0-alpha.46
@react-navigation/native@8.0.0-alpha.46
refactor!: use a render callback instead of NavigationContent for custom navigators ( #13238 ) ( c9c119e ), closes #13238 - by @satya164
-const { NavigationContent } = useNavigationBuilder(Router, props);
+const { render } = useNavigationBuilder(Router, props);
-return (
- <NavigationContent>
- <NavigatorView />
- </NavigationContent>
+return render(
+ <NavigatorView />
);custom navigators now must use the returned render function from
useNavigationBuilder instead of the NavigationContent.
the previous API isn't feasible while maintaining concurrent safety.
account for disabled top inset for header height (e15eaa6) - by @
account for disabled top inset for header height (9347bc9) - by @
fix modal detection being incorrect on Android (9b67671) - by @satya164
remove usage of deprecated APIs and prepare for strict api (060c263) - by @satya164
ensure resetRoot always resets the root navigator's state (423482f) - by @satya164
add a PlatformIcon component to elements (fba9fd3) - by @satya164
exclude unsupported platforms for native components (af626a6) - by @satya164
action.source is handledpreviously, source was only used for param updates, or used in
specific actions like replace and pop only when target was
specified. in most cases, focused screen was treated as the calling
screen.
this changes the behavior to handle action.source more
consistently throughout:
canGoBack checks whether we can go back from the screen where it wasgoBack and pop now go back from the screen where it was called,popTo now searches downward from the calling scree instead ofnavigate now removes active screens after the calling screen insteadreplace now replaces the screen it was called from instead ofwhen dispatching navigation actions from a screen, the source key is
added to the action automatically, so this affects behavior of all
navigations from screens (with navigation prop or useNavigation).
actions dispatched from the ref, or navigation objects from navigators
don't have a source unless explicitly added, so they treat the focused
screen as the calling screen.
internally, source is also rewritten when bubbling actions up when
possible, so a router handling an action can see if an action belong to
a screen in its navigation state.
remove overload from navigate action (#13150) (a876c49) - by @satya164
cleanup stale listener after failed browser navigation (51c301c) - by @satya164
use aria-current for drawer links on web (cb1c4cc), closes #9418 #13138 #13112 - by @satya164
-const { NavigationContent } = useNavigationBuilder(Router, props);
+const { render } = useNavigationBuilder(Router, props);
-return (
- <NavigationContent>
- <NavigatorView />
- </NavigationContent>
+return render(
+ <NavigatorView />
);custom navigators now must use the returned render function from
useNavigationBuilder instead of the NavigationContent.
the previous API isn't feasible while maintaining concurrent safety.
handle interrupted rollback when browser back is prevented (f641a65) - by @satya164
capture stack traces for devtools at the call site (bf9f7b2) - by @satya164
capture stack traces for devtools at the call site (bf9f7b2) - by @satya164
useNavigation etc (70d4465), closes #13204 - by @satya164ensure resetRoot always resets the root navigator's state (423482f) - by @satya164
default multiselectable to undefined (841ef74) - by @satya164
fix state events and url when navigator mounts later (d2ef669) - by @satya164
don't ignore navigation from layout effects when screens change (f7c9d9b) - by @
avoid duplicate focus event when navigating to a nested screen (bb93e24) - by @satya164
state.routes in stack didn't contain
routes beyond index.
This changes the behavior to add preloaded and retained routes in those
positions,
and removes the preloadedRoutes array in favor of routes beyond index.This makes it possible to treat preloaded routes the same way as regular routes.
This means they can:
It also stops treating preloaded routes as removed for preventRemove.
use union type for route when relevant (ae46141) - by @
state.routes in stack didn't contain
routes beyond index.
This changes the behavior to add preloaded and retained routes in those
positions,
and removes the preloadedRoutes array in favor of routes beyond index.This makes it possible to treat preloaded routes the same way as regular routes.
This means they can:
It also stops treating preloaded routes as removed for preventRemove.
add excess property-checking for options (7535924) - by @
account for prevent remove in __unsafe_event__ (840e340) - by @satya164
beforeRemove for nested routes removed by reset (#13153) (60a484b) - by @TaduJRremove overload from navigate action (#13150) (a876c49) - by @satya164
fix linking prefix matching host with additional characters (1e8ccb1) - by @satya164
fix useNavigation(name) degrading navigation type on large trees (#13145) (70e181f) - by @Bram-dc
fix initial state getting dropped if root navigator render is delayed in StrictMode (#13121) (7a9c5b9), closes #12985 #13025 - by @Jasleen-Kaur96
fix various issues with path generation with automatic paths (e6fb1b6) - by @satya164
fix static screen params for Record-based configsi (#13119) (2196988) - by @satya164
action.source is handledpreviously, source was only used for param updates, or used in
specific actions like replace and pop only when target was
specified. in most cases, focused screen was treated as the calling
screen.
this changes the behavior to handle action.source more
consistently throughout:
canGoBack checks whether we can go back from the screen where it wasgoBack and pop now go back from the screen where it was called,popTo now searches downward from the calling scree instead ofnavigate now removes active screens after the calling screen insteadreplace now replaces the screen it was called from instead ofwhen dispatching navigation actions from a screen, the source key is
added to the action automatically, so this affects behavior of all
navigations from screens (with navigation prop or useNavigation).
actions dispatched from the ref, or navigation objects from navigators
don't have a source unless explicitly added, so they treat the focused
screen as the calling screen.
internally, source is also rewritten when bubbling actions up when
possible, so a router handling an action can see if an action belong to
a screen in its navigation state.
detect duplicate navigators in hidden trees (ab1db32) - by @satya164
create fresh route object when key changes in tab (a7e1a7e) - by @satya164
with method to static configuration (604854f) - by @satya164fall back to first route if initial route isn't present when rehydrating (7f157c4) - by @
add focused route to history when preload replaces it (986473b) - by @satya164
let dynamic navigators specify child navigator types (#13160) (5f29675) - by @satya164
state.routes in stack didn't contain
routes beyond index.
This changes the behavior to add preloaded and retained routes in those
positions,
and removes the preloadedRoutes array in favor of routes beyond index.This makes it possible to treat preloaded routes the same way as regular routes.
This means they can:
It also stops treating preloaded routes as removed for preventRemove.
remove overload from navigate action (#13150) (a876c49) - by @satya164
handle type inference for query param without pattern (eebdf4b), closes #13073 - by @
rework how preload action is handled (3ffbdef) - by @
make nested navigator params required (a268627) - by @satya164
don't handle invalid source for POP (a6d152c) - by @satya164
with method to static configuration (604854f) - by @satya164rework preload handling in stack (#13094) (6626b95) - by @satya164
state.routes in stack didn't contain
routes beyond index.
This changes the behavior to add preloaded and retained routes in those
positions,
and removes the preloadedRoutes array in favor of routes beyond index.This makes it possible to treat preloaded routes the same way as regular routes.
This means they can:
It also stops treating preloaded routes as removed for preventRemove.
add support for retaining screens in stack (#13076) (451fa65) - by @satya164
add a reuse option to preload (#13066) (fdfd1ae) - by @satya164
<Activity mode="hidden"> (#12985) (90a9394) - by @satya164accept props for component for static config (38c2241) - by @satya164
fix incorrect type for reset action (724e198) - by @satya164
change behavior for getId in stacks (#12962) (6e80126) - by @satya164
split useLinkBuilder to minimize re-renders (4aae756), closes #12903 - by @satya164
https://reactnavigation.org/blog/2025/12/19/react-navigation-8.0-alpha
https://reactnavigation.org/blog/2025/12/19/react-navigation-8.0-alpha
pointerEvents props with styles (#12693) (987aed6), closes #12441 - by @hassankhanheaderBackImageSource with headerBackIcon option (#12860) (f2b8231), closes #12859 - by @CopilotonChange.headerBackImageSource:Before:
headerBackImageSource: require('./icon.png')
After:
headerBackIcon: {
type: 'image',
source: require('./icon.png')
}
getParent
accepts only route names. Any code using navigator IDs needs to be
refactored.landscapemodalPresentationtopInsetreact-native-web is now ~0.21.0Motivation
By replacing usages of pointerEvents to use styles instead of props,
we won't get an annoying warning in the logs.
The underlying issue in React Native Web which prevented children of a
pointer-events: box-none element from receiving pointer events is
resolved by https://github.com/necolas/react-native-web/pull/2789.
A follow-up fix to React Native Testing Library was also required, PR here https://github.com/callstack/react-native-testing-library/pull/1799.
Note: Version bump only for package @react-navigation/native-stack
Note: Version bump only for package @react-navigation/native-stack
Note: Version bump only for package @react-navigation/native-stack
Note: Version bump only for package @react-navigation/native-stack
Note: Version bump only for package @react-navigation/native-stack
Note: Version bump only for package @react-navigation/native-stack
Note: Version bump only for package @react-navigation/native-stack
Note: Version bump only for package @react-navigation/native-stack
Note: Version bump only for package @react-navigation/native-stack
Note: Version bump only for package @react-navigation/native-stack
Note: Version bump only for package @react-navigation/native-stack
Note: Version bump only for package @react-navigation/native-stack
Note: Version bump only for package @react-navigation/native-stack
Note: Version bump only for package @react-navigation/native-stack
Note: Version bump only for package @react-navigation/native-stack
Note: Version bump only for package @react-navigation/native-stack
add tabBarRepeatedPressBehavior to tabs ( 78bfeb9 ) - by @satya164
Your coding agent can read these notes before it upgrades. Set up the MCP server →