Changelog
What's shipped
freshdock follows Keep a Changelog and Semantic Versioning. This mirrors the project's CHANGELOG.md, the canonical, always-current source. Full release artifacts (binaries, images) are on the releases page.
1.5.0 (28 August 2026)
Added
- Compose-aware rollouts: a Compose project is treated as one update unit. One-shot
service_completed_successfullyservices (yourmigratestep) are re-run first, the rest follow independs_onorder, and a failed migration aborts the rollout. Read from Compose's own labels, no compose file needed. (#83) - Optional watch-all opt-out mode (
FRESHDOCK_WATCH_ALL=true): watch every container by default, step out per container withfreshdock.mode=off. (#81)
Other
- Release notes are generated from merged PRs. (#76)
1.4.2 (19 August 2026)
Fixed
- Probe: a republished multi-arch index is treated as up to date instead of a spurious update. (#75)
Other
- README: refreshed status line and network-mode re-attach mention. (#72)
1.4.1 (9 August 2026)
Fixed
- Docker: negotiate the API version with the daemon and honour every
DOCKER_HOSTscheme (unix://,tcp://,http://,https://,ssh://). (#71)
Other
- SMTP TLS modes, including plaintext, and re-attach
network_mode: container:Xdependents after the parent updates. (#69) - Dependency bumps. (#65)
1.4.0 (28 July 2026)
Added
- Lifecycle hooks:
freshdock.lifecycle.pre-updateandpost-updatecommands run inside the container around an update. The pre-update hook can veto or defer an update (exit 75); the post-update hook handles maintenance like cache clears, best-effort. (#62) - Watchtower labels are read directly:
com.centurylinklabs.watchtower.enable,monitor-only, and the lifecycle hook labels (timeouts in Watchtower's minutes) work as fallbacks, so a migrated fleet needs no relabelling. Afreshdock.*label always wins. (#66)
1.3.0 (25 June 2026)
Added
- Declare notification targets entirely via env URLs (
FRESHDOCK_NOTIFY_<NAME>_URL, shoutrrr-style), plus notification logging. A container deployment no longer needs a config file for notifications. (#56)
Other
- Env-first configuration docs and GitHub Pages links. (#53)
1.2.1 (16 June 2026)
Other
- Bump
tomlfrom 0.8.23 to 1.1.2 (spec 1.1.0). (#50)
1.2.0 (16 June 2026)
Added
- Credential observability. Surface registry-auth state, and survive rejected tokens instead of failing the whole check. (#45)
Other
- Publish documentation as an mdBook site on GitHub Pages. (#46)
- Add monthly Dependabot for cargo and GitHub Actions. (#47)
- Add a funding option, project logo, and README header. (#41, #44)
1.1.0 (10 June 2026)
Added
- Full environment-variable config coverage, onboarding docs, and node24 release actions. (#39)
1.0.0 (10 June 2026)
First stable release. Same surface as 1.0.0-rc.1, promoted after a homelab beta. watch, read-only check, and the recreate health-gate were verified on Docker, Portainer, and TrueNAS. No functional changes since the candidate.
1.0.0-rc.1 (9 June 2026)
First release candidate. Closes Phases 0 to 7 of the roadmap.
Added
freshdock check: read-only update-status table. Lists opted-in containers, resolves the latest registry digest per unique image (deduped to respect Docker Hub's anonymous rate budget), and reports which have updates. Never mutates state.freshdock recreate <name>: manual single-container update. The sequence is inspect → pull → stop → rename → create → start, health-gated with automatic rollback on failure.freshdock run: scheduler daemon polling opted-in containers on their per-mode cadence (--interval,--tick,--stop-timeout); graceful SIGINT/SIGTERM drain.- Per-container update modes via Docker labels:
live,nightly,weekly,monthly,watch,off. Opt-in by default (freshdock.enable=true). - Per-container cron override (
freshdock.schedule) with a hand-rolled 5-field parser; calendar modes evaluated in system local time with DST-gap handling. - Health-gated rollback: a new container must pass its healthcheck (or a grace period) before the old one is removed; otherwise it is restored.
- Multi-registry digest checks: Docker Hub (anonymous + authenticated), GHCR, Quay.io, lscr.io, and any OCI bearer-token registry.
- Notifications: webhook, Discord, Telegram, and SMTP backends, each subscribable to a subset of the
available/succeeded/failedtriggers. - Image cleanup: remove the superseded image after a healthy update; optional daemon-wide dangling prune.
- Global default mode for enabled containers with no explicit
freshdock.modelabel. - Multi-arch container image (amd64, arm64, armv7) on GHCR and static-musl release binaries for the same three architectures.