Repository navigation
Updating and Release Channels
Change IMAGE_TAG in .env and redeploy, or use the in-app "Update now"
button (admin console) — it's wired to the updater service, which has
Docker socket access and pulls + redeploys automatically. Requires
UPDATER_SHARED_SECRET set (see
Configuration Reference); without it, the admin
console still shows "update available" notices from the periodic check,
just without a one-click trigger.
An in-app update:
- pulls the new
api,worker,migrateandupdaterimages, - runs the database migrations,
- restarts
apiandworker(neverdborresolver), - writes the new
IMAGE_TAGinto your.env— so a later manualdocker compose up -dkeeps the new version instead of going back to the old one, - replaces the
updateritself with the new image.
It only accepts a real release tag newer than the running version.
Upgrading from v0.1.4 or older (or v0.1.5-beta9 and earlier): the updater in those versions can't replace itself yet, so do that one upgrade from the host:
git pull # docker-compose.yml now mounts .env writable into the updater
sed -i 's/^IMAGE_TAG=.*/IMAGE_TAG=<new tag>/' .env
docker compose pull api worker migrate updater
docker compose run --rm --no-deps migrate
docker compose up -d --no-deps api worker updaterChange the IMAGE_TAG environment variable and redeploy the stack —
Portainer re-pulls the image. The in-app "Update now" button doesn't apply
here; docker-compose.portainer.yml omits the updater service entirely.
Use Update now in the admin console, the same as on Docker Compose. It starts the deployment's updater job, which runs the database migrations, then moves the worker, the api and itself to the new release. The api's identity can only start that job; the job's own identity is limited to this resource group's container apps and jobs. Details: deploy/azure/README.md.
Run test update on the same page runs every update step on the version
you already run: a safe way to check the Azure permissions before a real
update. It's off by default; turn it on with UPDATE_REHEARSAL_ENABLED=true
on the api (or enableTestUpdate=true when redeploying).
Deployments from before v0.1.5-rc2 don't have the updater job yet:
redeploy once with the new imageTag (button or az deployment group create
with your original parameters). After that, Update now works.
Redeploying with a new imageTag also still works, and is what applies
changes to the template itself.
-
Feature releases raise the middle number:
v0.2.0,v0.3.0, … They go throughvX.Y.Z-betaN→vX.Y.Z-rcN→vX.Y.Z, and the work happens on its ownvX.Y.Z-betabranch until it's promoted tomain. -
Patch releases raise the last number:
v0.1.6,v0.1.7, … Fixes only, for the latest feature release, so a fix doesn't have to wait for (or come with) the next round of features.
main tracks the latest stable release. latest (the default
IMAGE_TAG) tracks the newest published stable tag, not main's tip.
Turn on Include prereleases under admin console → Updates to be
offered betas and release candidates too.
← Back to the README · Live demo · Report an issue · MIT licensed
- Quick Start: Docker Compose
- Deploying with Portainer
- Deploying on Azure
- Configuration Reference
- Onboarding an Organization
- IMAP Mailbox
- Google Workspace Mailbox
- Sign-in Providers
- Multi-Tenancy & RLS
- DMARC Subdomain Inheritance
- Report Attribution
- SPF Conditional Mode
- Detected Domains
- DNS Check Scheduling
- Domain Rating
🏗️ Architecture
🗺️ Roadmap