Skip to main content

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.

Read this first

syspanel is provided AS IS, with no warranty of any kind, express or implied. Use it entirely at your own risk.

This is not a read-only viewer. It can kill processes, delete files, stop and reconfigure Windows services, change what runs at startup, and restart or shut down the machine. Any of that can cause data loss, corruption, an unbootable system, hardware damage, business interruption or consequential damages, and no liability is accepted for any of it.

You are responsible for verifying the target of every destructive action, for keeping tested backups, and for being authorised to administer the machine and to expose it on whatever network you expose it on.

Not certified for regulated, forensic, safety-critical or other high-assurance use. LICENSE (MIT) is the governing text and prevails where the two differ; see DISCLAIMER.md for the full version.

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.

One beacon goes to each up interface's own subnet broadcast address, not to 255.255.255.255. That single limited-broadcast send is not scoped to an interface, so the routing table picks one, and on a host with Hyper-V, WSL, Docker or a VPN the winner is routinely a virtual adapter: the beacon then reaches a virtual switch with nothing behind it and the machine is undiscoverable from the LAN indefinitely. Pin the announcement to one subnet with --broadcast-address 192.168.1.255 if you would rather choose yourself.

A client does not have to wait for the next tick. A broadcasting instance also answers a discovery probe on the same port immediately, so a phone or fleet dashboard that has just started finds it in milliseconds instead of up to one --broadcast-interval. Replies go only to the host that asked and are throttled per asker; turn the whole behaviour off with --no-discovery-reply.

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.11

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for syspanel 0.1.11
File Size Uploaded Provenance
syspanel-0.1.11.tar.gz 77.9 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for syspanel 0.1.11
File Interpreter ABI Platform
syspanel-0.1.11-py3-none-any.whl Python 3 none any Details

Total release size: 192.0 kB

Release files / syspanel-0.1.11.tar.gz

Download URL syspanel-0.1.11.tar.gz
Size 77.9 kB
Tags Source
SHA-256 checksum
How to use checksums
dfc676487ad7f04003aafa66c462955ec16a8e0737731171c11edfa3bf7a4768
BLAKE2b-256 checksum
How to use checksums
0e2865953e3b9ef120860f7c10d149af0f0ac281f60b5647af90ac0725d0274b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.5

Release files / syspanel-0.1.11-py3-none-any.whl

Download URL syspanel-0.1.11-py3-none-any.whl
Size 114.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
065ad2d6404d74ce9e91c858c538b15ea76a0334a4d7d44ba10e3ff5d64fc320
BLAKE2b-256 checksum
How to use checksums
66324502c563727a9176edd3e1eb691ebac32afc396c8af94e4271afda57db49
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.5

Security for syspanel 0.1.11

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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page