@nano_kit/router
v1.0.0-alpha.6
Published
A small and powerful router for @nano_kit/store state manager.
Downloads
24
Maintainers
Readme
@nano_kit/router
A small and powerful router for @nano_kit/store state manager.
- Small. Around 2 kB (minified & brotlied). Zero dependencies except @nano_kit/store.
- Type-safe. Full TypeScript support with type inference for routes and parameters.
- Signal-based. Built on top of @nano_kit/store's reactive signals for automatic UI updates.
- Flexible. Supports nested layouts, parameterized routes, optional parameters, wildcards, and query parameters.
- SSR-ready. Works seamlessly with server-side rendering.
Installation
pnpm add @nano_kit/store @nano_kit/router
# or
npm install @nano_kit/store @nano_kit/router
# or
yarn add @nano_kit/store @nano_kit/routerQuick Start
Here is a minimal example demonstrating navigation, routing, and reactive page rendering:
import { effect } from '@nano_kit/store'
import { browserNavigation, router, page, layout, notFound } from '@nano_kit/router'
/* Define your routes */
const routes = {
home: '/',
user: '/users/:id',
userPosts: '/users/:id/posts',
admin: '/admin/*'
}
/* Setup navigation with browser history */
const [$location, navigation] = browserNavigation(routes)
/* Define page components */
const HomePage = () => 'Welcome Home!'
const UserPage = () => `User ID: ${$location().params.id}`
const UserPostsPage = () => `Posts for User: ${$location().params.id}`
const AdminLayout = ($page) => `Admin Layout: ${$page()}`
const AdminPage = () => `Admin Page: ${$location().params.wildcard || 'dashboard'}`
const NotFoundPage = () => 'Page Not Found'
/* Create router with pages and layouts */
const [$page] = router($location, [
page('home', HomePage),
page('user', UserPage),
page('posts', UserPostsPage),
layout(AdminLayout, [
page('admin', AdminPage)
]),
notFound(NotFoundPage)
], composeLayoutFunction)
/* React to route changes (mounting $page triggers router) */
const unsub = effect(() => {
const PageComponent = $page()
console.log('Current page:', PageComponent())
// Render PageComponent in your app
})
// Output: Current page: Welcome Home!
/* Navigate programmatically */
navigation.push('/users/123')
// Output: Current page: User ID: 123
navigation.push('/admin/settings/profile')
// Output: Current page: Admin Layout: Admin Page: settings/profile
navigation.back()
// Output: Current page: User ID: 123
/* Cleanup */
unsub()Documentation
For comprehensive guides, advanced patterns, and API reference, visit the documentation website.
