Page Titles from Meta
Store title hints in route meta, then apply them in a single subscription.
ts
import { createRouter } from '@vielzeug/routeit';
type Meta = { title?: string };
const router = createRouter({
routes: {
home: {
path: '/',
meta: { title: 'Home' } satisfies Meta,
handler: () => renderHome(),
},
users: {
path: '/users',
meta: { title: 'Users' } satisfies Meta,
handler: () => renderUsers(),
},
userDetail: {
path: '/users/:id',
meta: { title: 'User Detail' } satisfies Meta,
handler: ({ params }) => renderUser(params.id),
},
notFound: {
path: '*',
meta: { title: 'Not Found' } satisfies Meta,
handler: () => renderNotFound(),
},
},
});
router.subscribe((state) => {
const m = state.matches.at(-1)?.meta as Meta | undefined;
document.title = m?.title ? `${m.title} - My App` : 'My App';
});This pattern keeps page title logic centralized and deterministic. For nested routes, read router.state.matches and use the leaf route (or combine branch metadata for breadcrumb-style titles).