This release adds selective system restores, scheduled volume backups, Convert to Compose, direct image patching, Apple push notifications, and ML-DSA-87 signing for authentication and edge mTLS.
It also improves upgrade reliability, image update discovery, project logs, Swarm access, backup downloads, and UI performance.
Backups and recovery
Add selective system restores and harden recovery β 874134cfedc2e8ae44e6f0cd7e957e87bc760988 (#3708) (@neurekadev)
Preserve stderr streams and Docker timestamps in project logs β cac8a9090baea3b44aa2868d195cd21c3dcf62f0 (#3770) (@kmendell)
Allow the Viewer role to browse Swarm resources β 3f205dea94fa6d40189cf80eec665e39c5131e60 (#3779) (@kmendell)
Trigger agent self-upgrades asynchronously and pass the managerβs resolved target version β d857910d9b08f96e7739c679415b18fd192a01b4 (#3786) (@kmendell)
Serialize explicit empty values in partial-update DTOs with omitzero β 24592561d9154da35d7fecd380e12c50e3c5783a (@kmendell)
Authentication and notifications
Add native Apple push notifications for the iOS app β 4b1abefec6b9b93ea331e1259e061c6862025a11 (#3783) (@kmendell)
Sign and verify sessions, OIDC, passkeys, and edge mTLS with ML-DSA-87 β 2993fd316d41fafc110476370870a49b9202969c (#3785) (@kmendell)
Accept display names in email notification From addresses β 034e7e7efd4e756f0c3145099f24f2afe0bc7596 (#3776) (@ohOgil)
User interface
Improve table-scrolling performance across all views β 1243d8e0bafdc110b8443ef710d999e5104ce632 (@kmendell)
Keep dialog widths within the content area β 5e7acb61d3bb6ef4bc60a80266c424f1d40d02c2 (@kmendell)
Move frontend files into a more maintainable structure β 938882a174322a1bbc6fe50fe926a4c61820797b (@kmendell)
Dependencies
Bump github.com/aquasecurity/trivy from 0.69.3 to 0.72.0 in /backend β 29784fead298d740fb07db2754d53ff55e3bb9c4 (#3748) (@dependabot[bot])
Bump github.com/sirupsen/logrus from 1.10.0 to 1.10.1 in /backend β be4220fa2cc44c348177de5c39354b716a517413 (#3753) (@dependabot[bot])
Bump github.com/quay/claircore from 1.5.52 to 1.5.53 in /backend β 611b5d7ff298ccd51b0675874354282aa117356c (#3747) (@dependabot[bot])
Bump github.com/samber/hot from 0.13.0 to 0.13.1 in /backend β cecdb777ec0f3487ab442f2bd1a45dc1120f0564 (#3754) (@dependabot[bot])
Bump charm.land/bubbles/v2 from 2.2.0 to 2.2.1 in /cli β b631dd67c34ef642c3bb177ad3d9df09c0974b0d (#3752) (@dependabot[bot])
Bump @tanstack/svelte-query from 6.1.39 to 6.1.43 β 55762896904d9453f2c2cbeb26645b6e0f6818a2 (#3761) (@dependabot[bot])
Bump github.com/google/go-containerregistry from 0.21.9 to 0.22.0 in /backend β 3c0aac7c557ace8a15ffbd60dd6dc4448ec43a93 (#3755) (@dependabot[bot])
Bump marked from 18.0.10 to 18.0.11 β 201a3ff183a0f07e342398d0b1b12ca3847777a5 (#3759) (@dependabot[bot])
Refactoring
Use generics to eliminate redundant logic β 671ebef57234c40acba287925c5ee6ac9efdd399 (#3683) (@kmendell)
Migrate JWT and JWKS handling to jwx v4 β 45b063a074f521f45591f58c7b1d89b4395dc267 (#3790) (@kmendell)
This release adds automated S3 backups, standalone container editing, batched container-update notifications, and GitOps redeployment for stopped projects.
It also expands the CLI with commands for vulnerabilities, activities, and webhooks while improving project handling, OIDC support, and API behavior.
Add the ability to edit standalone containers β 24894fc7310b747e95d2b5d59e0a5100bb8bf12f (#3646) (@kmendell)
Add renaming for unused volumes β 1e413ada2f2413fa2a7c97798288b73ddb9d6b6c (#3704) (@neurekadev)
Pull and redeploy images after GitOps sync for stopped projects β f17e84412ae41dac1945f5b6896bafce8c244bb9 (#3698) (@ohOgil)
Add CLI commands for the latest server features and adopt hyphen-free command naming β d84511b8d67bef5fe3117832c9173ecc987e38da (@kmendell)
Add CLI commands for vulnerabilities, activities, and webhooks with end-to-end coverage β f4f9df0e8f1373a9e7fcba145383fcda8b4b3fc2 (@kmendell)
Fixes
Ensure stable ordering for page walks without an explicit sort β bf783a828ef816acf789851dffb2b8b8ed249450 (#3648) (@kmendell)
Percent-decode API path parameters before use β c469305cdacf49b80f7f5639f00eef597c1ca102 (#3682) (@kmendell)
Show Git-synced project files as read-only instead of hiding them or crashing β da21e2694754434d9b6b936834aed44173378ef1 (#3690) (@kmendell)
Send the build directive for projects from the backend β 53017c67cf91656965d667bf23e80dc0b46bd482 (#3691) (@kmendell)
Allow assigning roles to OIDC users and handle username collisions during OIDC login β c38c2580fb14f8a8f15f74ef9203bfdb9896c466 (#3692) (@kmendell)
Make the update-all dialog scroll correctly with large fleets β b7a619b2c7f8f08f05cc78f3db51ac6aa63e9ef4 (@kmendell)
Validate cgroup-derived container IDs during self-detection with network_mode: service β c24013107eff0adba0813b66b50350a03a487895 (#3710) (@kmendell)
Handle updates to discovered Compose projects β 275aface140f0d41e67adef402859f8a2a6ba207 (#3711) (@kmendell)
Refactoring
Upgrade to Go 1.27.0 β b22edb6909c5497f3e72e27d4570551c7fb2fe91 (#3680) (@kmendell)
Use native Temporal for time and date parsing β 60c2dee13cd9405175b6e0a5d65053724bb005cd (#3714) (@kmendell)
Use AI generation for GitHub release notes β 2240e8f0c7a49331f3ba7e385d7b793b844fbcaa (#3739) (@kmendell)
Dependency updates
Bump @sveltejs/kit from 3.0.0-next.21 to 3.0.0-next.23, then to 3.0.0-next.25 β cd8c48b36c926a5342a5b83f373269e4ec4093a1 (#3672), 70475a2cf7ca52f2d017422551ce645e4507aaa4 (#3727) (@dependabot[bot])
Bump svelte from 5.56.8 to 5.56.9, then to 5.56.10 β d4d83941e2685a2273a6437670d17b71816d5620 (#3666), 1478dd7df710c42161b16f7cb07be79193e7570b (#3724) (@dependabot[bot])
Bump svelte-sonner from 1.1.1 to 1.2.1 β 39ce639ebe506fb4b825fd08335a98bc55a7efd1 (#3670) (@dependabot[bot])
Bump @xyflow/svelte from 1.6.2 to 1.6.3 β a59e1e8cdc38513921dc01c4e686581e208fd10d (#3668) (@dependabot[bot])
Bump charm.land/lipgloss/v2 from 2.0.5 to 2.0.6 in the CLI β 98f5cac2359a4b5dd42355b9c4da24ebc1a1739d (#3662) (@dependabot[bot])
Bump @codemirror/view from 6.43.8 to 6.43.9 β f2f34fac879a920afa772c0a6f0b509b7a74c478 (#3664) (@dependabot[bot])
Bump the AWS SDK for Go v2 dependency group with five updates in the backend β ffc1f128f487d1942f56c636c1daeba757649e57 (#3731) (@dependabot[bot])
Bump github.com/samber/slog-echo/v2 from 2.0.0 to 2.1.0 in the backend β 6c3f58f2b29acfb341d2071857e089b68f69529d (#3735) (@dependabot[bot])
Bump go.getarcane.app/acfs from 0.4.1 to 0.4.2 in the CLI and backend β 65b97153f05e20107ca04c70c60f3c1210409ac3 (#3722), 8087a444b343b9e8099df3a40d3a6fbb67c85441 (#3732) (@dependabot[bot])
Bump github.com/mattn/go-runewidth from 0.0.27 to 0.0.28 in the CLI β 3f43202a9c7550d087f60077a53ae59616b925f7 (#3719) (@dependabot[bot])
Bump go.getarcane.app/updater from 0.7.2 to 0.7.3 in the backend β d9b58268878a9a3de48013a6aa6d1f2b1681112b (#3733) (@dependabot[bot])
Bump go.getarcane.app/docker/convert from 0.1.0 to 0.2.0 in the backend β 8d52e7a704f675fcc01a31a72b29b9a8e5799011 (#3734) (@dependabot[bot])
Bump charm.land/bubbletea/v2 from 2.0.8 to 2.0.9 in the CLI β f012dbf16a2473a78fa9c44e6b2e7c384e522679 (#3720) (@dependabot[bot])
Bump charm.land/bubbles/v2 from 2.1.1 to 2.2.0 in the CLI β 29c5dc6afd682d08a26185ec5aa07a88e17ac6f9 (#3721) (@dependabot[bot])
Bump @tanstack/svelte-query from 6.1.38 to 6.1.39 β d200e9f73555d23b26a7e80270283fa3a9302213 (#3725) (@dependabot[bot])
Bump bits-ui from 2.18.1 to 2.19.0 β 3646524258861b2f6d67f7bd67be4b96a830e0c0 (#3728) (@dependabot[bot])
Bump marked from 18.0.9 to 18.0.10 β 82a2771040785fd68d44d1c66d8691543b3c4d7a (#3729) (@dependabot[bot])
Bump vite-plus to 0.3.0 β f3002cbd30db67f0bd4e05feaf9dec830b1b35a3 (@kmendell)
Bump @tanstack/virtual-core from 3.17.7 to 3.17.8 β ea1ab4b086e857166bdff9f43fabb92f7cdb7360 (#3723) (@dependabot[bot])
Project variable resolution now matches the Docker Compose CLI
Previously, environment variables set on Arcane's own container (such as PORT) could be picked up when resolving ${VARIABLE} references in your projects' compose files. This could cause surprising results β for example, a project using ${PORT:-8191} could end up binding to Arcane's own port instead of its default (#3499).
Starting with this release, variable references in a project's compose file resolve only from:
your global Variables (.env.global)
the project's own .env file
defaults in the compose file itself (${VAR:-default})
timezone and locale from Arcane's environment (TZ, LANG, LANGUAGE, LC_ALL)
This means a project deployed through Arcane now resolves its variables the same way as running docker compose up in the project directory, and projects can no longer accidentally pick up Arcane's own configuration.
If a project referenced a variable that was only defined on Arcane's container, add it under Customization β Variables to share it with all projects, or to that project's .env file. No other action is needed.
New features
simplify build registry image references (#3243 by @traeli)
add gated admin password reset to interal CLI (#3470 by @kmendell)
per user passkey mfa / passwordless login support (#3493 by @kmendell)
custom payload generic webhooks and google chat notifications (#3417 by @khanhx)
bump docker/compose to v5.4.0, gate diverged-volume recreation behind deploy option, pull pre_start hook and image-volume images (#3502 by @kmendell)
Bug fixes
synchronize structured log toggle state (#3418 by @Kstateag)