proximo

Updating proximo

← back to docs index

proximo ships as two artifacts that must stay in lockstep: the CLI binary and the stack containers (traefik, dns, watcher, inspector). A single release tag governs both — the CLI is stamped with its version, and it asks for the stack image published under that same version.

Mental model

proximo update

proximo update

Mobile vs. release refs

A release tag (vX.Y.Z) and a digest are published once and never moved, so a cached copy is necessarily current: update pulls it only when it is missing. A mobile ref (main, sha-…, latest, a locally built tag) can change under a fixed name, so it is pulled on every converge.

Nothing is pruned

Images of superseded versions stay on disk. update deletes nothing — implicitly removing an image during a routine convergence is not a thing proximo does, and keeping the previous version cached makes a downgrade instant. proximo uninstall removes them with the rest — the proximo images only. Traefik and the dashboard images are left alone: proximo did not author them, and you may be sharing them with another project.

Running a different image

proximo up --image ghcr.io/filippolmt/proximo:sha-1a2b3c4
proximo update --image proximo:src      # e.g. an image you built locally

The escape hatch for testing an unreleased build. It takes a ref verbatim, so a tag, a digest or a locally built image all work, and it replaces the whole stack — never one component, because watcher and inspector hold a live contract with each other and a mixed pair is a footgun no CI has ever built.

It is sticky: the ref is written into the materialized .env, so containers restarting at boot keep it. While it is in effect:

Any other command that converges the stack — proximo install, proximo config tld — clears it too, since neither takes the flag. They print the same reversal line, so the swap is never silent.

proximo install has no --image: first-run host setup installs the canonical thing.

When does an update apply?

Trigger What happens
proximo update Converge now (the manual path).
proximo up Applies any pending convergence on start — same code path as update. So a stack that was stopped at upgrade time is brought to the installed CLI version when next started.
proximo doctor Read-only. Reports a stack version differing from the CLI, and an --image override in effect, each with its remedy. It never converges.
Homebrew upgrade Upgrades the CLI only. The cask's install steps run under a sandbox with a throwaway $HOME, where proximo update would reach neither Docker Desktop's socket nor your Skill copies — so the cask does not run it, and its caveat asks you to. Until you do, proximo up converges the stack too.

Outside Homebrew this is deliberately not push auto-update: after a CLI upgrade the stack stays on the old version until you run proximo update or restart with proximo up. The doctor skew check makes the pending update visible. proximo installs no scheduled unit and runs no in-stack updater — the stack is pinned to the version of the binary that started it, so an in-stack updater would have to overtake its own CLI.

Linux

Linux has no Homebrew cask, so the manual model applies: this guide's nudge, the proximo doctor skew check, and proximo update (or the next proximo up) converge the stack.

See the CLI reference for the command summary, Architecture for how the stack is wired, and ADR 0002 for why the services ship as one image pinned to the CLI version.