Write a plugin
20 lines of Python. Print a JSON event every N seconds. No SDK, no framework — the host reads stdout.
Stripe MRR. GitHub CI. Discord mentions. Freescout queue. BTC price. Your own scripts. Every signal you reach for in the morning, as glanceable widgets on your desktop — not in a tab.
20 lines of Python. Print a JSON event every N seconds. No SDK, no framework — the host reads stdout.
The host auto-discovers everything in your plugins/ directory at launch. Restart, and your plugin polls.
The host renders each event as a typed card — count, status, list, alert. Drag, resize, customize per layout.
The host runs each plugin as a subprocess, reads JSON events
from stdout, and renders them as typed cards. No
SDK. No framework. No server. Write a Python script that
prints JSON every N seconds — you have a widget.
count, status, list, alert.sleep(). Host doesn't care.# plugins/stripe-mrr/main.py
import json, os, requests, sys, time
KEY = os.environ["STRIPE_API_KEY"]
def emit_mrr():
r = requests.get(
"https://api.stripe.com/v1/subscriptions?limit=100",
auth=(KEY, ""),
timeout=10,
)
total = sum(s["plan"]["amount"] for s in r.json()["data"]) / 100
print(json.dumps({
"type": "count",
"label": "Stripe · MRR",
"value": total,
"unit": "USD",
}), flush=True)
while True:
emit_mrr()
time.sleep(60)Every plugin emits a typed event — count, status, list, alert. Cards render in a responsive grid that collapses to a single column inside the sidebar viewport.
Python sidecars. Twenty lines of script, drop it in plugins/, the host discovers and polls it. No SDK to install, no server to deploy.
Pin one dashboard per context — Comms, Revenue, Infra, Personal. Tabs at the top, drag to reorder, right-click to duplicate or unpin.
Dock against the screen edge as a 6 px strip — hover to expand to the full sidebar, click away to collapse. Auto-collapse delay is user-tunable.
Comfortable cards, Compact column, Minimal single-line feed. Each surface (sidebar / main window) picks independently.
Plugin data lives on your machine. The cloud account is opt-in and only stores layouts + team relay metadata — never the widget values themselves.
Comfortable for the main window. Compact for narrow side panes. Minimal when you want a single-line feed of just the deltas. Each surface picks independently.
Run Ops HUD as a full window on the main monitor, or dock it to the right edge as a thin strip. Hover to expand to the full sidebar, click away to collapse back. Auto-collapse delay is user-tunable from 200 ms to 5 seconds.
Each card below is a real plugin in the preview bundle. Same callsign, same rendered shape you'll see in the app. Write your own — the host discovers it on next launch.
Ops HUD is the operations dashboard. Focus HUD is the focus timer overlay. They share a brand, a plugin protocol, and a single tray icon family — and they're each their own download. Run one or both.
Stable releases land when the plugin marketplace ships. Until then, daily snapshots for the OS you run.
Windows 10/11, macOS 12+, and Linux (x86_64). Native binary — no Electron. ~25 MB download, ~80 MB RAM at rest.
A plugin is a Python script (sidecar) that emits widget events via a small stdout protocol. Twenty lines covers the common case. The host discovers everything in your plugins/ directory and polls each one on its declared interval.
Locally, by default. The desktop app keeps plugin state on your machine. The optional cloud account only stores layouts and team-relay metadata; the widget values themselves never leave your box.
Free during preview. We're not collecting payment information until the plugin marketplace and team mode ship. A paid tier is planned for team relays and the plugin store, but the solo / single-machine workflow stays free.
Focus HUD is a focus timer. Ops HUD is an operations dashboard. They share the same brand, the same plugin protocol, and a single tray icon family — but they're separate apps you can run independently. The focushud.live plugin bridges live focus state into an Ops HUD widget when you do run both.
Soon. Team relays are designed but unshipped — they'll let a small team subscribe to a shared set of widgets without each member running every plugin. For now Ops HUD is single-machine.