sillon
Git for simulations — log, track and query your simulation runs.
You ran the simulation four months ago. The figure is in the paper draft. Which parameters produced it, and is the array it was plotted from still on disk?
sillon answers that. It records the parameters, results, figures, metadata and source of every run into a local store, and gives you a CLI and a Python API to query them afterwards. It is local-first, needs no server and no account, and is built for people who run parameter sweeps rather than training loops.
pip install sillon
Log a run
Three lines in a script you already have:
import sillonpy as sp
with sp.track_run(run_name="my_fit", project_name="demo"):
sp.log_param("degree", 1) # what you chose
coef = np.polyfit(x, y, 1)
sp.log_result("coef", coef) # what came out
sp.add_tag("baseline")
Run it normally. No setup step, no sillon init — the first call creates
.sillon/ next to your script. Large arrays go to HDF5 automatically; runs are
never overwritten.
Look at it
sillon context # every run in the project
sillon show my_fit # one run in detail
sillon projects # every project on this machine, and where it is
╭─ Project ──────────────────────────────────────────────────────╮
│ 10 runs logged in the project │
│ │
│ ID Run Name When Params Assets Status │
│ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ │
│ 39629020 trusting_cannon just now 2 2 SUCCESS │
│ 7e7e5330 happy_perlman just now 2 2 CRASHED │
╰────────────────────────────────────────────────────────────────╯
Query it
Plain Python — no query language:
import sillonlab as sl
project = sl.load_project()
best = project.query(
tags="sweep",
parameters={"degree": lambda d: d <= 3}, # cheap: filtered in SQL
results={"rmse": lambda v: v < 0.1}, # heavy: only on what survived
).sort_by("rmse")[:5]
print(best.to_dataframe())
What makes it different
The record is trustworthy. A run that crashed is recorded as CRASHED, with
the exception type and message — never as a success. A log call that fails
raises instead of silently dropping your data.
Figures remember their data. log_figure(fig, used=["coef", "degree"])
records what drew the plot, so sillon show -f can tell you months later:
fit ← built from: coef, degree
Runs remember their ancestry. track_run(inherit="baseline") records a
lineage edge you can walk with sillon lineage, run.parents() and
run.children().
Files remember their run. Everything is content-hashed, so
sillon whose figures/fit.png tells you which run produced a file you found.
It stays out of the way. Zero configuration, a background daemon you never start, and heavy arrays offloaded without you thinking about it.
Documentation
| Quickstart | five minutes, end to end |
| Core concepts | the mental model — read once |
| Logging runs | the whole logging API |
| Querying and analysis | working with many runs |
| Provenance and lineage | figures, ancestry, hashes |
| CLI reference | every command |
| Troubleshooting | when something breaks |
Runnable examples: a quickstart, a parameter sweep, and figure provenance.
Requirements
Python 3.11+, Linux or macOS. Windows is not supported yet — the client and the daemon talk over a Unix domain socket.
How it works
Your script sends what it logs to a small per-project background daemon, which
writes to SQLite (light values, so filtering is fast) and HDF5 (heavy arrays).
The CLI and sillonlab both read through one engine, so they never disagree.
See Architecture.
Status and roadmap
The logging API, the daemon, the CLI and the analysis library are in daily use.
Not implemented yet, despite appearing in older notes: sillon run
(reproduction), sillon watch, sillon estimate, a GUI, Slurm integration, and
non-Python clients. If a command is not in the CLI reference,
it does not exist.
Contributing
git clone https://github.com/balerat/sillon
cd sillon
pip install -e ".[dev]"
make test
See Contributing and Development setup.
License
Apache-2.0. See LICENSE.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sillon-1.3.6.tar.gz.
File metadata
- Download URL: sillon-1.3.6.tar.gz
- Upload date:
- Size: 96.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e3990b5de69e38ca608e44a50d9897f5dc7229b98efdc16e079e77f43dd40fce
|
|
| MD5 |
f4e0d1e85016cdc878034c83c5cb33d4
|
|
| BLAKE2b-256 |
6cfdbe3903ad1cd6f98916a3eab7dbffa41ee200b36069ef1044ff087e81b8fc
|
Provenance
The following attestation bundles were made for sillon-1.3.6.tar.gz:
Publisher:
publish.yml on balerat/sillon
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sillon-1.3.6.tar.gz -
Subject digest:
e3990b5de69e38ca608e44a50d9897f5dc7229b98efdc16e079e77f43dd40fce - Sigstore transparency entry: 2820839673
- Sigstore integration time:
-
Permalink:
balerat/sillon@496d000c9063a6b29981ac64ff997993de040dec -
Branch / Tag:
refs/tags/v1.3.6 - Owner: https://github.com/balerat
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@496d000c9063a6b29981ac64ff997993de040dec -
Trigger Event:
push
-
Statement type:
File details
Details for the file sillon-1.3.6-py3-none-any.whl.
File metadata
- Download URL: sillon-1.3.6-py3-none-any.whl
- Upload date:
- Size: 110.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6d373f4846199c0d13b064b680738e0c8d04e2fc0bf305a8112b874256260680
|
|
| MD5 |
85b248a878b289cd07fd6e1a925cf6fa
|
|
| BLAKE2b-256 |
c032bab9faf5e2accf379a8d484113bef463be586ee68aaca96c96068a3d3ee2
|
Provenance
The following attestation bundles were made for sillon-1.3.6-py3-none-any.whl:
Publisher:
publish.yml on balerat/sillon
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sillon-1.3.6-py3-none-any.whl -
Subject digest:
6d373f4846199c0d13b064b680738e0c8d04e2fc0bf305a8112b874256260680 - Sigstore transparency entry: 2820839725
- Sigstore integration time:
-
Permalink:
balerat/sillon@496d000c9063a6b29981ac64ff997993de040dec -
Branch / Tag:
refs/tags/v1.3.6 - Owner: https://github.com/balerat
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@496d000c9063a6b29981ac64ff997993de040dec -
Trigger Event:
push
-
Statement type: