statsbadge

Your PC's vitals on a Badgeware badge. A compact, wireless and extensible hardware monitor for Windows, macOS and Linux.

Runs on Badgeware's Tufty*, featuring a 2.8" 320x240 colour IPS display.
* firmware v3.0.1 and above.

System stats à la carte

Build your stats overview with a selection of pages from bar graphs and waterfalls to big, bold gauges. Everything configured via a web UI on your computer and pushed to your badge(s) at the press of a button.

Statsbadge badge stats

Two pages report info about your system and your badge.

Twenty-two themes, and forty-eight accents

Everything is drawn as crisp, vector shapes from the theme's palette. Choose from a selection of sixteen finessed themes:

Or from six you can tint with one of forty-eight accents:

Extensions

Manage and install extensions with ease. We've built a clock extension as an example: a Swiss railway face, joined by dots, squircle, digital and seven-segment LCD faces, all with weather from Open-Meteo.

statsbadge ext add clock
statsbadge install            # pushes the badge-side code too

Then add a Clock page in the config UI.

ext add keeps the list of extensions beside your config. ext to see what's installed.

Something to look at

Two more extensions draw the ISS transit and recent earthquakes over crisp, colour-themed world maps. Both take open feeds; with no API key nor account needed.

statsbadge ext add iss quakes
statsbadge install            # pushes the badge-side code too

Then add an ISS or a Quakes page in the config UI.

Extension ecosystem

Build your own extensions or explore those built by others. Extension data sources are added to the same pickers as your stats. One page can hold, for example, a follower count, a domain's traffic and a temperature.

statsbadge ext add bluesky mastodon cloudflare

Then set each one up under Extensions in the config UI: handles and feeds for Bluesky, an instance and a read-only token for Mastodon, an API token for Cloudflare. Mastodon and Cloudflare tokens are stored on the host and never travel to the badge.

On the badge

ButtonWhat it does
UP/DOWNprevious/next page
A B Cwhatever the host has bound them to, if anything
HOMEopen the hosts menu
HOME, heldleave the app

Pair with more than one machine and the badge uses whichever it can reach, switching by itself when the current one goes quiet. Credentials are keyed on a server id, following hosts across networks and address changes.

What it reports

A field the host cannot measure is null, and pages that need it are dropped.

cpu
load, per-core, temperature, clock, load average, processes
mem
used, total, percentage, swap
gpu
load, temperature, VRAM, power, clock, fan
net
up/down rate and totals, interface
disk
used, total, percentage, read/write rate
power
battery, charging, time left, package watts
fans
name, RPM, percentage
sys
host, OS, architecture, CPU name, uptime

Most data comes from psutil, which provides the same stats on every platform. Though there are some quirks:

Install

A server on the host measures things and serves them; the badge app fetches and draws them.

Requires a Badgeware Tufty 2350 with firmware v3.0.1

Windows and macOS: take the app from the latest release. It carries everything below, and the clock, ISS and quakes extensions, with nothing to install first. Neither app is signed, so the first launch wants right-click > Open on macOS, or More info > Run anyway on Windows.

Otherwise install it with uv, from any shell on Linux, Terminal on macOS, or PowerShell on Windows:

curl -LsSf https://astral.sh/uv/install.sh | sh   # skip if you have uv
uv tool install statsbadge          # or "statsbadge[nvidia]" for an NVIDIA card
statsbadge serve
statsbadge install                   # with the badge on USB
curl -LsSf https://astral.sh/uv/install.sh | sh   # skip if you have uv
uv tool install statsbadge
statsbadge serve --powermetrics      # temperatures, fans and package watts
statsbadge install                   # with the badge on USB
irm https://astral.sh/uv/install.ps1 | iex          # skip if you have uv
uv tool install "statsbadge[nvidia]"
statsbadge serve                     # --lhm-url if LibreHardwareMonitor is not on port 8085
statsbadge install                   # with the badge on USB

Then open http://127.0.0.1:8420/ to pick screens, themes and button bindings. No cable? statsbadge pair and the badge finds the host by itself.

The server itself never runs as root: on macOS it spawns sudo -n powermetrics, so that flag wants a passwordless sudo rule for that one command line and nothing wider. Windows reads its temperatures and fans from LibreHardwareMonitor, so leave it running with Options > Remote Web Server > Run. Take it from the project's releases: the similarly named .com is not theirs.

Security

Plain HTTP on the LAN, with every request signed HMAC-SHA256 against a shared secret from pairing, and a counter the host refuses to accept twice. So a command cannot be forged or replayed, and an unpaired device on the network learns nothing. The config API is bound to loopback because it can mint secrets.