Skip to main content
Migrate to Polaris

Version 2025-07 is the last API version to support React-based UI components. Later versions use web components, native UI elements with built-in accessibility, better performance, and consistent styling with Shopify's design system. Check out the migration guide to upgrade your extension.

Navigation API

The Navigation API lets you navigate between extension routes, other extensions, or host pages within customer accounts. Use this API to build multi-route extensions, link to specific customer account pages, or direct customers to other installed extensions.

The API supports several custom protocols:

  • shopify:customer-account/: Navigates to built-in customer account host pages such as orders or profile.
  • extension://: Navigates within the current extension's routes.
  • extension://<handle>: Navigates to a different installed extension by its handle.

  • Build multi-page extensions: Use extension:// routes to create extensions with multiple views, such as a subscription management page with a settings sub-page.
  • Link to customer account pages: Navigate customers to built-in pages like order details or profile settings using the shopify:customer-account/ protocol.
  • Connect related extensions: Deep-link from one extension to another using extension://<handle> when workflows span multiple extensions.
Support
Targets (25)

The navigation object available to all customer account extension targets. Access the following properties to navigate between pages and handle navigation events.

Anchor to navigate
navigate
required

Navigates to a specific URL within the customer account, updating the history entries list.

Additional navigation properties available only to full-page extensions (customer-account.page.render). Includes access to the current navigation entry and history state.

Anchor to addEventListener
addEventListener
(type: "currententrychange", cb: (event: ) => void) => void
required

Registers a callback that fires whenever the current navigation entry changes.

Anchor to currentEntry
currentEntry
required

Returns a NavigationHistoryEntry representing the location the user is currently navigated to.

Anchor to navigate
navigate
required

Navigates to a specific URL within the customer account, updating the history entries list.

Anchor to removeEventListener
removeEventListener
(type: "currententrychange", cb: (event: ) => void) => void
required

Removes a previously registered currententrychange event listener.

Anchor to updateCurrentEntry
updateCurrentEntry
(options: { state: Record<string, any>; }) => void
required

Updates the state of the current entry without triggering a navigation or reload.

Anchor to useNavigationCurrentEntry
useNavigationCurrentEntry()

Returns the current navigation history entry, representing the page the buyer is viewing. Only available in full-page extensions.


  • Use custom protocols instead of absolute URLs: Always use extension://, shopify:customer-account/, or extension://<handle> protocols rather than hardcoded URLs. Custom protocols ensure your extension works across different store domains and environments.
  • Provide a way back: When navigating to sub-routes within your extension, always include a navigation action that lets customers return to the previous view.
  • Listen for navigation events when rendering depends on the route: Use shopify.navigation.currentEntry or listen for currententrychange events to update your UI when the route changes, rather than relying on stale state.

  • The Navigation API can only navigate within the customer accounts surface. It can't redirect to external URLs or the storefront.
  • The extension://<handle> protocol requires the target extension to be installed and active on the store. If the target extension isn't available, the navigation call has no effect.
  • Navigation between extensions doesn't support passing custom data or query parameters beyond what the target extension's URL structure supports.

Was this page helpful?