A simple router built for minimalism and speed


Modular trie based based router. Works best with Browserify.

$ npm install wayfarer
const wayfarer = require('wayfarer')
const router = wayfarer({ default: '/404' })
router.on('/', () => console.log('/'))
router.on('/404', () => console.log('/404'))
router.on('/:user', () => console.log('/user'))
// => '/user' 

Initialize wayfarer with options. default allows setting a default path to match if none other match. Ignores query strings.

const router = wayfarer({ default: '/404' })

Register a new path. Wayfarer uses a trie to match routes, so the order in which routes are registered does not matter.

router.on('/', () => console.log('do stuff'))
router.on('/:user', () => console.log('do user stuff'))

Partial paths are supported through the /: operator, and the callback provides a param object. With a route like /:user if you navigated to /somename, you'd get a param object like this: { user: 'somename' }.

router.on('/:user', (uri, param) => console.log('my name is ', param.user))

Nested routers are supported by passing in .match() as the callback to another router.

const main = wayfarer()
const sub  = wayfarer()
main.on('/foo', sub.match.bind(sub))
sub.on('/foo/bar'), (uri) => console.log(uri))
// '/foo/bar' 

Match a path against the saved paths in the router. If a match is found the registered callback will be executed.

// => 'do user stuff'