This release fixes project directory creation, container update, and upgrade workflows.
It also improves backup coverage and updates the Compose example configuration.
Project and Compose fixes
Create missing project bind directories as the runtime user β 8bcb59d538a28bcd149b42bcbb9e096d10eb1059 (#4138) (@kmendell)
Update the Compose example to include DISTRIBUTION=1 β 1b21e5c3594d3e60d8f8a449981a078a989790d6 (@kmendell)
Container update and backup fixes
Allow manual updates for containers excluded from automatic updates β 6c227d02de0f412371f4124214934af2933fe7f5 (#4139) (@kmendell)
Preserve data volumes when recreating containers during upgrades β 75f6ddb2bb8cee8cec52259d11d5123fe7b97f4d (#4141) (@kmendell)
Include separately mounted projects in system backups β 081e638de8000ec033a7fe4b4ac036ff8571e238 (#4144) (@kmendell)
This release adds richer log controls, Telegram topic destinations, bulk container updates, retained logs, and project editor preferences.
It also improves update workflows, registry handling, UI behavior, and performance across projects, activity, and image updates.
Features
Added a stream label toggle for distinguishing STDOUT and STDERR in logs. (#3976, 4f10dee49f7a3c4b32a695cc9f05584403ea674d) β @kmendell
Added Telegram topic destinations for notifications. (#3978, e47164421a22b8a9f12714a923be566889d2cbe1) β @kmendell
Added a timestamp toggle to the log viewer controls. (#3979, 9fa57c867b1085a7142d7e755f87ddd9318b1a1d) β @kmendell
Added personal defaults for the project editor layout. (#3986, 67b34b9c032d8f56379ed60322839d39dc5af855) β @kmendell
Added bulk updates for selected containers. (#3971, 0365c6861d50ef5fc5aaf7f816e370955eadc398) β @mewajda
Skipped repeated per-message visibility reads and source lookups on the local activity stream. (#4105, 423cd549b74271f8a4b3992cf04e5920d6a06dc5) β @kmendell
Resolved GitOps Compose paths once per project list request. (#4106, f5d6f37dba1c9cab72271d6e9d183cbe1f7fd79e) β @kmendell
Enriched filtered project lists after pagination. (#4108, 92349aa97949e54ee2409a1c4a3c35758df60e8a) β @kmendell
Deduplicated and parallelized container tag checks. (#4109, 57812f8f0511e9f2d3f6b6fa17242da6db98d592) β @kmendell
This release adds more flexible Git-based backups, improved vulnerability scanning, and expanded container and network visibility. It also fixes several authentication, permissions, deployment, and agent-related issues.
Backups and Git sync
Added Back up to Git sync mode and the ability to link existing projects to syncs β dadf87f93d9214dcd741c7ed503dfbf504c9df54 (#3932) (@kmendell)
Added configurable Git identity for pushes β 372f168940702645d63d34d0d6d80b742a7cb8da (#3935) (@kmendell)
Added an explicit environment-backup switch with a warning for project backups β 9ba395d5272ee5a3506682e61b9d1e06c4752f16 (#3937) (@kmendell)
Added support for binary files in Git backups and reused the editor file tree in the sync dialog β b80880fab4146572c02f071126d44751391031b9 (#3946) (@kmendell)
Preserved pre-deploy hooks and deployment options when importing GitOps syncs β da22a65fac881f7b6ff6048bae91399608d2eeab (#3952) (@kmendell)
Added S3 backup discovery and re-keyed volume backups to the recovery key β 02208f5cd24e028dfb0e2221305febbf3ee58837 (#3885) (@neurekadev)
Security and vulnerability scanning
Added CSV export to the security vulnerabilities table β af5538dde929bcc0e94053fd9ad4f3d263820da7 (#3936) (@kmendell)
Added a Fix available filter to the security vulnerabilities table β bf48ce6eebebca249607b02dcebb7df37079ab90 (#3944) (@kmendell)
Added vulnerability-count sorting to the images table β 9f89ceefbfcd6dd16581cf520b40d4b201d41801 (#3945) (@kmendell)
Added Trivy configuration and ignore-file settings for vulnerability scans β eff16eb5688e981b36847f55995d92990d02d30c (#3949) (@kmendell)
Added support for decimal CPU limits in Trivy scans β 02225a2d03529ef14ec7e4009f6f4b746feca2b6 (#3972) (@kmendell)
Containers and networks
Added subnet and gateway columns to the networks table β 146b4b9658d163c1290453203172b3cd286bdf3f (#3942) (@kmendell)
Added IPv6 addresses for containers and network members β 8345e5669ac2580a0b67385fbb9868ab6468e97e (#3957) (@kmendell)
Added optional IP ranges when creating networks β 38d3ed8c19faea20e4d9457395519196f074ce6a (#3959) (@kmendell)
Linked container overview volume and network counts to their respective tabs β f9988528d1a94e3440d2d295bfcd1c658aff1798 (#3958) (@kmendell)
Added support for downloading container logs β 9a83c5ac02944dc72c3fc4a39691eb8a1a832403 (#3960) (@kmendell)
Interface and settings
Added Shift-select range support to selectable tables β 472b01f5855c642afe192be448fe6339f6a6f74c (#3943) (@kmendell)
Clarified ntfy token authentication, required Matrix credentials, and cleaned up test menu labels β e68ab5ab4b8e3df7528b6f365846c383a49d381e (#3951) (@kmendell)
Updated theme colors and added support for inheriting theme colors β eee8a84bd5d467ca5f1f6dac4ca20768a377dcf4 (#3965) (@kmendell)
Authentication, permissions, and reliability
Surfaced OIDC and settings errors, allowed clearing the OIDC secret, and required it while OIDC is enabled β 70cf8a2596d32f2fd84685e5827bc79f95e2a3b7 (#3954) (@kmendell)
Hid the Automations tab and stopped job polling without jobs:manage permission β 94d6d79d533cd941d46d2cacaba391167d570c96 (#3963) (@kmendell)
Updated the legacy users.roles backfill to run only once β a4ae1a0f20463c7dc018f7bae4996e3cab2e34ac (#3964) (@kmendell)
Agents and edge tunnel
Fixed Docker snippets to use the port number from the agent address input β 2c34ade39db5f8686f73e7f76bb8df691f39cebc (#3955) (@tinkrynite)
Added missing job commands to the edge tunnel β 6af4589a12376f7fe40a9f1d8778fbbe6e5afbf4 (@kmendell)
This release fixes authentication, vulnerability-management, and Docker compatibility issues.
It also improves file-mode preservation, project navigation, notifications, and dashboard reliability.
Authentication and notifications
Align first-login password validation with the configured policy β b71892d0902480a5e430bf4c10439d167508301c (@kmendell)
Preserve notification event subscriptions during partial settings updates and warn when none are subscribed β 817444abbd7984401e9f2e3ef59447e474f8d97b (#3925) (@kmendell)
Vulnerability management and Docker compatibility
Fall back to cpuset for Trivy when the Docker host lacks CFS quota support β 41eae6334d8807d7fd7c159b73f157b28422e2a8 (#3910) (@kmendell)
Allow vulnerability management to be disabled per environment β 4e432b30a69458c2077f9eac5ceb1a83709282b6 (#3914) (@kmendell)
Added filtering for containers and projects by labels, plus support for hiding containers through labels and Compose metadata (5dfd281c628bac0b4880c465bd629040d94a301e, #3874; 6006dbefd64e437e4935c80e38006b96d53c4b93, #3875) (@kmendell).
Added support for uploading non-UTF-8 workspace files (a38a0a2fbff09efeeda6430be15c933af00719fe, #3859) (@neurekadev).
Linked Git-managed projects and synced files to their repositories (6eed748e3fc976ebeaa8a227239ec8b7565ad86d, #3879) (@FusselTV).
This release adds performance improvements across authentication, Docker calls, scheduled scans, project loading, and CVE serving. It also fixes container shell handling, scheduler overlap, image digest display, authentication flows, agent reconnection, and several UI and integration issues.
Fixes
Surface container shell close reasons and disable WebSocket compression β 30e1bb590a34d9aeded744a71d39e8709b3b7b33, b9b8c813f6d3735770f2bc1bf5c80b4967eb7e26 / #3814 (@kmendell)
Keep the first-login password dialog open and clear its flag after an admin password change β 6f90da73f3606e42e58a0f00c98208f5817c27c9 / #3831 (@kmendell)
Allow the frontend to recover from stale chunks after a redeploy β 8c294a7316f3616a704edfec366f4adccd91a577 (@kmendell)
Keep edge agents on gRPC after a manager restart β 4febf6d0dcf64997b53cba7743d082b4c7550979 (@kmendell)
Show digest-pinned image references β 5c0592994278ac9ab4600966dcdb460ecbef857b / #3836 (@kmendell)
Hide passkey login when no credentials are registered β b7b568e1a6911bf1b8369de129af792fb0f23e4e (@kmendell)
Honor SSH usernames in Git repository URLs β 837fe10c92ddbb2391d7b13475d475a68f7fca2c (@kmendell)
Support host memory accounting for Docker inside LXC β 416e93a4be282a5d26025f9fd00f3ae56c70bb71 / #3846 (@kmendell)
Load project digests automatically when entering the Updates page β 8d5eaeb9dda0072736eb67272de4d7d781d7472b (@kmendell)
Sort environments by name while placing the current selection first β 4e0f1dcfc074a4562b59ef03ee49dabbd68f40f5 (@kmendell)
Rate-limit webhook triggers by token instead of client IP β de1e978810a490fd7930a634bd4df765a50f65b2 / #3742 (@ohOgil)
Run backups in an activity instead of locking the UI β dd16fd942afaed4db4d63ad4fa787bce20251f8d / #3847 (@kmendell)
Share one stream producer across all clients β db9878d01dccfed0406cee7c5e573a7f2c8637fe / #3819 (@kmendell)
Look up Copa targets by digest instead of issuing database queries β ddcd50530759ed0b31d2f717e7d82a213bfd655d / #3821 (@kmendell)
Validate the projects metadata cache by file modification time and resolve entries in parallel β 0b44e8dd5e16131015e18c70601c79b1c2cad9a9 / #3823 (@kmendell)
Serve the CVE list from a normalized table β 31a9896dfb052ece34d7ba4c14d8347b9ad8a8b5 / #3825 (@kmendell)
Bound scheduled scans, skip unchanged images, and avoid remounting during navigation β 8299a56c5430f9a04ee132b15f58a9e46f810dc0 / #3829 (@kmendell)
Allow selecting registries for Arcane Tools and Trivy databases β b85caceeef0ba5dd094ce1fcb82805acfd2a6445 / #3830 (@kmendell)
Clean up duplicate HTTP client logic β 8a74c1b729e6bd0b02e1bcf17a824cc445cb2eb3 (@kmendell)
Dependency updates
Bump react-email from 6.9.2 to 6.9.3 β 0cbb2590792d935ff2c7a20468e91edc3b318304 (@dependabot[bot]); 8dd0210aec7303fa506cdf77e235804961107a7d / #3806 (@kmendell)
Update the tanstack-table group with two updates β f58bc47404cbc61ca0c2a62a4d48436e5b2b5688 (@dependabot[bot]); 0a7ea50401c95aff42f90b94172b0c2f42ece4cb / #3799 (@kmendell)
Bump ky from 2.0.2 to 2.1.0 β 5700fb7f52a95e3e21ab0fce8d5a7e453cb0201c (@dependabot[bot]); ab3eaae5751c0abe8ae326b35b565b43f2ed678f / #3802 (@kmendell)
Bump svelte from 5.56.10 to 5.57.0 β 3db4f4a591fd43aff54d5d9ca679780f6d9c5e35 (@dependabot[bot]); efb72f212b9795ecccfcf3b792a0e76dedebb1c6 / #3808 (@kmendell)
Bump @tanstack/svelte-query from 6.1.43 to 6.1.48 β 917e6c267748da315f93855dadbea3444466f12c (@dependabot[bot]); 242744189b8e1065be494d5cd25c8a97ecb511c0 / #3807 (@kmendell)
Bump pnpm to v12.2.1 β 7d33837fd5a2d8bfd9617dabe7347f1ea06ca1c2 (@kmendell)
Bump @xyflow/svelte from 1.6.3 to 1.6.5 β 1829e66194ca404bd8ff4b211e693a7d149ac184 / #3810 (@dependabot[bot])
Bump github.com/nicholas-fedor/shoutrrr from 0.18.0 to 0.19.0 in /backend β 343dc2020f10c610f81bb5834bcc5b858377afbe / #3840 (@dependabot[bot])
Bump golang.org/x/crypto from 0.55.0 to 0.56.0 in /backend β 37226ae35749563489551c840ca2b1620e07e3e6 / #3844 (@dependabot[bot])
Bump github.com/coreos/go-oidc/v3 from 3.20.0 to 3.21.0 in /backend β 504e5b6dda7ea16bdab84eb6b72c1da47e90414d / #3845 (@dependabot[bot])
Bump github.com/pressly/goose/v3 from 3.27.3 to 3.28.0 in /backend β d6271ea3045682a063b516ea0f1d71fc2f7e4a64 / #3841 (@dependabot[bot])
Bump github.com/klauspost/compress from 1.19.2 to 1.20.0 in /backend β 71d866fefdd79552afd4db123fd01cbd29199753 / #3843 (@dependabot[bot])
Bump github.com/mattn/go-runewidth from 0.0.28 to 0.0.29 in /cli β 5137b5dcb4efe2e6107adc7d316af4ec9132f01b / #3838 (@dependabot[bot])
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)