Skip to main content

runmonitor

Lean, local experiment tracker with a live, terminal-styled web dashboard. Import and go.

import runmonitor as rm

run = rm.init("my-experiment", config={"lr": 0.001, "batch_size": 32}, total_steps=1000)

for step in range(1000):
    loss, acc = train_step()
    run.log({"loss": loss, "accuracy": acc}, step)
    if step % 100 == 0:
        run.save("checkpoint.pt")

run.finish()

Open http://localhost:8080 — your loss curve is already live and drawing itself.

Install

pip install runmonitor                 # core
pip install "runmonitor[system]"       # + CPU/RAM tracking (psutil)

Then in any training script:

import runmonitor as rm

Or run the dashboard on its own (no training script needed):

runmonitor                 # opens the dashboard in your browser
python -m runmonitor       # equivalent, for a checkout/vendored copy
RUNMONITOR_PORT=9000 runmonitor   # pick a port (set before launch)

The dashboard

A single, evolving view in the empero black/purple palette:

Element What it shows
Metric ticker Every logged metric as key=value. Click one to select it.
Live hero curve The selected metric, drawn point-by-point and growing every step.
Anomaly detection Rolling z-score flags spikes — vertical markers on the curve + a status line ("⚠ anomaly at step N" / "● all calm").
Run header Run id, current step, status pill, elapsed, steps/sec, ETA, progress bar.
Streak / best badges 🔥 improving-streak and 🏆 personal-best on the selected metric (direction-aware).
Compare Pick a second run to overlay on the selected metric.
System pane CPU % and RAM % over time (needs psutil).
Hyperparameters / Artifacts Config passed to rm.init() and any saved files.
Export Download the full run as CSV or JSON.
Theme Midnight (black/purple) by default; toggle to light bone-paper.

API

# Start a run (creates the project if new)
run = rm.init(project: str, name: str | None = None,
              config: dict | None = None,
              total_steps: int | None = None) -> Run

run.log(metrics: dict[str, float], step: int)   # log metrics at a step
run.save(filepath: str) -> dict                  # save an artifact file
run.finish()                                     # mark finished
run.fail()                                       # mark crashed

Storage

Everything lives in ~/.runmonitor/:

  • runs.db — SQLite database (WAL mode, thread-safe)
  • artifacts/<run_id>/ — saved files per run

No database setup, no API keys, no cloud.

Requirements

  • Python 3.10+
  • Flask
  • Chart.js (loaded from CDN in the dashboard)
  • psutil (optional, for system metrics)

Publishing to PyPI (maintainers)

python -m pip install --upgrade build twine
python -m build                 # → dist/runmonitor-<version>.tar.gz + .whl
python -m twine check dist/*
python -m twine upload dist/*   # needs a PyPI account + API token

Bump version in pyproject.toml before each release.

Metadata

Release files for runmonitor 0.2.0

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

Source distribution (sdist)

Source distribution for runmonitor 0.2.0
File Size Uploaded Provenance
runmonitor-0.2.0.tar.gz 19.9 kB Without provenance Details

Built distribution (wheel)

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

Total release size: 41.8 kB

Release files / runmonitor-0.2.0.tar.gz

Download URL runmonitor-0.2.0.tar.gz
Size 19.9 kB
Tags Source
SHA-256 checksum
How to use checksums
b8d57168991c49658adf7043b56c3a47c9526cc6810c084054168cf93c686821
BLAKE2b-256 checksum
How to use checksums
813eae298c010c80353b57b3f79ecce31976c4ad65f41e8e93c6b8bb95a15395
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.0

Release files / runmonitor-0.2.0-py3-none-any.whl

Download URL runmonitor-0.2.0-py3-none-any.whl
Size 22.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
510ca89cfbd9ee9e9ecdeacbec6710d7c2d1f04fc514830eb299aafde817a1d7
BLAKE2b-256 checksum
How to use checksums
17ef4a3a87ab264b58b775928819b84ace6422abf430475d0ad32a3e1640c720
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.14.0

Security for runmonitor 0.2.0

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.

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files No provenance

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