Updating
docker compose pull && docker compose up -d
That is the whole update. pull fetches any newer images; up -d recreates the
containers that changed and leaves the rest alone. Database migrations run when
the api container starts, so there is no separate migrate step to remember. This
is the same command covered in Operating; this page
adds what happens underneath and how to pin a version.
What happens on the api's first boot after an update
The new api container runs its startup sequence before it serves traffic. It checks the platform database is reachable, applies any pending platform migrations, loads the installed modules, and then reconciles each workspace's schema (a module that shipped a new migration since a workspace enabled it gets caught up here). Only after that does it start listening.
If a migration fails, the boot fails on purpose. A half-migrated database is worse than an api that is briefly down, so Cobblr would rather stop loudly than serve against a schema it only half-changed. The container's healthcheck gives this startup a 60-second grace period before it counts as unhealthy, which is enough for the migration and module-load work above. A boot that stays unhealthy past that is telling you the update did not apply cleanly; see Rollback.
Choosing a channel
By default the images track latest. COBBLR_VERSION in your .env points
every service at a different tag instead:
# .env
COBBLR_VERSION=nightly
nightly is the development channel, carrying what landed the day before. Most
days there is a new one; a quiet day, or a build that does not come out clean,
means there isn't. Track it if you want changes as they land and do not mind the
occasional rough edge.
Most people should stay on latest, which follows numbered releases. The same
setting pins one exactly:
# .env
COBBLR_VERSION=2026.8.0
Versions are dated rather than semantic: the year, the month, then a counter within that month. Pinning is how you control when you move, and it is the same lever Rollback uses to step back to a known-good version.
Either way, docker compose pull && docker compose up -d then pulls exactly that
tag for every service.
After the update
Open the app and check the environment chip in the interface: it reads the running build from the api's health endpoint, so a stale tab can tell it is behind. If something looks off, Health and status shows how to read the health endpoint and the container state directly.