npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

lit-route

v0.4.4

Published

A client-side router for lit-html applications.

Readme

lit-route

Client-side routing for lit-html single page applications :fire::fire:

Inspired by React-Router.

Get started

You can see lit-route in action in an example app here.

Install

npm install lit-route

Router

import {html, render} from 'lit-html'
import {Router} from 'lit-route' //Remember to use relative paths when using ES6 modules

const app = () => html`<h1>Hello world!</h1>`

const appRoot = document.getElementById('applicationRoot')

const router = new Router(() => render(app(), appRoot), appRoot)
router.init()

To initialise a new lit-html and lit-route app, import the Router class, create a new Router instance and pass it your app's render function and the HTML element that will hold your app. Finally, call the Router's init() method to initialise your app.

Route

import {html} from 'lit-html'
import {Route} from 'lit-route'

const DogComponent = () => html`<img src='img/cooldog.png'>`
const CatComponent = () => html`<img src='img/nicecatpng'>`

const DogRoute = new Route('/dog', () => DogComponent())
const CatRoute = new Route('/cat', () => CatComponent())

const Router = () => html`
    ${DogRoute().mount()}
    ${CatRoute().mount()}
`

To add a route to your app, import the Route class, and create a new Route instance, passing in the URL you want to use and an arrow function that returns the component for that route. To finish adding the Route to your app, mount() it.

Route parameters
const DogRoute = new Route('/dog/:name/:breed', (match) => DogComponent(match))

//Use match.params.name and match.params.breed to use the route parameters in your component.

lit-route also supports route parameters. All route parameters are optional.

Links

const DogLink = html`<a class='lit-route-link' data-to='/dog'>Dog Link</a>`

lit-route doesn't have a Link class, but you can link to your routes by using an a element with the class 'lit-route-link' and the data attribute data-to.

Default Routes

import {DefaultRoute} from 'lit-route'

const Router = () => html`
    ${new DefaultRoute(() => NotFoundComponent()).mount()}
`

The DefaultRoute class will match any route that you haven't otherwise specified a path for - useful for implementing 404 pages or redirecting users to your homepage if they've followed an incorrect link. NOTE: The DefaultRoute must be the last route mounted - all the other routes need to be mounted before it so the DefaultRoute knows what routes are being used in your app.

Private Routes

import {PrivateRoute} from 'lit-route'

var auth = false;

const private = () => PrivateRoute('/dog', auth, () => dog(), () => cat())

// If auth = true, the dog component will render, else the cat component will render.

As PrivateRoute is a function rather than a class, it doesn't need to be instantiated. Private routes don't currently support route parameters. A path can be passed in place of the last parameter - lit-route will then redirect to that path if the second parameter ('auth') is false.

Redirect

import {render} from 'lit-html'
import {Redirect} from 'lit-route'

Redirect('/path', render(app(), document.getElementById('appRoot')))

Redirect will simply force your app to the provided path. Some kind of render function must be given to the Redirect function, otherwise your url will update but nothing in the app will change.


Development

lit-route is written in TypeScript.

Clone the repo

npm link to a test project

tsc -w to compile changes