Halton Meter ships as a single PyPI package, halton-meter. Upgrading
on Windows is a package swap plus a halton-meter init to regenerate
the Task Scheduler XML pointing at the new binary path.
The upgrade sequence
Pick the channel you installed with:
PS> halton-meter --version # before
PS> uv cache clean halton-meter # force a fresh fetch
PS> uvx halton-meter --version # picks up the latest wheel
PS> halton-meter init # regenerate Task Scheduler XML
PS> halton-meter status # confirm PS> halton-meter --version # before
PS> uv tool upgrade halton-meter # in-place upgrade
PS> halton-meter init # regenerate tasks
PS> halton-meter status # confirm PS> halton-meter --version # before
PS> pipx upgrade halton-meter # in-place upgrade
PS> halton-meter init # regenerate tasks
PS> halton-meter status # confirm The second init is required because the Task Scheduler XML embeds the
absolute path to the halton-meter binary in <Command>. A package
upgrade may or may not change that path; re-running init regenerates
the tasks and re-registers them.
init is idempotent — running it twice does no harm.
What survives an upgrade
| Surface | Survives? |
|---|---|
%USERPROFILE%\.halton-meter\db.sqlite | Yes — your captured data |
%USERPROFILE%\.halton-meter\config.toml | Yes |
%USERPROFILE%\.halton-meter\effective-ports.json | Yes (re-validated by init) |
%USERPROFILE%\.mitmproxy\mitmproxy-ca-cert.pem | Yes — same CA |
User Root cert store trust | Yes — init does not re-add if the cert is already present |
HKCU env vars (HTTPS_PROXY etc.) | Yes |
| HKCU Internet Settings (registry proxy) | Yes — init diffs and only writes if it changed |
Pre-init snapshot in system_state.json | Yes |
| Task Scheduler tasks | Re-registered with the new binary path |
Cloud pairing (cloud-credentials.json) | Yes |
Your captured cost data is never touched on upgrade. SQLite schema
changes (additive only, by policy) run as _migrations on first
connect.
Channel summary
| Channel | First install | Upgrade |
|---|---|---|
uvx (canonical, ephemeral) | uvx halton-meter init | uv cache clean halton-meter; uvx halton-meter --version |
uv tool (persistent on PATH) | uv tool install halton-meter | uv tool upgrade halton-meter |
pipx | pipx install halton-meter | pipx upgrade halton-meter |
After any of the above, run halton-meter init to regenerate Task
Scheduler tasks. Then verify:
halton-meter status What if the new daemon won’t start
Roll back to the previous version and file an issue:
PS> uv tool install --force halton-meter==0.2.10
# or, with pipx:
PS> pipx install --force halton-meter==0.2.10
PS> halton-meter init
PS> halton-meter status If the daemon won’t start after pinning either, run the diagnostic:
halton-meter doctor --json …and attach the JSON to a support email.
See also
- Install (Windows) — first-run setup
- Troubleshooting (Windows) — Windows-specific failure modes
- Logs (Windows) — where to grep when things go sideways