Talon Studio upgrades in place: back up, move the pinned tag, pull and start. Migrations run by themselves on every boot, and they only run forward — which is why the backup comes first.
Back up first
Schema changes only run forward, so the backup you take now is the only way back. Take it before every upgrade, not just the large ones — it is the same archive as on Backup & Restore:
terminal
docker compose down
docker run --rm \
-v talon-studio_talon_data:/data:ro \
-v "$PWD/backups:/backup" \
busybox tar czf /backup/talon-data-pre-upgrade.tgz -C /data .
docker compose up -d
Move the tag and pull
Move the tag in TALON_STUDIO_IMAGE in .env to the release you are upgrading to — the current one is v1.0.2-beta — then pull and start:
As it starts, the entrypoint brings up the embedded Postgres and pySigma, then applies every pending migration before the app process starts — on every boot, whether or not there is anything to apply. There is no separate migrate command. Keep TALON_ENCRYPTION_KEY the same across the upgrade: it decrypts the stored credentials and your Talon key.
On an image from before 16 October 2026? Move the tag by hand once
Talon Studio's release numbering restarted at v1.0.0-beta on 16 October 2026, so the update check on an earlier image may not offer v1.0.2-beta. Upgrade the box by hand once, as above. From then on its update check tells it of each release.
"localhost:3000/api/health?detailed=1" # "version": the release you pulled
version is read from the image at build time, so it names exactly what is running. Then sign in and open a page or two — including the License page, which should still show your key.
If a migration fails
The container exits with Migration failed in the log and, under restart: unless-stopped, keeps restarting and retrying. That is a crash loop, not data loss: migrations already applied are skipped on each retry, and only the failing one runs again. Read the error above the failure line in docker compose logs app; Troubleshooting lists the usual causes. If you cannot fix it forward, roll back.
Rolling back
1
Pin TALON_STUDIO_IMAGE back to the previous tag.
2
If the new version's migrations ran against your data, restore the pre-upgrade backup — the restore commands. If none ran (the new image never got that far), you may not need to.
3
docker compose down, then docker compose up -d.
4
Check that /api/health is ready and that version is the tag you rolled back to.
An older image cannot run a newer schema
There are no down-migrations. Running the previous image against a database the new one migrated is not a rollback — it is an old program reading tables it does not know. Restore the backup.
Helm and the cloud bootstrap
Helm.helm upgrade with the new chart, or set image.tag. The chart deploys with the Recreate strategy, so the old pod stops before the new one migrates. Take the backup from the pod's volume first.
The cloud bootstrap. Edit TALON_STUDIO_IMAGE in /opt/talon-studio/.env, then sudo docker compose -f /opt/talon-studio/docker-compose.yml pull and up -d. The encryption key there lives in that .env, not on the volume — keep both.