Update Watcher
Self-hosted deployments should update the server first. Watcher Cloud users can go straight to the release checks and client update steps.
Watcher clients installed with the public installer follow
the server version automatically. You can also update them. Run watcher update
to do this.
We recommend working through the update with a coding agent. Let it inspect your deployment definitions, workload status, and server logs. Do not share secret values. Ask it to check every required action. Ask it to run the verification steps below. This catches configuration regressions before you update the client fleet. Use Verify an update for the complete go/no-go check on one test machine.
For ongoing maintenance, set up automatic updates. Use your host scheduler or deployment pipeline. Keep this page's release checks and update sequence in that workflow.
Check release-specific upgrade steps
Before updating, open /api/v1/version on your known
Analyzer URL. For example, use
https://watcher.example.com/api/v1/version. Record the version value. If
proxy authentication blocks an unauthenticated request to that endpoint, sign in
to the Analyzer. Read the build version at the bottom of the expanded navigation
sidebar.
Before every upgrade, read the release pages. Also read their linked full changelogs. Check every version newer than the installed version and no newer than the target. Read them even when no required steps are listed. This helps you understand behavior changes and compatibility before acting. Complete applicable required steps oldest first. This includes versions you skip.
For a client upgrade, record watcher --version before updating. Use that as
the starting version. If different machines run different versions, check the
releases crossed by each machine. Each release guide labels self-hosted, cloud,
and all-deployment requirements.
Self-hosted operators must complete the self-hosted steps. They must also complete any steps that apply to all deployments. Watcher Cloud users only need the cloud or all-deployment steps. Apollo operates the cloud server. Cloud users can skip Update the server and follow Update Watcher clients.
Upgrade PostgreSQL
Watcher requires PostgreSQL 17 or later. The background-job worker uses
PostgreSQL 17's transaction timeout and refuses an older server. Check the
version with SHOW server_version_num; (170000 or higher is PostgreSQL 17
or later).
- Bundled database (Docker Compose or the Helm chart's evaluation database): it runs PostgreSQL 18. Nothing to do.
- Amazon RDS created by the Watcher Terraform module: databases created before PostgreSQL 17 became the module's default run PostgreSQL 16. Follow Upgrade an existing database.
- Any other managed database (RDS outside the module, Cloud SQL, Azure
Database for PostgreSQL): use your provider's major-version upgrade.
Take a backup, rehearse the upgrade on a restored copy and test Watcher
against it, then stop Watcher's writers (
docker compose stop, or scale the Helm workloads to zero), upgrade, check the version, and start Watcher again. - A database you run yourself: use
pg_upgradeor dump and restore into a new PostgreSQL 17 or later server, with the same backup, rehearsal and downtime steps.
Upgrading the database is separate from updating Watcher. It can happen before or after a Watcher update. Until it does, the background-job worker cannot run, and requests for its jobs (such as Generate report) fail.
Update the server
-
Back up the database and your deployment configuration. Database migrations only move forward. A rollback requires the pre-update database backup.
-
Verify and unpack the target release beside the current release. Use its deployment definitions and image tag together. If you use an internal registry, import the target tag for the
xylon-api,bootstrap, andanalyzerimages before continuing. -
Refresh any release-owned utilities you use. This includes the support bundle, scripts, authentication proxy, prompts, and infrastructure modules.
-
Apply your operator-owned configuration to the target release's deployment definitions. Preserve these items:
- Environment values
- Secret references
server-config.yamlmanaged-settings.yaml- Certificates
- Storage settings
- Proxy and network settings
Do not carry the previous release's deployment definitions forward.
-
Run the target release's one-shot
bootstrapimage against the deployment's database and configuration. It must complete successfully before the long-running workloads update. The shipped Compose configuration enforces this with service dependencies. The Helm chart uses a pre-upgrade Job. -
Deploy the target image tag for the API, Analyzer, and retention cleanup workloads. Use your orchestration system. Deploy the grading scheduler only when async grading is enabled in your operator-owned configuration.
-
Complete Verify an update on one test machine. Follow its separate rollout guidance for public-installer and mirror-backed clients.
If you use the bundled Terraform module, update it separately. Follow
Manage the RDS version
for an existing managed database, then review terraform plan. Read
Replace the instance before
applying a plan that replaces the host.
To roll back, follow these steps:
- Stop the updated workloads.
- Select the previous release's deployment definitions and image tag.
- Reapply your operator-owned configuration to them.
- Follow the restore procedure with the pre-update database backup.
The restore procedure's final start must launch the previous release, not the target release. Do not run the previous server release against the migrated database.
Update Watcher clients
A client installed with the public installer and running through its login agent checks every two to two-and-a-half hours. It reads the configured server's version. It installs that client release. This includes moving back to an older release after a server rollback. Sign-in and local settings are kept.
Rolling back to a release earlier than 0.36.0 isn't automatic. The client refuses those releases and retries about every hour without success. After such a server rollback, reinstall the client at the server's release on each machine:
watcher uninstall
curl -fsSL https://github.com/ApolloResearch/watcher-bin/releases/download/v<version>/install.sh | bash -s -- --watcher-api-url https://watcher.example.com
watcher doctor
To update immediately on one machine, run:
watcher update
watcher --version
Public-installer clients running only in the foreground do not check
automatically. Run watcher update for those clients.
Do not update by re-running the installer. On a machine that already has a
client, it refuses and exits. It prints Watcher is already installed. For a
client from a release that predates watcher update, run watcher uninstall,
then re-run the installer. Use watcher update from then on. Sign-in and local
settings survive. Uninstall keeps the client's data directory.
Clients installed from an internal mirror do not update themselves. Publish the approved client release to the mirror. Redeploy it through your fleet tooling. An MDM installation that uses the public installer can rely on the built-in update check. The MDM continues to repair the installation.
See Client deployment for installation paths and MDM rollout for managed fleets.