Applied authentication rate limits per real client behind reverse proxies and Cloudflare, preventing visitors from sharing one rate-limit bucket (#11515).
Reset a server's unreachable counter after a successful connection check, preventing stale failures and false unreachable alerts (#11417, closes #11416).
Corrected placeholder alignment in code editor fields (#11514, closes #11420).
Queued Cloud registration verification emails with retries, making delivery more reliable.
What's Changed
fix(server): reset unreachable_count after successful connection check by @mrcleanandfresh in #11417
Added configurable SMTP EHLO domains for instance and team email delivery (#11398, closes #11388).
Added API endpoints for viewing and updating instance-wide SMTP and Resend settings.
Added manual upgrade controls to the Updates page and mobile navigation.
Fixes
Applied the configured sender name and address to SMTP, Resend, test, transactional, and password-reset emails (#11393, closes #6073).
Respected disabled SMTP encryption in test emails (#11384, closes #5877 and #6442).
Prevented Proton SMTP from folding long From headers (#11400, closes #11380).
Restricted API token visibility and revocation to the active team, and stopped expiration warnings for users who had left that team (#11396, closes #11390).
Persisted the target image and version before container recreation so upgrades kept the installed version aligned (#11401, closes #11389).
Restored generated Caddy labels for applications with configured domains (#11397, closes #11394).
Allowed domains to be added to services with an empty Compose environment section (#11407, closes #11381).
Marked failed or timed-out Docker cleanup executions as finished and recorded their errors (#11408, closes #11383).
Required explicit confirmation before invitation magic links were redeemed, preventing link scanners and previews from consuming invitations (#11413, closes #11375).
Aligned team-scoped API responses and project access checks across sources, servers, projects, and environments (#11405).
Prevented newly introduced static settings from appearing as pending deployment changes after upgrades (#11430, closes #11426).
Completed local resource deletion even when remote Docker or backup cleanup failed.
Made team membership, invitation, token revocation, and source deletion changes roll back safely when part of the operation failed.
Released page scroll locking before destructive confirmation actions ran, preventing stuck interfaces.
Improvements
Preserved the current page and query parameters when switching teams.
Showed warnings for pending proxy updates and unavailable Sentinel instances in server status indicators.
Limited team deletion to owners, assigned an owner to existing ownerless teams, and made blocking resources easier to find from the danger zone.
Added an instance setting to control forced HTTPS redirects for the dashboard.
Fixes
Prevented DNS validation from hanging on unresponsive resolvers by adding five-second query timeouts (#11378, closes #11351).
Preserved active deployments when shared SSH multiplexing connections were refreshed or cleaned up (#11377, closes #11372).
Restored GitLab push and merge-request deployments that could fail with an HTTP 500 response (#11284, closes #11262).
Allowed long-running volume backups to run for up to ten hours while preserving custom timeouts on existing schedules (#11358, closes #11273).
Prevented SSL-enabled database containers from being left stopped during certificate ownership repair and container replacement (#11315, #11352, closes #11312).
Prevented OAuth provider settings from being erased when OAuth settings were re-seeded (#8210).
Enforced team-scoped authorization for scheduled tasks, preventing cross-team access and execution (#11239, closes #11238).
Prevented large bind-mounted files and oversized remote output from exhausting memory while services, tasks, logs, volumes, and configuration were read (#10960).
Made upgrades recover correctly when status data was temporarily unavailable after restart (#11350, closes #11347).
Prevented stuck container removal from blocking deployments; cleanup was deferred and retried instead.
Enabled compression for the dashboard over HTTPS (#10828, closes #10802).
Corrected S3 error email links so they pointed to the configured instance instead of localhost (#8633).
Fixed highlighted-button, spinner, and keyboard-shortcut contrast across custom themes (#11279).
Fixed account menus remaining open after clicking outside an expanded Appearance panel (#11374, closes #11373).
Centered icon tooltips over their triggers (#11382).
Improvements
Surfaced pending proxy configuration and outdated Traefik states with actionable warning indicators.
Made server warnings clearer, improved deployment-log scrolling, and corrected spacing in database backup settings.
Created complete PostgreSQL, MySQL, and MariaDB dumps when βAll databasesβ was selected, preserved multi-database selections, and honored the chosen storage when deleting backups (#11331, closes #11325).
Restored backup pages for applications configured with directory-only backup targets (#11332, closes #11307).
Made deployment cancellation reliable across the API, MCP, and preview cleanup flows, and advanced the next queued deployment after cancellation (#11330, closes #11327).
Fixed PostgreSQL and volume backups to S3-compatible storage on servers using non-root SSH users (#11329, closes #11304).
Preserved ports and existing entries when editing application and service domains or S3 endpoint URLs (#11328, closes #11320).
Prevented Docker cleanup from accidentally deleting images marked with the coolify.managed=true label (#8831, closes #8822).
Kept table dropdowns visible and correctly positioned inside scrolling or overflowing containers.
Improvements
Stored locally uploaded profile pictures and project icons in persistent private storage so they survived upgrades.
Improved clipboard copying for API tokens and other read-only fields.
What's Changed
fix(docker): docker cleanup correctly checks the coolify.managed label by @dionvanhecke in #8831
Fixed listboxes and table menus losing their Alpine and Livewire scope during UI updates, preventing dropdown positioning errors and broken menus (#11311; closed #11308, #11309, and #11310).
What's Changed
fix(ui): prevent floating dropdown Alpine scope errors by @andrasbacsai in #11311
Fixed an error that prevented eligible teamsβ danger zones from loading (#11305; closed #11303).
Added subscription access for Coolify Cloud team admins, correctly positioned the mobile account menu, and preserved the server-limit adjustment modal during updates.
Improvements
Standardized pagination, page-size controls, and responsive filter and sorting menus across resource lists.
Constrained the deployment log viewerβs desktop height for easier navigation.
What's Changed
fix(team): prevent danger zone source loading error by @andrasbacsai in #11305
fix(deployment): restore deployment log download actions by @andrasbacsai in #11306
Added persistent βChanges pendingβ warnings to the desktop and mobile navigation bars, including change counts and direct access to configuration differences.
Fixes
Ensured HTTP Basic Auth updates made through the Applications API regenerated managed deployment labels while preserving custom labels (#11196, closed #11191).
Fixed a 500 error on volume backup pages when database backup execution logs were present (#11210).
Removed duplicate borders from CPU and memory metrics tooltips (#11213, closed #11212).
Repaired environment and project settings page headers (#11204).
Corrected the German password-reset email translation (#9680).
Updated error pages to use the correct Coolify-branded background glow.
Improvements
Redesigned terminal target selection and improved filtering and mobile controls (#11203).
What's Changed
fix(release): preserve tags when publishing draft releases by @andrasbacsai in #11199
feat(workflows): add pull request branch management workflow by @ShadowArcanist in #11193
fix(lang): correct german translation for password reset email by @EchterTimo in #9680
fix(ui): remove duplicate metrics tooltip border by @nexmoe in #11213
fix(models): add datetime cast for finished_at in ScheduledDatabaseBackupExecution by @ejscheepers in #11210
fix(ui): environment settings broken header & project settings header by @yk-sgr in #11204
Let us know what you think about the new UI here: #11195
Breaking Changes
Team members with the Member role became read-only. They could still view team resources and configuration, but could no longer create, update, delete, deploy, start, stop, or otherwise modify resources. Review team roles and promote users who still require write access (v4.2.0).
State-changing API endpoints began requiring POST; legacy GET requests now return 405 Method Not Allowed. This affected /enable, /disable, /deploy, server validation, application/database/service lifecycle actions, and service-application lifecycle actions (v4.2.0).
Changed proxy router names for Compose services containing dots or hyphens to use a stable suffix; custom references to previous router names must be updated (#11040).
Removed confirmation dialogs for deploy, redeploy, and force-deploy actions; these actions began immediately when selected (#11023).
Features
Added a redesigned interface with clearer navigation, improved domain management, DNS checks, and automatic Cloudflare DNS setup (#11119).
Added scheduled backups for persistent volumes and directory mounts, with local or S3-compatible storage, retention controls, on-demand runs, history, and API management (#10946, closed #7701).
Team members with the Member role now have read-only access. They can continue to view team resources and configuration, but can no longer create, update, delete, deploy, start, stop, or otherwise modify resources. Review your team roles before upgrading and promote users who still require write access.
State-changing API endpoints now require POST. Legacy GET requests return 405 Method Not Allowed. Update API clients and deploy webhooks that use these endpoints:
/enable
/disable
/deploy
/servers/{uuid}/validate
/applications/{uuid}/start
/applications/{uuid}/restart
/applications/{uuid}/stop
/databases/{uuid}/start
/databases/{uuid}/restart
/databases/{uuid}/stop
/services/{uuid}/start
/services/{uuid}/restart
/services/{uuid}/stop
/services/{uuid}/applications/{app_uuid}/start
/services/{uuid}/applications/{app_uuid}/restart
/services/{uuid}/applications/{app_uuid}/stop
Features
Added scheduled persistent-volume and application-storage backups, including retention controls, manual execution, and API schedule deletion. (#10946, fixes #7701)
Added API endpoints for database, service, and container logs, including optional timestamps. (#6293)
Added API endpoints to move applications, databases, and services between authorized environments. (#8968)
Added scheduled ClickHouse backups and cloud administration commands.
Added dedicated server, cloud credential, cloud-init, and private-key management flows.
Added application settings to application API responses.
Fixes
Enforced authorization policies consistently across the API and Livewire, restricted sensitive operations to admins, and protected secrets from team members. (#8628)
Populated Docker Compose domains correctly for applications created through the API. (#9300, fixes #9211)
Hid sensitive API fields by default while allowing privileged tokens with sensitive-read access to retrieve them. (#9893)
Prevented force=false deployment requests from incorrectly forcing cache-busting rebuilds. (#9909)
Ensured closed pull-request previews were cleaned up even when status updates failed. (#10180, fixes #9495)
Preserved full public Git repository URLs for non-GitHub hosts. (#10274)
Allowed the source-commit build setting through the application API. (#10551, fixes #10280)
Limited Grafana-specific service fields to Grafana images. (#10562, fixes #10556)
Required POST for state-changing API operations such as start, stop, restart, deploy, enable, disable, and server validation; equivalent GET requests now return 405 Method Not Allowed.
Added Railpack as a beta build pack option with build-time environment support, config merging, examples, and deployment smoke coverage (#9117, resolves #5282).
Added configurable application stop grace periods for manual stops, previews, and deployments (#9746, fixes #5620).
Added structured audit logging for API mutations, webhook events, authentication, and authorization outcomes (#9842).
Added per-server configurable SSH connection timeouts and exposed the setting through the API and UI (#9844).
Added deployment skipping for webhook commits and PR/MR titles containing [skip ci] or [skip cd] (#9861).
Added instance-level MCP support with read-only tools for Coolify resources and API/UI enablement controls (#9862).
Added application deployment configuration diff tracking so pending changes and build-impacting changes are surfaced before redeploy (#10183, fixes #8357).
Added a collapsible sidebar with persisted state, tooltips, and a compact team menu (#9945).
It was long overdue because we have been in beta for a long time. Thousands of companies and people have been using Coolify in production for 1-2 years.
Of course, this does not mean it has no bugs, it has many, but we fix them every day.
v5 is coming together, but we are not rushing it.
The biggest feature will be full scalability in the core, so you will have cloud infrastructure, but with your own servers.
I already have a working solution for the core and it is soo cool. Can't wait to start showing them to you.
By the way, doing v5 does not mean we won't continue to support v4.
We just want to push what is possible with servers and automations.
Thank you to everyone who helped me reach this point π
Let's make cool stuff! π«°
So the release notes:
What's Changed
Security & Fixes
Fixed Rallly service environment variable defaults (#9041, fixes #9615)
Fixed the upgrade modal to show the correct target version and cleared stale upgrade notifications when the instance was already up to date. (#7774, fixes #6039, #8707)
Fixed user deletion cleanup so team-owned Git app sources were handled safely, while instance-wide sources were preserved for the root team. (#9435, fixes #8172)
Fixed dashboard homepage add buttons so they remained visible in light mode. (#9456, fixes #9454)
Fixed port mapping validation to accept protocol suffixes like /tcp, /udp, /sctp and IP-bound mappings. (#9503, fixes #9501, #9504)