This guide walks you through upgrading Enterprise Edge self-hosted from version 17 onward.
Follow each major version upgrade in order:
Go to the section that matches your current version to get started.
Service account token creation removed. Start Edge with explicit backend tokens.
Strict and dynamic token-validation modes introduced. Strict mode becomes the default.
Dynamic mode removed. Service account and personal access tokens no longer accepted.
Complete this checklist before you upgrade your version:
Document the following for your current deployment:
REDIS_URL, S3_BUCKET_NAME, BACKUP_FOLDER), if any.For each token, record the following:
TOKENS.v18 removed service-account-driven token creation. Edge no longer creates missing frontend tokens at runtime.
Complete the following steps before you upgrade:
Start Edge with explicit, valid backend tokens in TOKENS.
After you upgrade, verify that:
READY.401 or 403 errors after cutover.v19 introduced two edge mode token-validation behaviors:
TOKENS. Strict mode became the default in later v19 builds.v19.10.0 also added pretrusted token support for teams migrating from the Unleash Proxy.
Complete the following steps before you upgrade:
If you still use dynamic mode, migrate to strict mode before you upgrade to v20. To determine your full token scope:
Use PRETRUSTED_TOKENS only when you need temporary compatibility with legacy frontend token secrets during a Proxy migration.
After you upgrade, verify that:
/internal-backstage/tokens, /internal-backstage/features) show expected data.v20 enforces the deprecations introduced in v19. Run a full end-to-end validation, not just the items listed below.
TOKENS.Complete the following steps before you upgrade:
Replace any service account or personal access tokens in TOKENS with a backend token that covers the required projects and environments.
After you upgrade, verify that:
GET /internal-backstage/health returns 200.GET /internal-backstage/ready returns 200.Follow these steps for each environment, starting with UAT or staging:
Roll back to the previous version if any of these remain unresolved after remediation:
READY.401 or 403 unexpectedly.After rollback, complete a token-scope and persistence analysis before you retry the upgrade.
Most upgrade issues stem from removed features that previously masked token-configuration gaps. The following covers the most common failures and how to resolve them.
Frontend SDKs start returning unauthorized responses that previously succeeded.
This happens when Edge was relying on a service account token to create frontend tokens at runtime. After the upgrade, Edge no longer does this.
Fix: Verify that the backend tokens in TOKENS cover all environments and projects that your frontend SDKs require.
After upgrading, some requests succeed while others fail unpredictably across both frontend and backend SDKs.
This typically occurs when Edge runs behind a load balancer with a persistence backup configured. In dynamic mode, Edge accepted previously unseen tokens and expanded its scope at runtime. In strict mode, each Edge instance only serves tokens that fall within the startup token scope. If your backup contains stale state from dynamic mode, different instances behind a load balancer can have different views of which tokens are valid, causing intermittent failures depending on which instance handles the request.
Fix: Verify that the backend tokens in TOKENS cover all environments and projects that your backend SDKs require. If you want to preserve your backup cache, start a single Edge node first with a correct token set and run it for 5 minutes. This forces the backup to a known good state before you scale back up.
Edge does not start and reports that the provided token is not valid.
This happens when TOKENS contains a personal access token or service account token instead of a backend token. v20 rejects these token types at startup.
Fix: Replace the personal access token or service account token with a backend token scoped to the projects and environments your SDKs require.
Edge starts successfully, but downstream SDKs receive unauthorized errors when accessing specific environments.
This is the same root cause as above: TOKENS contains a personal access token or service account token. In some cases Edge starts but the token does not have the correct scope to serve data for the requested environment.
Fix: Replace the personal access token or service account token with a backend token scoped to the projects and environments your SDKs require.