Skip to main content
If your plugin needs more than one page, you implement routing inside your root component. The shell doesn’t impose a router — you match the current path and render the appropriate page.

How Routing Works

When your plugin is active, the shell’s URL path looks like:
Your root component reads the current path, strips the plugin prefix, and renders the matching page.

Basic Router Pattern

Use useShellNavigation() to navigate between sub-pages:

Reading Route Params

For dynamic segments, extract params yourself from the sub-path:
Or parse it at the router level and pass as props:

Full Example

A plugin with three pages: Overview, Roster, and Pilot Detail.
src/ui/index.tsx:
src/pages/OverviewPage.tsx:
src/pages/RosterPage.tsx: