syspanel
A local, self-contained Windows system dashboard: resource monitor, disk tree viewer, battery health, process manager, service watchlist, startup monitor, cleanup manager, and restart control — one web app, no cloud, no build step.
Install
pip install syspanel[windows]
Run
syspanel
Serves at http://127.0.0.1:8765/ (open it yourself, or pass --open-browser
to have it opened for you). Useful flags:
syspanel --open-browser # open a browser tab on startup
syspanel --read-only # disable every mutating route
syspanel --allow-remote # bind 0.0.0.0 and print a bearer token required on every mutating route
--host always wins if you pass it explicitly (e.g. to bind a specific LAN
IP instead of all interfaces), but any non-loopback host requires
--allow-remote — the server refuses to start otherwise, so it can never
be exposed beyond localhost without authentication by accident.
Fleet: seeing every syspanel instance on your LAN
Any instance can announce itself over UDP broadcast so a companion dashboard
elsewhere on the network can find it — off by default, opt in with
--broadcast:
syspanel --broadcast # announce every 15s on UDP :7005
syspanel --broadcast --broadcast-interval 30 # slower cadence
syspanel --broadcast --broadcast-port 7100 # non-default port
Each broadcast is one small (~200 byte) self-contained UDP packet — hostname, IP, dashboard port, CPU/mem/battery, admin state, timestamp — sent on a repeating timer, not fragmented or batched across packets. A dropped packet just means one missed tick, never a partial update.
syspanel-fleet is the companion tool that listens for these and shows every
host it's heard from as a live card grid, each linking straight to that
host's own dashboard:
syspanel-fleet # listen on :7005, dashboard at 127.0.0.1:8766
syspanel-fleet --listen-port 7100 # match a non-default --broadcast-port
syspanel-fleet --allow-remote # let others on the LAN view the fleet dashboard
The same tool doubles as a lightweight standalone beacon — useful for testing a receiver, or announcing a machine that isn't running the full dashboard:
syspanel-fleet --mode transmit --interval 15
Modules
| Module | What it shows |
|---|---|
| Resources | Live CPU / RAM / network / disk I/O, 1s push over WebSocket |
| Disk Tree | Drive-picker dropdown, squarified treemap + sortable/clickable table, background scan with progress that survives navigating away and back |
| Battery | Design vs. current capacity, cycle count, wear verdict (via powercfg) |
| Processes | Sortable/searchable process table; kill with denylist protection |
| Services | Full service list, a persisted watchlist with alerts, start/stop/restart |
| Startup | Registry Run/RunOnce, Startup folder, and logon scheduled tasks; enable/disable/delete |
| Cleanup | Declarative target catalog (Temp, crash dumps, Windows Update cache, Recycle Bin, custom age/retention rules); dry-run preview before every delete |
| Power | Schedule a restart with a cancellable countdown; requires typing a confirm phrase |
| Dev Tools | Detected versions of Python, Git, Node/npm, .NET SDK, Java, PowerShell 7, Docker, VS Code, Cursor, TestComplete, TestExecute, SQL Server (per instance), Hirsch Velocity, Chrome, Edge, Firefox, VMware Workstation, IIS, Hyper-V |
Admin-only actions (Windows\Temp, service control, killing other users' processes) show a lock badge when unelevated; use the Relaunch as Administrator button in the header to UAC-elevate in place.
Pages cache their data across navigation (instant reload, background refresh every 5 minutes, plus a manual Refresh button), and Startup/Battery/ Cleanup are pre-warmed in the background while you're on another page.
Safety model
Every mutating action goes through one chokepoint (core/safety.py):
a denylist blocks system-critical paths/PIDs, and destructive operations
require a preview → confirm token → execute round trip so exactly what
was shown is what gets acted on. Every attempt is appended to an audit log
at %LOCALAPPDATA%\syspanel\audit.jsonl.
Any connection from beyond localhost (relevant once --allow-remote is in
use) - HTTP or WebSocket, mutating or not - is logged with its IP, method,
path, user-agent, and whether it carried a valid bearer token, both to the
console and to %LOCALAPPDATA%\syspanel\remote_access.jsonl.
Development
pip install -e .[dev,windows]
pytest -q
See CLAUDE.md for repo conventions.
Metadata
Release files for syspanel 0.1.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| syspanel-0.1.8.tar.gz | 68.0 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| syspanel-0.1.8-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 173.2 kB
Release files / syspanel-0.1.8.tar.gz
| Download URL | syspanel-0.1.8.tar.gz |
|---|---|
| Size | 68.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2b5366d52210eac5704adb29bc56411c7549d289ee2ab1965a82faf5cd462faa
|
|
BLAKE2b-256 checksum How to use checksums |
2744ce180c941e77170c31e7c740cc811e1a62150532c95b93d80095e3d3e8f1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|
Release files / syspanel-0.1.8-py3-none-any.whl
| Download URL | syspanel-0.1.8-py3-none-any.whl |
|---|---|
| Size | 105.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5c3057e1fbc3a68f484278a7f4ab9323afb9fe009733ecd5a1cf494b6a07e5b9
|
|
BLAKE2b-256 checksum How to use checksums |
6341ff89a5693f53fa105d77688330bb48fb19402c08ab4e219dc0f887153a14
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.5
|
Security for syspanel 0.1.8
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.