Overview
The stable v3 Expo Router integration supports Expo SDK 55 and earlier. It wraps createBlankStackNavigator() with Expo Router's withLayoutContext(), using the React Navigation-backed navigator internals available in those SDKs.
Expo SDK 55 is the final SDK supported by this v3 integration. Expo Router forked the navigation packages it builds upon in SDK 56. For Expo SDK 56 or later, use the separate v4 alpha Expo Router integration.
The SDK 56 boundary applies to Expo Router, not to Expo projects generally. An Expo app using React Navigation directly can continue to use v3. See Expo's SDK 55 to 56 migration guide for details about the upstream import and runtime changes.
If you want a complete reference app before integrating this into an existing project, use the v3 Expo Router starter. It pins Expo SDK 55, the final Expo Router environment supported by the v3 integration and the version used by the v3 e2e app.
Blank Stack Layout
This is the v3 integration pattern used by the e2e app and starter:
TSX
The local wrapper provides a stable TypeScript boundary for withLayoutContext() while forwarding navigator props unchanged. Native screens remain enabled by default.
Using It In Route Layouts
TSX
router.push(), router.replace(), and router.back() still work normally. The transition behavior comes from the options you put on BlankStack.Screen.
Bounds And Router Navigation
TSX
The destination can use a matching passive Transition.Boundary, Transition.Boundary.Target, navigationMaskEnabled, and screenStyleInterpolator the same way it would outside Expo Router.
Embedded Flows
TSX
Use independent only when you want an isolated navigation tree, not for normal route layouts.