Skip to content

v0.9.15

Choose a tag to compare

@ProphetSe7en ProphetSe7en released this 07 Apr 19:12
· 14 commits to main since this release

Features

  • Private registry login — Update checks now work for images on private container registries (sponsor-gated GHCR packages, private organization images, paid Docker Hub accounts). Add credentials under Tools → Image Updates → Private registry login. Credentials are verified against the registry's /v2/ endpoint with bearer-token challenge handling before saving, stored in the standard Docker config format (/config/.docker/config.json, permissions 600), and are never returned via the API or written to logs. If an authenticated request is rejected for an image that is actually publicly pullable (GHCR behavior when the token owner lacks explicit access to a public package), Constat automatically retries anonymously so logging in never breaks checks for other images on the same host.
  • Token creation guide in UI — Inline, always-visible guide with a direct link to github.com/settings/tokens/new and a warning that only the read:packages scope should be enabled. Docker Hub alternative is also covered.
  • Multi-arch images — GHCR now publishes both linux/amd64 and linux/arm64. Apple Silicon Macs and Raspberry Pi 4/5 pull a native arm64 image instead of running under Rosetta/QEMU emulation.
  • Progress indicator during update checks — The Check Now button now shows Checking 42/57 live with the name of the container currently being processed, so you can see what is happening during the 1–2 minute full run instead of a static spinner.
  • Calmer update-check taxonomy — Replaced the binary "up to date / error" classification with five distinct, non-alarming states: Outdated (yellow, actionable), Up to date (green), Local (locally built, grey), No access (registry requires login, grey), and a neutral dash for rare edge cases. The word "errors" no longer appears in the UI for ordinary situations like local builds.

Breaking changes

  • regctl removed from the image. Update checks now go through the Docker daemon's /distribution/{ref}/json endpoint (client.DistributionInspect) instead of spawning regctl as a subprocess for each container. The image is ~38 MB smaller, update checks are faster, and there are no more signal: killed errors when a registry is slow. No user action required. If you were reading update-status.json directly for the Error field, a few error strings have changed wording.

Performance

  • No more 1-second rate limit between containers — saves ~57 seconds per full check run.
  • Registry auths snapshot once per run instead of re-reading /config/.docker/config.json for every container.

Bugfixes

  • Frontend race fix — /api/updates poll responses are now ignored if a newer sequence number has already been applied. Previously, out-of-order responses from overlapping in-flight requests could flip the button back to "Checking..." after the check completed, leaving the UI stuck.
  • Registry login form — Remove button now works reliably, credentials are validated against the registry before saving (invalid tokens are rejected immediately).

Full changelog

https://github.com/ProphetSe7en/constat/blob/main/CHANGELOG.md