NuBoard
Experiment tracking that lives in a folder.
Log from Python with three calls. Every run is a folder. View thousands of runs in your browser.
import nuboard as nb
with nb.init("my-project", run_name="baseline", config={"lr": 3e-4}) as run:
for step in range(10_000):
loss = train_step()
run.add_scalar({"train/loss": loss}, step=step) # ~3 µs, never blocks training
nuboard up experiments # http://localhost:6070
Why
- No setup. No account, no server, no database.
pip install nuboardgives you logging and the viewer; logging uses only the standard library, so it adds nothing to the import time of a training script. - Folder-contained. Each run is one folder (
run.json, an append-only binary log, a media pack, a Parquet file at the end). Copy it, rsync it, zip it, delete it. - Fast. Logging is a deque append; a background thread writes columnar frames. The viewer reads a million points in about a tenth of a second and lists thousands of runs instantly.
- Records what you forget. Config, git commit and uncommitted diff, installed packages, GPUs, command line, rank, console output and CPU, memory and GPU use, automatically.
- Crash-safe. A killed process loses at most the last second of data; torn writes are ignored; crashes are marked with their traceback.
Quick start
pip install nuboard # or: uv pip install nuboard
nuboard demo demo-runs --up --open # 4 projects, 31 runs, one live run
Then try where tags has "sweep" group by config.optim.lr in the query bar and
open the Charts page. The quickstart has a tour, and
installation covers building from source.
What's in 0.13
| Area | Included |
|---|---|
| Python API | init (+ resume, fork, ranks), add_scalar, add_file, add_text, add_image, add_audio, add_video, add_figure, add_pr_curve, add_histogram, add_table, add_point_cloud, add_html, add_artifact (copies or references), use_artifact (across projects), nb.add_artifact, nb.get_artifact, finish, context manager; system scalars (CPU, memory, GPU) and console capture |
| Storage | documented log format, Parquet compaction with zoom levels, versioned artifacts, collections |
| Analysis | nb.load("project").scalars("loss", group_by="config.lr") returns Arrow tables; properties, collections and alerts per run |
| Runs | query language, stars, Markdown notes, archive, typed properties, tag editing, column chooser, collections, saved views, run details and config/file diffs |
| Charts | grouped lines with bands, smoothing, zoom, linked crosshair, inspector, live updates, alerts strip, x axis by any scalar (tokens, epochs), solo or show all series |
| Media | images, video, audio (waveform + spectrogram player with notes, or the browser's player), per-example tables compared across steps, PR curves, distributions over steps, point clouds with axes, text, HTML, interactive Plotly, Vega-Lite and Bokeh figures, and waveforms with signals over them (accurate at every zoom); filter by kind, a step slider per card, best-scalar step, configurable grid |
| Reports | Markdown reports that embed logged items, live charts and plot snapshots; export as HTML or a zip, print to PDF |
| Sweeps | parallel coordinates with brushing, scatter per parameter, rank correlation, best runs |
| Timeline | runs over wall-clock time, packed concurrency view, crash, alert and artifact markers |
| Artifacts | versions, files, metadata and a lineage graph |
| Health alerts | NaN/Inf, loss and gradient spikes, throughput drops, per scalar and rank |
| CLI | nuboard up, demo, ls, rm, compact, merge, artifact add/ls/show, import-tensorboard (TensorBoard logs to runs); see the command line reference |
See the changelog and the known limitations.
Documentation
The docs are a MkDocs site in docs/:
uv run mkdocs serve # http://localhost:8000
- Installation and Quickstart
- Logging from Python, Using the viewer, Sweeps, Health alerts, Artifacts and lineage, Analysis API, Distributed training, Importing from TensorBoard
- Reference: query language, file format, architecture, development
Development
uv sync # Python + dev tools
(cd frontend && pnpm install && pnpm build) # builds the viewer into src/nuboard/static/
uv run pytest && uv run ruff check . && uv run pyright
(cd frontend && pnpm test && pnpm check && pnpm lint && pnpm e2e)
uv build # wheel with the frontend bundled
See Development for the repository layout, the rules for the logging side, and how to rename the project (the name lives in three places).
License
NuBoard is released under the MIT License.
Requirements
Python 3.10+ on Linux, macOS or Windows. It installs NumPy, PyArrow, Starlette and
uvicorn for the viewer; logging uses only the standard library. Building the
frontend from source needs Node 20+ and pnpm (brew install pnpm on macOS);
installing from PyPI does not.
Metadata
Release files for nuboard 0.22.0
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 | Actions |
|---|---|---|---|---|
| nuboard-0.22.0.tar.gz | 10.9 MB | Without provenance | Details for nuboard-0.22.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| nuboard-0.22.0-py3-none-any.whl | Python 3 | none | any | Details for nuboard-0.22.0-py3-none-any.whl |
Total release size: 15.3 MB
Release files / nuboard-0.22.0.tar.gz
| Download URL | nuboard-0.22.0.tar.gz |
|---|---|
| Size | 10.9 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2df915a4c87be6517381b78fdad085eeb2779ab00a096284d6f519f5c8e55faf
|
|
BLAKE2b-256 checksum How to use checksums |
c63522a3e982b43d5138587339e74f919acdd1d466209d6bbc5ee4d81ab7dbf2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / nuboard-0.22.0-py3-none-any.whl
| Download URL | nuboard-0.22.0-py3-none-any.whl |
|---|---|
| Size | 4.4 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
556499d1ffb6dfbabac5592c6b77514cba32e5401eabc182968819ead47c546a
|
|
BLAKE2b-256 checksum How to use checksums |
21c2e38fe3c4eb1de87d9190073203182cba9443a8d02fb49a897149dfc32f59
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.13.6 {"installer":{"name":"uv","version":"0.13.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for nuboard 0.22.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.