Migrate to 3.0
Upgrade an Arcane 2.x installation to Arcane 3.0.
Follow this guide to upgrade an Arcane 2.x installation to 3.0.
Breaking changes
Section titled “Breaking changes”| What breaks | Details |
|---|---|
Arcane variables need the ARCANE_ prefix. Old names stop startup. |
Environment variables |
Image names are now manager and agent. |
Other removals |
| Direct agents are gone. Every remote host is an agent. | Agents |
Edge agents are now just agents. EDGE_* variables are renamed. |
Agents |
| The polling transport is gone. | Agents |
The legacy edge tunnel and EDGE_MUX_DISABLED are gone. |
Agents |
| Resolve after review on job runs is gone. | Other removals |
| Cron schedules use five fields. Seconds are gone. | Job schedules |
| The environment switcher is gone. Pages show every environment. | All environments |
| Old detail-page bookmarks don’t resolve. | All environments |
| CLI flags, commands, and config keys were removed. | CLI changes |
| API actions, updates, routes, and totals changed. | API changes |
| Manager, agents, and CLI must all run 3.0. | Upgrade |
Upgrade
Section titled “Upgrade”- Upgrade to
2.17.0first. Start the Manager and every agent on2.17.0at least once, and resolve any job runs marked Needs attention. (If you are on 1.x, upgrade to 2.x first.) - Back up your data. Back up the Arcane database,
/app/data, your Compose and env files, and your projects directory. - Update your Compose files. Apply the Compose changes below.
- Update your scripts. Upgrade
arcane-clito 3.0 and update any scripts for CLI changes and API changes. - Restart the Manager. Run
docker compose down, thendocker compose up -d. - Upgrade every agent. Update every agent’s variables and re-enroll former direct agents. See Agents.
Compose changes
Section titled “Compose changes”Update your Compose files before starting 3.0:
- Switch image names to
getarcaneapp/manager:v3andgetarcaneapp/agent:v3. - Add the
ARCANE_prefix to all Arcane environment variables. See Environment variables. - Remove
JWT_SECRETandEDGE_MUX_DISABLED.
Manager:
services: arcane: image: ghcr.io/getarcaneapp/arcane:latest image: getarcaneapp/manager:v3 environment: - APP_URL=https://arcane.example.com - ENCRYPTION_KEY=<your-encryption-key> - PROJECTS_DIRECTORY=/opt/docker - JWT_SECRET=<your-jwt-secret> - EDGE_MUX_DISABLED=true - ARCANE_APP_URL=https://arcane.example.com - ARCANE_ENCRYPTION_KEY=<your-encryption-key> - ARCANE_PROJECTS_DIRECTORY=/opt/docker - PUID=1000 - PGID=1000Agent:
services: arcane-agent: image: ghcr.io/getarcaneapp/arcane-headless:latest image: getarcaneapp/agent:v3 environment: - EDGE_AGENT=true - EDGE_TRANSPORT=poll - MANAGER_API_URL=https://arcane.example.com - AGENT_TOKEN=arc_xxxxxxxx - ARCANE_AGENT=true - ARCANE_MANAGER_API_URL=https://arcane.example.com - ARCANE_AGENT_TOKEN=arc_xxxxxxxxFormer direct agents (AGENT_MODE=true) require a new install command. See Agents.
Details
Section titled “Details”Expand a section for full details on what changed.
Environment variables are renamed
Every Arcane variable now starts with ARCANE_.
Environment variables are renamed
Every Arcane variable now starts with ARCANE_.
| 2.x | 3.0 |
|---|---|
APP_URL |
ARCANE_APP_URL |
ENCRYPTION_KEY_FILE |
ARCANE_ENCRYPTION_KEY_FILE |
EDGE_AGENT, MANAGER_API_URL, AGENT_TOKEN |
ARCANE_AGENT, ARCANE_MANAGER_API_URL, ARCANE_AGENT_TOKEN |
EDGE_* (transport, reconnect, mTLS) |
ARCANE_AGENT_* |
ANALYTICS_DISABLED=true |
ARCANE_ANALYTICS_ENABLED=false |
UPDATE_CHECK_DISABLED=true |
ARCANE_UPDATE_CHECK_ENABLED=false |
_FILEvariants also require theARCANE_prefix.- Setting a legacy variable without its
ARCANE_replacement stops startup withlegacy environment variables are no longer readand lists each variable to rename (rename X to ARCANE_X). - Third-party and standard variables are unchanged:
PUID,PGID,TZ,DOCKER_HOST,DOCKER_CONFIG,HTTP_PROXY,HTTPS_PROXY,NO_PROXY, andOTEL_*. JWT_SECRETis ignored and logs a startup warning until removed.- Any variable you set locks its corresponding UI setting automatically, replacing
ARCANE_UI_CONFIGURATION_DISABLED=true. Invalid values stop startup. See Settings overrides.
Agents
Edge agents are now just agents. Direct agents and polling are gone.
Agents
Edge agents are now just agents. Direct agents and polling are gone.
Change these on every agent:
| 2.x | 3.0 |
|---|---|
EDGE_AGENT=true |
ARCANE_AGENT=true |
EDGE_TRANSPORT |
ARCANE_AGENT_TRANSPORT |
EDGE_RECONNECT_INTERVAL |
ARCANE_AGENT_RECONNECT_INTERVAL |
EDGE_MTLS_* |
ARCANE_AGENT_MTLS_* |
EDGE_TRANSPORT=poll |
Remove it. Use auto (default). |
EDGE_MUX_DISABLED |
Remove it. |
Health checks on port 3553 |
Remove them. |
ARCANE_EDGE_*andEDGE_*names stop startup withrename X to ARCANE_AGENT_*.ARCANE_AGENT_TRANSPORTacceptsauto,grpc, orwebsocket. Anything else stops startup.AGENT_MODE=truewithoutARCANE_AGENT=truestops startup withdirect agents were removed in v3.- Existing
edge://environments becomeagent://automatically. Nothing to re-enroll.
Former direct agents convert to Pending environments with the same ID, keeping webhooks, Git syncs, settings, and jobs. Re-enroll each one:
- Open Environments and select the environment.
- Open Connection & Agent and click Regenerate API Key.
- Copy the install command.
- On the agent host, remove the old container and run the new command.
Every page covers all environments
The environment switcher is gone.
Every page covers all environments
The environment switcher is gone.
Lists, the dashboard, topology, Swarm, Security, Git Syncs, and Podman Auto Update show resources across every readable environment, with an Environment column and filter. See Work across environments.
- Detail URLs require
?env=<id>, breaking 2.x bookmarks. - Git Syncs moved from
/environments/{id}/gitopsto/gitops. - Per-environment settings moved from the environment page to Settings pages, with an Applying settings for picker. See Environment settings.
- Users, roles, API keys, authentication, notifications, webhooks, backups, and diagnostics moved to System.
- Notification providers are global to the Manager instead of per environment. Set them up again under System → Notifications.
- Editing those pages requires
environments:listorenvironments:readin addition tosettings:*ornotifications:manage. - System → Webhooks lists webhooks from all environments.
- Environment colors moved to Account → Preferences.
- New projects no longer get an empty
.env, and the default Compose template no longer hasenv_file: .env. - The Security overview shows a single patch-priority score across all environments.
CLI changes
Removed flags and commands, and their replacements.
CLI changes
Removed flags and commands, and their replacements.
| Removed | Use instead |
|---|---|
--env on containers create |
--env-var |
--config on admin notifications settings set |
--provider-config |
--output on templates download |
--output-file |
--disabled |
--enabled=false |
jwt_token and refresh_token in the config file |
arcane-cli auth login |
default_environment, config set environment, environments switch |
--env <id> on each command |
--api-url, --access-token, --edge, --use-api-key on environments |
Nothing. environments create needs --name. |
Commands run across all environments by default. Mutating commands without --env prompt for confirmation. See CLI Configuration.
API changes
Actions, PATCH updates, renamed routes, and totals.
API changes
Actions, PATCH updates, renamed routes, and totals.
- Actions use the
?action=query parameter. - Resource updates use
PATCHinstead ofPUT. - Some list endpoints return
-1for totals unless you passincludeTotal=true. - Check the API reference for other renamed routes.
Job schedules
Five-field cron instead of six.
Job schedules
Five-field cron instead of six.
- Schedules use standard five-field cron:
minute hour day month weekday. - Saved six-field schedules convert automatically. The seconds field is dropped.
- Update scripts and settings overrides:
0 0 2 * * *becomes0 2 * * *. - Descriptors like
@dailyand@every 6hstill work. - A run missed while Arcane was down runs once on startup.
- Overlapping runs of the same job wait their turn instead of being skipped.
Other removals
Image aliases, job run resolution, and the Previews tab.
Other removals
Image aliases, job run resolution, and the Previews tab.
- The
arcaneandarcane-headlessimage aliases (usemanagerandagent). - Resolve after review on job runs.
- The Previews tab.