When to use
Use this skill when:
- •App needs multiple pages or screens
- •Need route guards (auth, permissions)
- •Need nested routes with outlets
Source of truth
- •
packages/core/src/router/— router implementation, guards, outlets - •
packages/core/src/widgets/ui.ts—ui.routerBreadcrumb(),ui.routerTabs()
Steps
- •
Define routes with optional guards and nested children:
typescriptconst routes = [ { id: "home", screen: (_params, context) => HomeScreen(context.state), }, { id: "settings", screen: (_params, context) => SettingsScreen(context.state), guard: (_params, state) => { if (!state.meta.isAuthenticated) return { redirect: "home" }; return true; }, }, { id: "dashboard", screen: (_params, context) => ui.column([ Header(context.state), context.outlet, ]), children: [ { id: "dashboard.overview", screen: (_params, context) => OverviewPanel(context.state) }, { id: "dashboard.stats", screen: (_params, context) => StatsPanel(context.state) }, ], }, ] as const; - •
Pass to app:
typescriptconst app = createApp({ routes, initialRoute: "home" }); - •
Navigate programmatically:
typescriptapp.router.navigate("settings"); app.router.navigate("dashboard.overview"); - •
Nested routes render via
context.outletin the parent view - •
Add navigation widgets (optional):
typescriptif (app.router) { ui.routerBreadcrumb(app.router, routes) ui.routerTabs(app.router, routes) }
Verification
- •Correct screens render for each route
- •Guards block unauthorized access and redirect
- •Nested outlet renders child routes
- •Back navigation works