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

busybar-deck

v1.5.1

Published

A control deck for the BUSY Bar: what is on screen, which app owns it, and every app's settings — in a browser

Readme

busybar-deck

[!IMPORTANT] Unofficial community project. Built and maintained by @viirtualp1, not an official Flipper Devices / BUSY product, and not affiliated with, endorsed by, or supported by them. "BUSY Bar" remains their trademark. For the real hardware and official apps, visit busy.app.

A control deck for the BUSY Bar, in a browser. What is on screen right now, which app owns it, and every app's settings — from the desk or from a phone on the way to the airport.

cd ~/.busybar && npx busybar-deck

It knows nothing about your apps

Not one field in this UI is written here. Every app describes its own settings in a spec, this reads the specs off the packages you have installed, and the page is drawn from them. Install a new app and it appears, with its own fields, its own hints and its own validation — without a line changing in the deck.

The rules and the summary templates are interpreted by busybar-kit/rules and busybar-kit/summary, and the browser is served those very modules rather than a copy. A value the page accepts is a value the CLI and the daemon accept, because it is the same code deciding.

What is on it

  • The Bar itself, front and back, refreshed while you are looking at it and backing off when the device is not answering.
  • The apps, with what is running, what is on screen, and what a pin is holding — or an honest "no window manager" when it is not mounted on one.
  • The settings, one section per file, advanced folded away, checked as you type, and saved together from one bar rather than a button per form.

Sections say whether a change lands live or needs a restart, because the app says so in its spec. Only dota's schedule re-reads itself; everything else gets a restart button that means something.

Two ways to run it

Mounted on busybar-wm, which is what gives it live state and the device's own API behind the same origin:

import { mountDeck } from 'busybar-deck';

const { handle } = mountDeck({ profileDir, live });
// answer /deck before anything is forwarded to the Bar

Or on its own, for editing settings with no daemon running:

busybar-deck --profile ~/.busybar
busybar-deck --profile ~/.busybar --host 0.0.0.0 --token "$(openssl rand -hex 16)"

Detached, it says so rather than inventing an answer: apps read as not running, nothing is on screen, and pin or restart fail with "the window manager is not here" instead of quietly pretending.

About the keys in these files

.env files hold a Steam key, a Stratz token, the Bar's own password.

  • Loopback by default. Binding anywhere else without a --token is refused outright, rather than warned about.
  • Secrets never travel. A secret reads back as { set: true, length: 32 } and never as its value; an empty box leaves the one you have, and null clears it.
  • Everything is validated again on write. A client cannot be trusted, and a bad value in a config file is a crash at the app's next start.

Your files stay yours

.env files keep every comment and every line; a change rewrites one line in place. A JSON config keeps every key it had, including the _comment block that explains its own format, and a number that was a number goes back as one.

Scripts

npm run check   # lint + typecheck + test
npm run dev -- --profile ../busybar-profile

MIT.