Operations · 03 · Windows Windows only

Upgrade (Windows)

Upgrade the Halton Meter daemon in place on Windows — uvx, uv tool, or pipx; Task Scheduler XML regeneration; what survives the bump. Public beta.

macOS 12+ · Python 3.11+ Reading time 2 min Updated May 11, 2026

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 — uvx (canonical, ephemeral)
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 — uv tool (persistent on PATH)
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 — pipx
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

SurfaceSurvives?
%USERPROFILE%\.halton-meter\db.sqliteYes — your captured data
%USERPROFILE%\.halton-meter\config.tomlYes
%USERPROFILE%\.halton-meter\effective-ports.jsonYes (re-validated by init)
%USERPROFILE%\.mitmproxy\mitmproxy-ca-cert.pemYes — same CA
User Root cert store trustYes — 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.jsonYes
Task Scheduler tasksRe-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

ChannelFirst installUpgrade
uvx (canonical, ephemeral)uvx halton-meter inituv cache clean halton-meter; uvx halton-meter --version
uv tool (persistent on PATH)uv tool install halton-meteruv tool upgrade halton-meter
pipxpipx install halton-meterpipx 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 — pin a previous version
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