unstale

npm / expo-router

expo-router

What changed in expo-router 58, from its official release notes, upgrade guides and advisories. Sources checked 2026-10-18.

7 breaking1 deprecations5 new APIs and options2 performance3 behavior and defaults16 fixes and other

See which of these apply to your code, ranked, in your agent:

npx @unstale/cli init

@unstale/cli 0.1.1 on npm

expo-router 5834 changes

Breaking changes 7

  • The RouterActionHandling enum replaces ambiguous null and undefined return values.

    58.0.20release notes

  • Replaced by unstable_performance and unstable_PerformanceObserver.

    58.0.19release notes

  • Introduces unstable_performance as a replacement for the experimental unstable_navigationEvents API.

    58.0.19release notes

  • Introduces unstable_PerformanceObserver as a replacement for the experimental unstable_navigationEvents API.

    58.0.19release notes

  • The SitemapType returned by useSitemap no longer includes isInitial.

    58.0.16release notes

  • Generated route query strings encode spaces as +, leave * unescaped, encode ~ as %7E, and write raw null values as key=.

    58.0.13release notes

  • Reserved __expo_* launch URL params are ignored on Expo Go and development build launch URLs, so they no longer become route search params.

    58.0.10release notes

Deprecations 1

  • Adds a development warning when navigation.isFocused() is called during render.

    58.0.19release notes

New APIs and options 5

  • Call this API to restore the previous header appearance on iOS 26 and later.

    58.0.20release notes

  • Adds a performance mark recorded when a navigation action is queued.

    58.0.19release notes

  • Passes the current pathname and params props to the +html component.

    58.0.18release notes

  • Exports the type so custom routers can type the browser history instruction they return.

    58.0.14release notes

  • Allows setting the native header's light or dark interface style per Stack screen on iOS.

    58.0.11release notes

Performance 2

  • Reduces processing overhead.

    58.0.18release notes

  • Reads the anchor only when a layout is first needed, so async routes apply anchors and startup no longer loads every layout.

    58.0.18release notes

Behavior and default changes 3

  • Automatic safe-area measurements are disabled on web to preserve streamed content during hydration.

    58.0.20release notes

  • On iOS 26 and later, native header appearance is used by default.

    58.0.20release notes

  • Stack.Toolbar is now stable.

    58.0.16release notes

Fixes and other changes 16

  • Deep links to screens inside existing navigators return to the existing screen instead of stacking a second copy of the navigator over a presented modal or sheet.

    58.0.23release notes

  • Fixes the iOS zoom transition when closing a screen opened with Link.AppleZoom using router.back().

    58.0.22release notes

  • Fixes a crash when swiping the drawer on React Native 0.88.

    58.0.20release notes

  • The generated Href type is smaller, preventing large apps from failing with TS2590.

    58.0.20release notes

  • The first push to a screen is no longer incorrectly reported as pagePreloaded.

    58.0.19release notes

  • Fixes Tabs and Drawer routes retaining the previous ID's nested navigator state after navigating to a new ID.

    58.0.18release notes

  • Returns the current state, rather than the previous state, when called inside a state event listener.

    58.0.18release notes

  • Waits for the initial navigation state with Suspense.

    58.0.18release notes

  • On iOS 26 Liquid Glass, the header title adapts its color to content scrolling underneath.

    58.0.18release notes

  • Interfaces extending UnknownOutputParams can declare optional params, allowing omitted query parameters to be typed as optional.

    58.0.18release notes

  • Routes that throw during server rendering now show the error overlay instead of an "Internal Error" page in the dev server.

    58.0.17release notes

  • Fixes platform-specific route parsing and loader keys.

    58.0.13release notes

  • Restores the ./plugin subpath export so typed config plugins can be imported from <package>/plugin again.

    58.0.13release notes

  • Fixes the missing back animation after opening a screen from a link preview on iOS.

    58.0.11release notes

  • Fixes a production launch crash when the app has no scheme.

    58.0.11release notes

  • Resolves Native Tabs xcasset icon names through the iOS asset catalog so symbol sets render.

    58.0.11release notes