Go to file
dependabot[bot] c207269940
Bump loader-utils from 1.4.0 to 1.4.2
Bumps [loader-utils](https://github.com/webpack/loader-utils) from 1.4.0 to 1.4.2.
- [Release notes](https://github.com/webpack/loader-utils/releases)
- [Changelog](https://github.com/webpack/loader-utils/blob/v1.4.2/CHANGELOG.md)
- [Commits](https://github.com/webpack/loader-utils/compare/v1.4.0...v1.4.2)

- dependency-name: loader-utils
  dependency-type: indirect

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-14 05:50:24 +00:00
Client Fix resolution logic & tree-shaking 2019-04-28 21:19:30 +01:00
Server fixup 2022-02-24 01:25:29 +00:00
Shared Use default exports & imports to try to avoid tree-shaking issues 2019-04-28 20:45:51 +01:00
examples Add parse post data middleware example 2020-01-13 00:12:47 +00:00
lantern-build-engine@617fcdb5b9 Start setting up for CI 2019-04-27 18:02:01 +01:00
.gitignore Start setting up for CI 2019-04-27 18:02:01 +01:00
.gitmodules Start setting up for CI 2019-04-27 18:02:01 +01:00
.npmignore Add parse post data middleware example 2020-01-13 00:12:47 +00:00
.tern-project Import from Nibriboard-Panel 2019-04-26 23:35:10 +01:00
CHANGELOG.md Update changelog 2022-05-01 15:57:43 +01:00
Client.mjs Fix resolution logic & tree-shaking 2019-04-28 21:19:30 +01:00
FUNDING.yml Add FUNDING.yml 2020-05-25 15:14:08 +01:00
LICENSE Initial commit 2019-04-26 23:52:55 +01:00
README.md Add changelog, update dependencies 2022-05-01 15:47:13 +01:00
Server.mjs Fix resolution logic & tree-shaking 2019-04-28 21:19:30 +01:00
build build: fix shellcheck errors 2022-05-01 16:38:38 +01:00
docs.css Change placeholder text colour 2019-04-28 16:12:31 +01:00
index.mjs Add logo & licence 2019-04-26 23:56:29 +01:00
logo-large.png Fix resolution logic & tree-shaking 2019-04-28 21:19:30 +01:00
logo.piskel Add logo & licence 2019-04-26 23:56:29 +01:00
logo.png Fix resolution logic & tree-shaking 2019-04-28 21:19:30 +01:00
package-lock.json Bump loader-utils from 1.4.0 to 1.4.2 2022-11-14 05:50:24 +00:00
package.json 1.2.6 2022-05-01 15:58:00 +01:00



Client and server-side routing micro frameworks

Powahroot is a pair of micro routing frameworks, presented as an ES6 module:

  • The first is for client-side single-page web applications
  • The other is for handling server-side Node.js requests

It's based on rill (see the npm package bearing the name), but stripped down and simplified.

Getting Started

Install powahroot as a dependency with npm:

npm install --save powahroot

If your build process supports tree-shaking, only the router(s?) you need will be included in the final output of your build - as powahroot uses ES6 modules.



Powahroot supports multiple syntax bells and whistles when defining routes. These are documented below:

Syntax Meaning
/index.html Regular route. Matches exactly what it says on the tin.
* Special key(word?) that matches any route. Must be present on its own without any other characters.
/add/vegetable/:name/:weight Parameters. Match values an pull them into an object automatically. Does not like forward slashes in parameter values.
/images/::path Parameter values with forward slashes. If you want to use parameters, but need values to be able to contain forward slashes /, this is for you. Don't forget you can mix-and-match this with the previous example!


Initialise a new router like this:

import ClientRouter from 'powahroot/Client.mjs';

// ....

const router = new ClientRouter({
	// Options object. Default settings:
	verbose: false, // Whether to be verbose in console.log() messages
	listen_pushstate: true, // Whether to react to browser pushstate events (excluding those generated by powahroot itself, because that would cause an infinite loop :P)

// Add a page
router.add_page("/add/vegetable/:name/:weight", (params) => {
    console.log(`We added a ${params.name} with a weight of ${params.weight}g.`);

// Explicitly navigate to a page:


The server router works slightly differently, to account for the different environment it's designed for. Here's how to use it:

import ServerRouter from 'powahroot/Server.mjs';

// ....

const router = new ServerRouter();
// Logging middle ware
router.on_all(async (context, next) => {
    await next();
// Regular handlere
router.get("/files/::filepath", (context, _next) => context.send.plain(200, `You requested ${context.params.filepath}`));
// .....

// Later, when you've got a request / response pair to handle:
await router.handle(request, response);

The context argument there is of type RouterContext. Check out the API reference (link below) to learn about the other useful properties it has.


API docs are generated automatically. View them here:


It contains full documentation on how to use everything, along with code examples to help you get started.


Contributions are welcome! Simply fork this repository, make your changes, and submit a Pull Request (issues are welcome too!).

All contributions must be declared to have the Mozilla Public License 2.0 (the same license that this repository is under).


Everything in this repository except the logo is licenced under the _Mozilla Public License 2.0.

The logo itself is © Copyright Starbeamrainbowlabs 2019. All rights reserved - though you may use it when linking to this project (or to advertise usage in a 'powered by' logo).