Changelog.

Latest releases from the GitHub repository.

v4.4.4

Features

  • Added optional Cloudflare proxy mode for new DNS records.
  • Added support for public IPv4 and IPv6 addresses in Git repository URLs.

Fixes

  • Fixed IPv6 server addresses across connections, URLs, routing, and Hetzner provisioning.
  • Fixed IPv6 connections to public database TCP proxies on IPv6-enabled networks (#12133).
  • Fixed database proxy connections after database IP addresses changed.
  • Prevented duplicate database environment variables and preserved source values when cloning applications. Removed existing duplicate Redis username and Nixpacks Node version entries.
  • Fixed database startup so configuration files were written before containers started.
  • Preserved application, database, service, and proxy containers during Docker cleanup.
  • Fixed detection of legacy Compose containers for custom start commands and status updates.
  • Restored valid Compose network names with required and alternative variable expressions (#12126).
  • Fixed Infisical secret references that reached containers without expansion (#12128).
  • Fixed S3 database and volume backup uploads on hosts with split DNS (#12129).
  • Fixed custom DNS queries by retrying truncated UDP responses over TCP (#12076).
  • Fixed GitHub App installation after switching teams and showed clear verification errors (#12122).
  • Prevented duplicate upgrades and fixed stalled upgrade progress.
  • Prevented configuration and route cache corruption during startup (#12120).
  • Matched the Railpack build frontend version to the helper's installed CLI.
  • Removed forced HTTP/1.1 for Git repository imports (PR #12080, #11579).
  • Fixed resource name alignment when descriptions were empty (#12127).

Improvements

  • Added a 5 GB free-space check before upgrades, with cleanup controls and a manual override. Automatic upgrades were skipped with a notification when space was low.
  • Updated the sidebar user menu and toggle icon.

What's Changed

Full Changelog: https://github.com/coollabsio/coolify/compare/v4.4.3...v4.4.4

v4.4.3

Fixes

  • Fixed static-site pull request previews that failed with a missing Dockerfile error. (#8238)
  • Fixed the empty terminal container picker for resources with multiple containers. (#12110)
  • Fixed nested Base64 custom labels in API updates and deployments. (PR #11473, #11435)
  • Prevented DNS polling from filling the queue with duplicate file-sync jobs and delaying DNS checks and deployments. (#12098)
  • Fixed the runtime log viewer failing to load with invalid saved filters. (#12101)
  • Fixed missing Caddy traffic analytics after enabling analytics and redeploying applications with managed labels. (#12117)
  • Preserved previously recorded commit messages when redeployments skipped cloning the repository. (#12116)
  • Fixed card title alignment when descriptions were empty. (#12102)

Improvements

  • Removed the truncated page-search hint from the navigation search button.
  • Made dropdown controls more compact.
  • Updated default example repository URLs in development mode to use the main branch.
  • Added AMD64 and ARM64 development images from release branches, with versioned and commit-specific tags.

What's Changed

Full Changelog: https://github.com/coollabsio/coolify/compare/v4.4.2...v4.4.3

v4.4.2

Features

  • Added settings search to the command palette, with Global and This page scopes. (#12111)
  • Added GitHub Actions runner support for servers used for both deployments and builds, with shared-resource warnings. (#12109)
  • Added per-server controls to store full, anonymized, or no client IP addresses in traffic analytics through the UI and API.
  • Added Cloudflare Tunnel updates from server settings, with progress logs and a background restart.

Fixes

  • Fixed unnecessary Docker build cache resets caused by temporary build helper containers. (#11781; closed #11387 and #11525)
  • Fixed deployment of large Docker Compose files, including Sentry self-hosted, with many YAML aliases or build arguments without values. (Closed #11725)
  • Fixed the traffic globe not appearing when country data arrived after the initial load. (#12108)
  • Fixed traffic path rows for different domains and combined overflow entries into one Other paths row.
  • Prevented Chrome local network permission prompts caused by favicons for private network hosts. (#12107)
  • Increased the Cloudflare Tunnel startup timeout and stored new tunnel configurations outside temporary directories.
  • Prevented duplicate form updates.

Improvements

  • Made searchable and multi-select dropdowns consistent across forms.

What's Changed

New Contributors

Full Changelog: https://github.com/coollabsio/coolify/compare/v4.4.1...v4.4.2

v4.4.1

Features

  • Added volume backup success, failure, and warning notifications through team backup notification channels.
  • Added configurable alerts for missing volume backups in the UI and API, with alerts disabled by default.

Fixes

  • Fixed deployment progress checks that stayed active after missing queue jobs exceeded the deployment timeout.
  • Included running scheduled tasks and database and volume backups in progress checks.
  • Fixed the log viewer when its parent component refreshed.
  • Recorded database and volume backups that missed their scheduled start as failed and sent failure notifications.
  • Fixed Telegram topic routing for backup warnings, missing volume backups, and volume recovery failures.
  • Set database sessions to UTC to prevent timestamp offsets.

Improvements

  • Added SCHEDULED_JOBS_DISPATCH_MODE to select sequential or concurrent schedule dispatch. Self-hosted instances used sequential dispatch by default to reduce CPU and memory use; cloud instances kept concurrent dispatch.
  • Updated Sentinel to 1.0.2 and pinned the Sentinel host image to a fixed digest.

Full Changelog: https://github.com/coollabsio/coolify/compare/v4.4.0...v4.4.1

v4.4.0

This release adds built in traffic analytics for Traefik and Caddy, experimental support for SQLite as a database, readable container names with a configurable container prefix, third-party secret managers, Cloudflare DNS management, OpenID Connect sign-in, GitHub Actions runners on build servers, and Docker registry logins. It also includes many fixes.

Added

  • Traffic analytics for Traefik and Caddy using the new Rust version of sentinel (#11292)
    • Sentinel ingests the proxies JSON access logs and stores aggregate rollups only. Raw access logs are rotated on the server.
    • Per-server toggle on the new server Analytics page, off by default. Enabling it restarts the proxy and Sentinel. Optional MaxMind license key; GeoIP works without one.
    • Views: team dashboard widget, global Analytics page with server and application filters, per-server Analytics page, per-application and per-service Analytics tab.
    • Metrics: requests, bandwidth, unique visitors, and p95 latency KPIs with sparklines, requests chart, status-code breakdown, interactive globe with country breakdown, device, path, host, referrer, and browser breakdowns, optional live refresh for the 24h range.
    • Settings for top-N, sampling threshold, retention, and GeoIP. Nginx is out of scope.
    • Caddy applications and services need a redeploy after the toggle changes so their logging labels are updated. Caddy needs caddy-docker-proxy 2.9 or newer.
image image
  • SQLite database (#11992)
    • Add SQLite as a standalone database, based on a custom image (peakimages/sqlite).
    • Connect a SQLite database to an application or Docker Compose application on the same server in one click. Coolify mounts its data volume, protects connected volumes, and lets you unlink applications.
    • Back up and restore SQLite databases, including scheduled backups.
image
  • Container name prefix for generated names (#11704)

    • Optional prefix for the generated (rolling update) naming mode, set in the application's container settings or via custom_container_name_prefix in the API. It is slugified, limited to 30 characters, and unique per server. Rolling updates keep working compared to the custom container name (consistent mode) which loses rolling updates.
    before after
    single container app (prefix: shop-api) k9p2m4x7q1w3e5r6t8y0u2i4-20260908T141530 shop-api-20260908T141530
    compose service web (prefix: shop-api) web-k9p2m4x7q1w3e5r6t8y0u2i4-20260908T141530 web-shop-api-20260908T141530
  • Split action buttons (#11409)

    • Resource action menus show the primary action as a one-click button with secondary actions in a dropdown. This improves UX as the primary action is now only one click away, rather than two clicks and hidden inside a dropdown menu
  • Autofocus on auth forms (#11324)

  • Third-party secret managers (#11474)

    • Doppler, Infisical, and HashiCorp Vault as secret sources for applications, services, and standalone databases.
    • {{vault.KEY}} references are resolved during deployment and database start. Values are never stored in Coolify's database and are redacted from deployment logs.
    • Key browsing, bulk import as references, autocomplete, provider validation, and clear deployment errors for missing secrets. Build reuse is skipped when build-time secret references may have changed.
  • Team audit log (#11462, #11788)

    • Searchable, filterable log of UI, API, MCP, and webhook activity under Team → Audit Log, covering resource changes, deployments, backups, proxy controls, membership, token, and integration changes, account security events, and server, application, service, and instance settings.
    • Entries show the previous and new value of each changed field under "View changes". Changes are encrypted at rest, and secrets, commands, and configuration content are left out.
    • Stores actor, resource, and request context with sensitive metadata redacted. Events are pruned after 90 days.
    • Team admins and owners can read events with GET /audit-events in the API.
  • Database import API (#11699)

    • Import backups into standalone and service databases from an upload, a server path, or S3 storage: POST /databases/{uuid}/imports/uploads, POST /databases/{uuid}/imports, GET /databases/{uuid}/imports/{activity_id}, and the same under /services/{uuid}/databases/{database_uuid}/imports.
    • Uploading and starting an import need the write permission. An import from a server path also needs deploy.
  • Cloudflare integration tokens (#11359)

  • Cloudflare DNS record management (#11699)

    • From the application and service Domains pages, Coolify matches hostnames to zones reachable with the team's Cloudflare tokens and creates records pointing at the server.
    • Detects records that already point elsewhere and offers a replace action, shows a "Managed by Coolify" badge, and deletes managed records with the domain after confirmation.
  • OpenID Connect single sign-on (#10543)

    • Sign in and register with any OIDC provider.
    • Registration policy per provider: allow or block password registration and user creation, optionally auto-join new users to the Root team.
    • Linked SSO identities are shown on the user profile. Provider-managed email addresses cannot be changed in Coolify.
    • Microsoft Entra ID: use https://login.microsoftonline.com/<tenant ID>/v2.0 as the issuer URL and add the optional ID token claims email and xms_edov to the app registration. xms_edov counts as a verified email.
  • Alpine Linux server support (#6189)

    • Add and update alpine based servers with apk.
  • Copy environment variable values (#11379)

    • Copy resolved values directly from the environment variables page. Shared variables and $SERVICE_* references resolve to their actual value, except references to locked shared variables. Locked variables have no copy button.
  • Named volumes (#7591)

    • New volume mounts use named Docker volumes instead of host source paths, including on Swarm. New volumes are pre-filled with a resource-based name.
    • Existing bind mounts keep their source paths, which are shown read-only.
  • Server roles for deployments and builds

    • Set a server to Deployments only, Builds only, or Deployments and builds in the server settings or via server_role in the API. The deprecated is_build_server field still works.
    • Deployments only servers never build images themselves, and applications on them need a Docker image name.
    • Choose per team whether builds fall back to the deployment server when no build server is usable.
  • GitHub Actions self-hosted runners (beta) (#12054)

    • Builds only servers can run GitHub Actions workflow jobs for an organization GitHub App. Each job gets a new runner container that is removed when the job ends.
    • Set labels, parallel runners, CPU and memory limits, the runner image, timeouts, and Docker in jobs (privileged Docker-in-Docker, Sysbox, or none) on the new server GitHub Runners page. The host Docker socket is never mounted.
    • Jobs started by pull requests are refused unless you allow them.
    • The server role cannot be changed while runners are enabled, and a server can be reserved for runners so it takes no application builds.
  • Docker registry logins (#12048)

    • The new Registries page and the Registries tab of each server list the registries a server is logged in to and the registries its applications need.
    • Log in, update, and log out with presets for Docker Hub, GHCR, GitLab, Google Artifact Registry, Azure ACR, and AWS ECR, or any other registry. Coolify runs docker login on the server and does not store the token.
    • API: GET /servers/{uuid}/registries, POST /servers/{uuid}/registries, POST /servers/{uuid}/registries/{registry}/check, and DELETE /servers/{uuid}/registries/{registry}.
  • Docker images page (#11689)

    • The new server Images page lists every image with its size, age, and the containers that use it, and shows the total and reclaimable disk space. Unused images can be deleted after typing their reference.
  • Traefik ACME certificates (#12015)

    • View and delete certificates stored in Traefik's acme.json on the new TLS Certificates page in the server's Proxy menu. Deleting does not revoke the certificate, and the server shows that the proxy needs a restart.
    • Coolify backs up acme.json before every change and keeps the last 10 backups, which can be restored or deleted on the same page.
  • Account deletion (#12088)

    • Delete your own account from the profile page. Teams where you are the only member are deleted, you are removed from all other teams, and your API tokens and sessions are revoked.
    • Deletion is blocked for the root user, while a team you own alone still has servers, projects, or Git sources, and while a shared team would be left without an admin or owner.
  • Preview deployments API

    • GET /applications/{uuid}/previews and GET /applications/{uuid}/previews/{pull_request_id} return preview deployments. POST /applications/{uuid}/previews opens or redeploys the preview of a pull request and needs the deploy permission.
  • Reopen the live deployment log (#11783)

    • Services, databases, and applications show a "Deploying… View log" indicator that reopens the running log. Deploy, Start, or Restart during a running operation reopens the log instead of failing.
  • Application settings filter (#11783)

    • Filter the application settings sidebar, including sub-pages such as Advanced → Proxy.
  • Use variables such as ${NETWORK:-coolify} or ${COMPOSE_PROJECT_NAME}_default in Compose network names of applications and services, including a service's networks: list. A network name that is a single variable is added as an editable environment variable.

  • Delete a server from its cloud provider (Hetzner, Vultr, or DigitalOcean) through the API with delete_from_provider=true on DELETE /servers/{uuid}. (#12026)

  • Give additional users access to the Horizon dashboard with the HORIZON_ALLOWED_EMAILS environment variable (#9354)

  • Show pending team invitations on the dashboard.

  • Test S3 storages that were marked unusable again every hour, so they become usable on their own once the connection works.

  • Generate a random manual webhook secret with one click.

  • Show a warning icon on the server Proxy menu when the proxy is not running.

  • Link the Healthcheck row in the status summary of applications and databases to the healthcheck page.

  • Add a favicon, an Apple touch icon, and a web app manifest.

  • Add OAuth settings to auto-join new OAuth users to the root team and to disable password registration while OAuth is on. The login page then shows "Only OAuth registration is enabled."

  • Add a shared copy component which is used across resource (#11368)

Changed

  • Realtime runs on Laravel Reverb inside the Coolify container, next to the terminal server. The separate coolify-realtime (Soketi) container is no longer used; existing proxy routes and port settings keep working, and a soketi override in docker-compose.custom.yml is still accepted. (#10530, #11935)
  • Generated container names use an ISO 8601 timestamp suffix (<uuid>-20260908T141530) instead of HHMMSS plus microseconds (the old suffix is still recognized). (#11702)
  • Containers are labelled with coolify.applicationUuid, coolify.serviceUuid, coolify.service.subUuid, and coolify.databaseUuid instead of numeric ID labels. Existing containers keep working and get the new labels on the next deploy or restart.
  • Database restores: the import command is read-only, and single-database PostgreSQL restores no longer drop existing objects by default. The new "Replace objects that already exist" option (replace_existing in the API) restores the previous --clean behavior. PostgreSQL archive restores also skip owners and privileges unless "Keep owners and privileges" (keep_owners) is set. (#11699)
  • Database restores support PostgreSQL custom and tar archives, MongoDB archives and dump directories, and bz2, xz, and zip files. All-databases MySQL and MariaDB restores can restore users and privileges (restore_mysql_users), and SQLite restores can pick the target file (sqlite_database). The import form shows the exact restore script.
  • All OAuth providers are managed from one Settings → Authentication page with provider icons and clearer login buttons. (#10543)
  • OAuth accounts link to a provider identity, not only to an email. The first OAuth login links the account. To link an existing account, the provider must verify the email, except for accounts without a password that an OAuth login made before this release. New accounts follow the registration settings.
  • Each account links to one OAuth provider. If you used two providers with the same email before, use the first one you sign in with after the upgrade.
  • If you rename a self-hosted GitLab, Authentik, Clerk, or Zitadel host, or change the Azure tenant, run php artisan oauth:rekey <provider> --from=<old URL or tenant> so linked accounts keep working.
  • Authentik 2025.10 and later: to link an existing Coolify account to Authentik, the email scope must return email_verified: true. Add a scope mapping in Authentik under Customization → Property Mappings that returns {"email": request.user.email, "email_verified": True}, and use it on the provider instead of the default email mapping.
  • OAuth logins ask for the 2FA code if 2FA is on, and SSO users can turn on 2FA without a password.
  • Users with a linked OAuth identity confirm destructive actions with the typed confirmation only, without a password.
  • The Google "Hosted domain" setting is enforced. * allows any Workspace account.
  • Denied OAuth logins show the reason on the login page instead of a generic error.
  • Metrics collection settings (collection rate, history retention, push interval) moved from the Sentinel page to the Charts page. The Sentinel custom image is saved with an Apply and restart button instead of autosave. (#11292)
  • Chart tooltips show the viewer's local time and UTC. (#11292)
  • The container log viewer has Time, Type, and Message columns, and log lines expand with pretty-printed JSON (#11292). Only the visible rows are rendered, so large logs stay responsive.
  • Standalone database starts run through a queued job so credentials from secret managers can be resolved. (#11474)
  • On new KeyDB and Dragonfly databases, a REDIS_PASSWORD environment variable sets the server password and the connection URLs. Databases created before this release keep their stored password unless the variable reads a secret manager.
  • New proxy configurations use Traefik v3.7 and caddy-docker-proxy 2.13.
  • Coolify no longer reconnects the proxy to all Docker networks every hour and on server checks. The proxy is connected when a destination is created, when an application or service is deployed, and when the proxy starts or restarts.
  • Environment variable names must match [A-Za-z_][A-Za-z0-9_.]*. Existing runtime-only variables with other names, such as my-var, still deploy with a warning and a suggested name, while invalid build-time names stop image builds. (#11917)
  • Applications on multiple servers: additional servers must use the same proxy (Traefik or Caddy) as the primary server and always pull the image the primary server pushed instead of building it. Persistent volumes and Docker Compose applications can no longer be combined with multiple servers. Existing setups get a warning in the deployment log. (#12053)
  • Scheduled database backups, scheduled tasks, volume backups, and Docker cleanups are each dispatched every minute by their own scheduler process instead of one queued job, so a busy queue or a slow schedule type no longer delays the others.
  • Stopping or deleting a resource runs Docker cleanup only when the server's disk usage is at or above its cleanup threshold and no cleanup finished in the last hour. Only one cleanup runs per server at a time.
  • Hourly Sentinel version checks and weekly server patch checks run at a different time for each server instead of for all servers at once.
  • High disk usage notifications repeat at most once per interval for each server, 24 hours by default instead of about hourly. Set the interval in Server → Advanced or with server_disk_usage_notification_interval_hours in the API. A new alert is sent earlier when usage dropped at least 5 points below the threshold and rises again.
  • Logging in no longer accepts a pending team invitation automatically. Invitations are accepted on the invitation page.
  • SSH_COMMAND_TIMEOUT=0 or an invalid value no longer removes the time limit of remote commands. The default of 3600 seconds is used instead.
  • Docker Swarm can only be enabled for teams that already use it.
  • Resource settings sidebars collapse their groups again, with the group of the active page open. (#11783)
  • Production and preview environment variables are shown in separate labelled sections. (#11783)
  • Project cards and lists show compact resource stats, the server list shows resource count and status, and database URLs have a copy button. (#11783)
  • Notification channel toggles and database and service actions update instantly. (#11783)
  • The running deployments indicator moved from a floating button into the sidebar (the top bar on mobile) and is also shown on the dashboard.
  • The remaining native browser confirmation dialogs are replaced with Coolify confirmation modals.

Security

  • Issue short-lived terminal session tokens on the server instead of sending SSH commands through the browser (#11942)
  • Require the two-factor challenge for OAuth sign-in, link existing accounts only when the provider verified the email address, and enforce the configured Google Workspace domain (#11907, #11989)
  • Build email verification links and the default OAuth callback URL from the instance URL instead of the request's Host header
  • Remove the unused PUT /user/profile-information route, which changed the account email without verification
  • Validate Git-based Docker Compose applications against Compose injection when they are loaded, saved, and deployed
  • Validate git refs before a deployment is queued and again when it starts (#11905)
  • Validate environment variable names before they are used in Docker commands and quote docker run -e values (#11917)
  • Validate custom internal container names, Compose network names, and static images, and quote them in Docker commands (#11912, #11914, #11958)
  • Quote container names, paths, owners, and modes in backup, database start, scheduled task, stop, service, and file storage commands (#11970, #11979, #11983, #11989)
  • Validate Compose build paths, file storage paths, and Compose volume paths. Relative file storage paths must stay inside the resource directory, Coolify never deletes host paths outside it or writes through symbolic links there, and API tokens need the deploy permission for mounts outside it (#11911, #11943, #11944, #11993)
  • Validate proxy configurations before they are saved (#11923)
  • Stop exposing the Traefik dashboard in new proxy configurations and remove the legacy dashboard router from saved ones (restart the proxy to apply)
  • Deploy pull requests from other repositories on GitLab, Gitea, and Bitbucket only when public preview deployments are enabled (#11922)
  • Hide matching applications in manual webhook responses and throttle repeated distinct signature failures per client address, repository, and branch, without blocking correctly signed deliveries (#11989)
  • Require at least 16 characters for new or changed manual webhook secrets
  • Reject Stripe webhooks when Stripe is not fully configured (#11915)
  • Enforce team ownership and permissions in onboarding, deploy key selection, notification settings, team invitations, and tag deployments (#11913, #11920, #11960, #11966, #11989)
  • Use the team that owns a resource instead of the currently selected team for permissions, secret redaction, and selectable servers, destinations, S3 storages, private keys, Git sources, cloud provider tokens, tags, and shared variables, so switching teams in another tab cannot mix teams
  • Accept and use only private keys of the same team when adding a server, on GitHub App and GitLab source settings, and for GitHub App tokens, git commands, SSH connections, and backup downloads
  • Keep existing SSH private keys out of the browser during onboarding and require update permission on a key to select it
  • Hide HTTP basic auth passwords, log drain keys, and the Sentinel token from members without update permission (#11961)
  • Hide Docker Compose content, file mount content, environment variable values hardcoded in the Compose file, server shared variable values, and proxy configuration files from members without update permission
  • Keep S3 storage keys and database passwords hidden from members after a failed save or a page refresh
  • Show container logs and scheduled task commands and output only to users who can update the resource, and require the read:sensitive permission for the log endpoints and scheduled task output in the API
  • Return the saved proxy configuration and validation logs of servers in API responses only with the read:sensitive permission
  • Keep the reference instead of the value when an environment variable references a locked shared variable
  • Show the team Danger Zone only to the team owner
  • Prevent root team admins from deleting the root user, root team owners, or their own account in the team admin view
  • Check permissions before import file checks on the database import form and before Vultr status refreshes
  • Lock the domain and DNS validation state on the Domains pages against changes from the browser
  • Require the deploy permission for instant_deploy in the API and accept only known API token permissions (#11969, #11981)
  • Enforce the server limit on every server creation path, including the API, onboarding, and cloud providers (#11968)
  • Send Git source API requests through the outbound URL guard while still allowing self-hosted Git sources on private networks, and block NAT64 addresses (#11964, #11967)
  • Keep secrets out of deployment logs when a command fails, including multiline and literal values (#11974)
  • Encrypt remote commands stored for queued tasks, remove them when the task ends, and keep the command line out of error logs, timeout errors, backup logs, and failure notifications
  • Require an instance admin for impersonation and the team admin view (#11989)
  • Rate limit logins per normalized email address (#11989)
  • Update league/commonmark to 2.10.3, which fixes GHSA-8rr7-cvq3-gmfh
  • Remove an unused application config download action

Fixed

  • Custom container names (#11701)
    • A stored custom name was applied on deploy even when consistent naming was off, while the UI hid the field. Those applications are migrated to consistent naming so their names do not change.
    • Custom names are only used in consistent naming mode. In the API, custom_internal_name turns consistent naming on, and sending it with is_consistent_container_name_enabled: false returns 422.
    • Docker Compose applications ignored the custom name and now use it: web-shop-api instead of web-<uuid>.
    • A name that another application on the same server already uses is no longer saved.
  • Deployments
    • Concurrent deployment requests respect the server queue limit, no longer queue duplicates of the same commit, and can no longer start the same queued deployment twice. (#11987)
    • A deployment that cannot be started, for example because of an invalid registry image name, is marked as failed instead of staying in progress and blocking later deployments.
    • An error after the new container passed its health check, for example in a notification, no longer removes the new container or marks the finished deployment as failed.
    • Cancelling a deployment stops the helper container on the build server and on the deployment server, and no longer runs kill -9 on the server with a process ID from the Coolify container.
    • Deployments connect the proxy to the destination network before the containers start.
    • Deleting a server marks its queued deployments as failed instead of leaving them queued.
    • Deploying, closing, or deleting a preview no longer removes the containers of other pull requests whose number starts with the same digits, such as PR 1 and PR 12.
    • Loading pull requests and pull request status updates are only used for applications with a GitHub App source.
  • Applications on multiple servers
    • Stop reaches every server even when one of them is unreachable, file mounts are written on every server, and additional servers deploy the same commit, rollback, and image tag as the primary server.
    • Queued deployments on additional servers start when the running deployment finishes or is cancelled.
    • One deployment notification is sent after all servers finish.
    • Deployments without a Docker image name fail with a clear error when started from a webhook or the API.
  • Servers
    • A server is marked unreachable only after two consecutive failed connection checks instead of one, and a single failed check no longer marks all resources on the server as exited.
    • Deployments recheck a server that is marked unreachable before failing with "Server is not functional".
    • Queue workers keep using SSH multiplexing after a server connection check.
    • Remote commands that failed on the server are no longer run a second time because their output contained words such as "connection refused". A failed S3 backup upload shows the real error.
    • Containers are matched to their resource by UUID, so containers of another Coolify instance that manages the same server are no longer mixed up with resources that have the same ID.
    • Leftover helper containers are cleaned up on every server instead of one server per run.
    • A manual Docker cleanup that starts while another cleanup runs waits instead of being dropped, and a failed cleanup marks only its own execution as failed.
    • Stopped Hetzner, DigitalOcean, and Vultr servers have the Power On button again.
  • Servers with a non-root SSH user
    • Starting and restarting the proxy and loading and saving its configuration work when the user cannot enter the proxy directory.
    • Database starts and backups, application deployments, service starts, the log drain, and volume clones work when the user cannot write to /data/coolify.
    • Pipes inside quoted strings, such as Docker --format templates, are no longer rewritten with sudo.
  • Sentinel
    • Sentinel is started with --restart unless-stopped, so Docker restarts it after a crash or reboot.
    • A Sentinel that runs but stopped pushing, or is unhealthy, is restarted, and Sentinel is no longer restarted in a loop while it starts.
    • Two Sentinel starts for the same server no longer collide, and Sentinel checks are skipped on unreachable servers. (#12100)
    • Changing the instance URL updates the Sentinel URL of remote servers that use the generated URL.
    • Container health changes show in the UI after the next push instead of up to five minutes later, and the Sentinel page shows the last push error while Sentinel is out of sync.
  • Scheduled jobs and backups
    • Scheduled backups whose queued job was lost are queued again after 60 minutes. Lost scheduled tasks and Docker cleanups are recorded as failed, and the team is notified.
    • One schedule that fails no longer stops the other due schedules, and schedules with a fixed time run once when daylight saving time repeats an hour.
    • Scheduled backups use the current server state instead of a state cached by the queue worker.
    • Backups and scheduled tasks that exceed their timeout fail with the timeout error instead of staying open.
    • Two backups of the same database that start in the same second no longer write the same file, and a backup is skipped while the database starts, restarts, or imports.
    • "All databases" backups of PostgreSQL, MySQL, and MariaDB fail when the dump command fails instead of saving an incomplete archive.
    • In a backup of several databases, every database gets its own result and finish time.
    • Failed volume backup recovery no longer piles up retry jobs or blocks new backups. Executions that need action show "Needs attention" with the reason and a retry button.
    • Settings → Backup loads when the Coolify database has no backup schedule and always uses the instance database.
    • Instance cleanup jobs are no longer blocked for up to 24 hours after a worker was stopped mid-run.
    • php artisan scheduled:diagnostics no longer changes scheduler state.
  • Databases
    • "Regenerate SSL Certificates" writes server.crt and server.key for PostgreSQL, MySQL, MariaDB, Redis, KeyDB, and Dragonfly instead of server.pem, so these databases start again, and the CA file on the server matches the CA that signed the certificate.
    • New and regenerated database SSL certificates use a P-256 key, so Electron-based clients such as MongoDB Compass can connect.
    • The MongoDB health check pings the database instead of always passing. (#11730)
    • ClickHouse databases with a file mount keep their data volume. Affected databases keep their current data and ask to adopt it before the next start.
    • Databases and services show their new status right after a start.
  • Database restores
    • Single-database MySQL and MariaDB restores decompress .gz archives instead of piping them into the client, and dump-all MySQL restores emit valid shell environment variables. (#11699)
    • Database restores detect the backup format before changing anything. "All databases" imports no longer drop everything when the file cannot be restored, PostgreSQL restores run in one transaction, and replace restores of SQL backups only swap in the new database on success.
    • Interrupted or stale database imports are stopped and cleaned up and no longer block later imports, and a second start, restart, or import while one is running is rejected (409 in the API). Long imports are no longer cut off by the 10-minute task timeout.
    • Imports use the selected source. A checked server path is no longer replaced by an earlier upload that was never imported.
  • Compose and storage
    • Compose volumes declared as external are used as declared instead of being renamed to <uuid>_<name>. Existing resources keep their old volume, the deployment log explains how to switch, and the storage page lists external volumes. Preview deployments keep their own volume.
    • Compose volumes keep their driver, driver_opts, and labels when Coolify renames them (volumes created before the upgrade keep their settings), NFS and CIFS volumes are no longer dropped from a service that has other volumes, and ../ bind sources resolve to the parent directory.
    • Deleting a Docker Compose preview removes only the networks and volumes Coolify created for it, instead of every network and volume in the Compose file.
    • Content files are written before the containers start, for every build pack and on every server of the application, and their content is no longer deleted when Docker created a directory at the file's path.
    • File and directory mounts with a relative path are created inside the resource directory instead of the SSH user's home directory, and cloned volumes keep the driver and options of the source volume.
    • Service switches save without saving pending Compose edits, services with an empty Compose file no longer block proxy starts, and Compose comments are kept. (#11985)
    • Starting a service after the configuration of an existing volume changed no longer skips the next start step.
  • API
    • GET /applications/{uuid}/logs respects service_name and returns 404 when no running container matches. (#12066)
    • POST /deploy with pull_request_id builds the pull request instead of the base branch for deploy key and public repository applications.
    • Creating a Docker Compose application no longer generates an unused top-level domain.
    • Pull request IDs above the integer range return a validation error instead of a 500, also in the MCP deploy tool.
    • Database create requests are validated (422 for invalid input), accept numeric resource limits, and read instant_deploy as a boolean.
    • The database list no longer returns backup configurations of another database type with the same ID.
    • GET /servers/{uuid}/domains?uuid=<application uuid> filters by application instead of returning 404.
    • The API reference documents PATCH /security/keys/{uuid} instead of PATCH /security/keys.
  • Event toggles on the Email notification settings page work again. (#11512)
  • Email notification and log drain settings are restored when enabling them fails, other notification toggles return to their saved state when saving fails, and conflicting email providers can no longer be enabled together. (#10543)
  • Resend errors show a clear message, and an email that Resend did not accept is no longer counted as sent.
  • A proxy in a restart loop sends at most one "container restarted" notification per hour.
  • GitLab OAuth sign-in reads the user from GitLab API v4 instead of the removed v3 endpoint.
  • Revoking or expiring a team invitation no longer deletes a user who already joined another team.
  • Pages that stay open while you switch teams in another tab no longer fail when realtime events arrive.
  • Members get a 403 instead of a 500 on the Cloud Tokens page, and non-admins are redirected from the OAuth settings page.
  • Gitea preview deployments use the pull request's head commit instead of HEAD.
  • Webhooks with pushes without commits or malformed payload values get a clean response instead of a 500.
  • Re-checking DNS replaces a stored result, so application, service, and preview domains no longer keep their first status. (#11951)
  • DNS checks compare IPv6 addresses by value, so the same address written differently matches.
  • Copying DNS record values from the DNS entries dialog works on instances served over plain HTTP.
  • Services on unreachable servers can be removed from Coolify only. Deleting any resource on an unreachable server warns that its Docker resources stay on the server and notifies the team afterwards.
  • The service list no longer becomes empty when the template CDN returns an empty or invalid response.
  • The Grafana admin user and password fields show for Grafana images with a registry prefix, such as docker.io/grafana/grafana. (#10617)
  • The terminal shows an error instead of an endless "connecting…" spinner when a session cannot start.
  • The Logs page shows why containers could not be loaded instead of "No containers are running".
  • Applications without a configuration snapshot show pending configuration changes again.
  • "Generate default" for the custom Nginx configuration of a static site with SPA enabled generates the SPA configuration.
  • Saving an environment variable shows validation errors instead of a generic error.
  • The "Never" expiry of a new API token is kept instead of falling back to 30 days.
  • GitHub sources have the Test connection button again.
  • The duplicate check for private keys only looks at the team the key belongs to.
  • The 2FA setup URL on the profile page is shown and copied with & instead of &amp;.
  • The Help form shows an error when the feedback could not be delivered.
  • Quick adding tags with special characters, such as apostrophes, works. (#11971)
  • Additional destinations can no longer be added twice.
  • Applications with a git:// repository URL no longer crash when showing commit links.
  • Running the install script again no longer changes the owner and permissions of resource data under /data/coolify, and it waits for the Docker daemon on OpenRC.
  • The daily database cleanup deletes old rows in batches instead of one long DELETE.

Services

New

  • 9router: AI coding gateway that routes coding assistant requests to 40+ LLM providers with fallback (#11592)
  • Bulwark: JMAP webmail (#11180)
  • Docling: converts PDF, DOCX, PPTX, images, and HTML to Markdown and JSON (#9121)
  • Engram: persistent memory sync server for AI coding agents over MCP (#10808)
  • Hermes Agent: autonomous AI agent with persistent memory, scheduling, and a web dashboard (#10703)
  • Honcho: memory and reasoning for personalized AI agents (#11184)
  • Lidarr: music collection manager for Usenet and BitTorrent (#11576)
  • Linkwarden: collaborative bookmark manager that preserves web pages (#11561)
  • Obsidian: the Obsidian desktop app in the browser (#10704)
  • OpenWA and OpenWA with PostgreSQL and Redis: self-hosted WhatsApp API gateway with a dashboard (#11448)
  • PeerTube: decentralized video platform (#9564)
  • Portabase: database backup and monitoring (#11054)
  • Snipe-IT: IT asset management (#10544)
  • Zero: query-driven sync engine for TypeScript apps backed by Postgres (#10713)

Updated

  • Appwrite 2.0.0. New Appwrite services use PostgreSQL instead of MariaDB. (#10810)
  • Authentik 2026.5.6, with data stored in ./data instead of ./media. (#8791)
  • Autobase 2.11.0 with DBDesk Studio. (#9850, #11749)
  • Beszel Agent 0.19.0 with configurable LISTEN and HUB_URL. (#11647)
  • Bugsink requires an admin email and adds email, site title, and time zone settings.
  • Budibase no longer runs Watchtower.
  • EMQX Enterprise 6.2.2. (#10922)
  • Garage 2.3.0 with a generated access key, secret key, and default bucket. (#10735)
  • Hermes Agent with WebUI uses Hermes Agent v2026.6.5 and Hermes WebUI 0.51.489. (#10702)
  • Homarr 1.74.0. (#9821)
  • Karakeep 0.33.2 with the Karakeep Chrome image and Meilisearch 1.41.0. (#11245)
  • Plausible 3.2.1, which fixes CVE-2026-8467. ClickHouse settings match upstream: a 30-day query log, IPv4-only listening, and lower resource usage. (#10975, #11939)
  • Pterodactyl Panel and Pterodactyl with Wings 1.12.3 are available again. (#11173)
  • Rallly uses PostgreSQL 18, requires an initial admin email, and adds a registration toggle.
  • SigNoz 0.137.1 with ClickHouse 25.12.5. (#11346)
  • Terraria Server 1.4.5.0 with a generated server password. (#11322)
  • Vikunja and Vikunja with PostgreSQL have health checks and use VIKUNJA_SERVICE_SECRET. (#10331)
  • Mattermost is marked as AMD64 only.
  • osTicket is hidden from the service list. (#10621)

Fixed

  • AFFiNE: the Postgres health check uses the configured user instead of affine.
  • Budibase: one-click deployments work with the budibase/database image. (#9828)
  • Bugsink: superuser creation works, and the MySQL user and password show in the UI. (#11225)
  • Buzz: desktop app origins are allowed by CORS. (#11046, #11741)
  • Chatwoot: the Sidekiq health check is lighter. (#10920)
  • Chibisafe: uploaded files are served from the correct uploads volume. (#11804)
  • CyberChef: uses port 8080. (#11170)
  • Deno KV: its options show up again. The template is renamed from denoKV to deno-kv, and the old key still works in the API and for existing services.
  • Dozzle with auth: documents the bcrypt password hash and the correct default password. (#11235)
  • Fider: BASE_URL no longer includes the port, which caused CSP errors. (#11682)
  • OpenClaw: the generated username shows in the UI. (#8629)
  • Rallly: login no longer fails with an invalid origin error. (#9536)
  • SigNoz: no more broken pipe errors. (#11640)
  • TriliumNext: runs on ARM64. The health check uses Node instead of wget.
  • Twenty: connects to its backend again. (#11562)
  • Vaultwarden: fresh installs with Vaultwarden 1.37 work with the SQLite database URL. (#11471)

Removed

  • Unused persistent storage Show Livewire component and view. (#11615)
  • Unused Blade and Livewire components and views.
  • Legacy Laravel Dusk browser tests, DuskServiceProvider, and the laravel/dusk dependency. Browser tests use the Pest browser plugin.
  • Laravel Nightwatch integration: the laravel/nightwatch dependency, the Nightwatch agent service in the Coolify container, and the NIGHTWATCH_ENABLED setting.
  • Settings → Scheduled Jobs monitoring page.
  • The PROXY_CONNECT_NETWORKS_INTERVAL_SECONDS setting.
  • The TrustHosts middleware, which never checked the host.

Refactored

  • Container name generation uses one code path for single-container and Compose applications. (#11701)
  • Database start command execution is extracted into a shared service and job. (#11474)
  • Action buttons share one split-button component, removing duplicated markup and CSS. (#11409)
  • Volumes and directory mounts are separated in the storage UI. (#7591)
  • Team broadcast events share one trait and always name their team.

Issues

v4.3.23

Features

  • Added a read-only API endpoint to retrieve preview deployment runtime logs by application UUID and pull request ID, with line limits and optional timestamps. (#11884)

Fixes

  • Fixed deployment status and metadata processing when remote command output contained leading or trailing whitespace.

What's Changed

Full Changelog: https://github.com/coollabsio/coolify/compare/v4.3.22...v4.3.23

v4.3.22

Breaking Changes

  • Removed host-path configuration for persistent volumes from the UI and API. API requests that include host_path are now rejected.

Features

  • Added a pull request settings modal with refresh and deployment controls for preview deployments.
  • Added real-time Sentinel synchronization status across server and application views.
  • Added separate options to delete local and S3 archives when a volume backup schedule was removed.

Fixes

  • Generated separate Traefik rules for comma-separated Docker Compose preview domains, which fixed broken preview routing (#11812, closed #7915).
  • Fell back to the system DNS resolver when configured resolvers returned no address records (#11811, closed #11810).
  • Preserved whitespace in streamed command output, which prevented Docker Compose argument injection from corrupting Dockerfiles (#11466, closed #11386).
  • Preserved pull request filters in deployment history and showed the active filter.
  • Redirected team switches to the dashboard to prevent invalid cross-team pages.

Improvements

  • Made scheduled tasks, database backups, volume backups, and Docker cleanups execute only once per occurrence across distributed schedulers.
  • Improved volume backup execution details and archive actions on mobile devices.
  • Simplified persistent storage controls and kept volume actions on one line.

What's Changed

Full Changelog: https://github.com/coollabsio/coolify/compare/v4.3.21...v4.3.22

v4.3.21

Features

  • Made restart limits opt-in for applications, preview deployments, and service applications. Existing resources that still used the previous limit of 10 restarts were reset to unlimited.

Fixes

  • Hid application names, server names, deployment URLs, team member emails, and job IDs from the Helper deployment check unless detailed output was explicitly requested.

Improvements

  • Updated the supported Traefik patch releases to 3.7.13, 3.6.25, and 2.11.57.

Full Changelog: https://github.com/coollabsio/coolify/compare/v4.3.20...v4.3.21

v4.3.20

Features

  • Added an All option to the log viewer and accepted lines=all across application, database, and service log APIs. The existing -1 value remained available for compatibility.

Fixes

  • Fixed scheduled backup deletion for service databases so it kept the database context and returned to the correct backup page.
  • Preserved each service component’s stored application or database type when generating Traefik labels.
  • Restored hourly Sentinel version checks for enabled, eligible servers while continuing to exclude build servers.

Improvements

  • Ran Traefik version checks whenever Coolify checked for updates instead of only once a week.
  • Updated Coolify Helper to 1.0.17 and moved the bundled MinIO client to a pinned AIStor release.

Full Changelog: https://github.com/coollabsio/coolify/compare/v4.3.19...v4.3.20

v4.3.19

Breaking Changes (well not breaking, but kinda, not sure haha)

  • Made Sentinel mandatory on regular servers. Existing regular servers were enabled automatically, and the enable or disable setting became read-only in the UI and API. This is mandatory for upcoming features. Sentinel will have a bigger responsibility.

Features

  • Restored each user's last active team after login and added a team picker when no saved team was available. (#11503)
  • Moved service application and database settings into a modal and added Docker restart-limit settings, including API support for max_restart_count.
  • Added indexing, redirect, and hostname regeneration controls to application, preview, and service domain editors.

Fixes

  • Prevented duplicate two-factor challenge submissions and redirected stale authenticated submissions instead of returning HTTP 419. (#11223, closed #10670 and #10731)
  • Accepted custom usernames in SCP-style SSH Git URLs across source setup, API creation, webhooks, clones, and repository links. (#11685, closed #11686)
  • Accepted uppercase letters in existing S3-compatible bucket names. (closed #11536)
  • Detected Docker Compose domain conflicts across service domains and treated HTTP and HTTPS forms as the same routing identity.
  • Preserved inherited service ports instead of saving them as overrides, and ignored hostless URLs when deployments calculated port overrides.
  • Saved Compose environment files atomically to prevent partial writes and truncated files.
  • Made the "Restart Limit Reached" email notification toggle work. (closed #11705)
  • Distinguished same-named application containers on different servers in the terminal.
  • Fixed sidebar preference handling, application domain display, two-factor status display, and duplicate metrics status badges.

Improvements

  • Pulled image-based Docker Compose services before stopping the current deployment, which reduced downtime and stopped deployments early when an image pull failed.
  • Improved domain editing and queued DNS checks across applications, previews, and services. DNS checks now ran only after relevant hostname or scheme changes.
  • Improved mobile application settings navigation, pinned domain save controls, compacted service domain cards, and made view controls consistent.
  • Improved the environment variable editor, modal scrolling, button loading states, and backup settings layouts.
  • Upgraded Sentinel from 0.0.22 to 1.0.1.

What's Changed

New Contributors

Full Changelog: https://github.com/coollabsio/coolify/compare/v4.3.18...v4.3.19

v4.3.18

Features

  • Added configurable alerts when scheduled database backups missed a set number of days. #11433 closed #11425.
  • Streamed S3-only volume archives directly to S3 so those backups no longer needed temporary local disk space. #11642
  • Added an instance setting for the CDN URL used to serve stored images such as profile avatars and project icons.

Improvements

  • Refreshed the UI with WCAG-compliant contrast, a unified surface system, a full-height settings rail, and a rebuilt mobile navigation drawer. #11659 closed #11532.
  • Preserved in-progress domain edits across refreshes, stacked domain rows on small screens, and moved preview deployment settings onto the Previews page.
  • Paginated service backup history, showed S3 destination details, disabled Backup Now unless the database was running, added search on server resources, and let operators enable Sentinel from its logs page.

Fixes

  • Allowed General application settings to be saved when an existing domain used a wildcard. #11683 closed #11641.
  • Prevented duplicate Coolify Cloud subscription checkouts and recovered subscriptions after missed or out-of-order Stripe webhooks. #11666
  • Preserved PATH in terminal sessions so SSH proxy commands such as cloudflared worked. #11638 closed #11611.
  • Stopped the persistent storage PR suffix dropdown from clipping inside the volumes table. #11637 closed #11605.
  • Returned scheduled task execution duration as a JSON number so the CLI could parse listings. #11636 closed #11616.
  • Persisted S3 storage settings when creating a new volume backup schedule. #11635 closed #11627.
  • Cleaned up preview deployments when a pull request closed after its base branch changed. #11634 closed #11609.
  • Persisted the Make publicly available setting for service databases. #11633 closed #11345.
  • Restored webhook delivery for always-send notifications, including SSL renewal, API token expiry, server force-enable/disable, and Hetzner deletion failures. #11528 closed #11507.
  • Raised nginx request header buffers so large Cookie headers no longer returned HTTP 400 before reaching Coolify. #11404 closed #11403.
  • Kept modal contents intact across Livewire re-renders instead of dropping the body and leaving a click-blocking overlay. #11294
  • Routed Docker Compose domains using each service's ports, stored explicit ports as overrides through the API, and stopped multi-service Compose domains from inheriting the application port.
  • Applied the same domain validation rules to the service API as the UI, including wildcards and oversized URLs.
  • Limited instance public IP DNS hints to the localhost server so remote servers showed their own addresses.
  • Preserved shell negation in sudo-wrapped commands on servers that use a non-root SSH user.
  • Deferred inspection of PostgreSQL custom-format backup archives to pg_restore so valid dumps were not rejected.

What's Changed

New Contributors

Full Changelog: https://github.com/coollabsio/coolify/compare/v4.3.17...v4.3.18

v4.3.17

Fixes

  • Corrected notification and deployment log links to use the configured instance URL. #11623
  • Cleaned up orphaned helper containers when helper images used unqualified names, nested registry paths, tags, or digests. #11540 closed #11511.
  • Preserved Docker restart policies when applications, previews, databases, and service applications were stopped without removing their containers.
  • Fixed type errors when stopping applications and adding scheduled tasks.
  • Kept Docker Compose domains in sync when noindex settings changed.
  • Prevented removed Docker Compose service domains from being regenerated by magic service URL variables.
  • Preserved generated Compose variables during bulk environment variable replacement and reported blocked deletions correctly.
  • Cleared stale Traefik version data after proxies stopped or changed.
  • Prevented invalid repository URLs from producing malformed commit links.

Improvements

  • Removed app-only restart-limit enforcement from database resources so databases continued to follow their configured Docker restart behavior.
  • Made missing required environment variables directly accessible from a service's disabled Deploy action.
  • Hid Coolify-managed Compose variables from the developer environment variable view to prevent accidental edits.

What's Changed

New Contributors

Full Changelog: https://github.com/coollabsio/coolify/compare/v4.3.16...v4.3.17

v4.3.16

Fixes

  • Corrected internal routing and proxy labels for Docker Compose applications and previews to use each service's configured port, with the application port as a fallback.
  • Restored the unsaved-changes indicator when switching label management to manual mode by updating Livewire. (#11612, closes #11265)
  • Routed Telegram alerts for outdated Traefik versions to the configured topic instead of the main chat. (#11526)
  • Corrected the file and directory deletion confirmation text. (#11541)

Improvements

  • Ran stuck-resource cleanup in the background at 03:17 each day so it no longer blocked other scheduled tasks.
  • Displayed the API token's one-time visibility warning directly beside the generated token.

What's Changed

Full Changelog: https://github.com/coollabsio/coolify/compare/v4.3.15...v4.3.16

v4.3.15

Features

  • Added per-domain internal port overrides for applications, Docker Compose services, and preview deployments across Traefik and Caddy. Public domain URLs remained portless, while the UI showed effective ports and warned about unrecognized ports. (#11594)
  • Consolidated service database, volume, and directory backups into one page with schedule editing, on-demand runs, combined history, live status, downloads, and imports. (#11574)
  • Added domain management and DNS status checks for preview deployments.

Fixes

  • Blocked read-only team members from directly invoking protected Livewire mutations for credentials, servers, applications, databases, and security resources. (#11596)
  • Preserved every application domain in COOLIFY_URL and COOLIFY_FQDN, including multi-domain configurations with ports. (#11527, fixes #10824)
  • Kept stopped containers visible after they reached their restart limit, prevented further automatic restarts, and added retry deployment and container removal actions. (#11566, closes #10624, #10906, and #11521)
  • Rejected invalid build-time environment variable names before builds started and reported the offending key with rename guidance. (#11575)
  • Prevented unauthorized users from receiving stored private keys and GitHub App secrets in Livewire state.
  • Restricted web terminal SSH commands to approved hosts, keys, ports, and options.
  • Preserved existing domains when switching an application to Docker Compose and waited for confirmation before loading its Compose file.
  • Redirected immediately after resource deletion while cleanup continued after the response.

Improvements

  • Improved the Docker Compose editor layout on mobile screens.
  • Warned before removing a port required by a service domain.
  • Warned that full PostgreSQL restores could overwrite administrator passwords.
  • Reduced the remotely callable Livewire API and kept authorization checks on user-facing write actions. (#11578)

What's Changed

New Contributors

Full Changelog: https://github.com/coollabsio/coolify/compare/v4.3.14...v4.3.15

v4.3.13

Features

  • Added a one-click Executor service template with persistent storage and health checks (#11530).

Improvements

  • Served profile avatars and project icons directly from configured S3 storage or an optional CDN, with local routes as a fallback.

Fixes

  • Fixed missing service logos in global search and the service catalog by retrying a remote source before showing the default icon.
  • Gave Sentinel startup migrations enough time to finish before Docker health checks could restart the container.
  • Fixed stale Livewire keys and refresh races that could leave domain, storage, file, log, proxy, and scheduled job controls unresponsive after list changes.
  • Preserved PostgreSQL init script identity when files were renamed.
  • Rejected single-label hostnames in application and service domains while continuing to accept IP addresses.
  • Preserved custom application container names during consistent deployments and removed containers left under legacy generated names.
  • Fixed navigation after deleting or converting services, backups, scheduled tasks, sources, storage, and destinations.

What's Changed

Full Changelog: https://github.com/coollabsio/coolify/compare/v4.3.12...v4.3.13

v4.3.12

Fixes

  • 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

New Contributors

Full Changelog: https://github.com/coollabsio/coolify/compare/v4.3.11...v4.3.12

v4.3.11

Features

  • Added asynchronous DNS validation for application and service domains.
  • Added one-click service templates for HashiCorp Vault and Obsidian LiveSync CouchDB.

Fixes

  • Restored proxy connections to project networks after host reboots (#11476, fixes #11436).
  • Applied custom Docker options when applications used custom container names, honored selected rollback tags, and respected Compose stop grace periods (#11479, #11480, #11498).
  • Restored custom-format PostgreSQL backups with pg_restore (#11481, fixes #11459).
  • Removed persistent volumes when deleting application previews (#11455, fixes #11441).
  • Made Docker cleanup safe to retry and prevented missing resources from failing deletion (#11463).
  • Fixed registry pushes by updating the helper image's Docker CLI, Compose, and Buildx versions (#11461, fixes #11437).
  • Fixed service log lookup when Docker label values contained commas (#11477, fixes #11454).
  • Allowed system-wide GitHub Apps to work across teams and accepted Coolify CUIDs when updating their private keys through the API (#11453, #11468).
  • Allowed teams with unused private keys or system-wide Git sources to be deleted without removing shared sources (#11499, #11500, fixes #11494).
  • Restored clickable commit links in deployment logs (#11495, fixes #11482).
  • Cleared stale Traefik branch-upgrade warnings after the suggested branch was applied (#11496, fixes #11490).
  • Kept private-key edit dialogs working after multiple keys were deleted (#11497, fixes #11487).
  • Fixed terminal container selection when identical container names existed on different servers.
  • Refreshed service configuration after required environment variables changed.
  • Redacted dotted GitHub tokens from exported logs and prevented wide tables from overflowing their containers.

Improvements

  • Showed a toast with retry guidance when infrastructure-related Livewire requests failed.
  • Distinguished proxy restarts from proxy updates in server status indicators.
  • Made stuck-resource cleanup scalable, scheduled it automatically, and made resource deletion metadata updates atomic.

New Contributors

Full Changelog: https://github.com/coollabsio/coolify/compare/v4.3.10...v4.3.11

v4.3.10

Features

  • 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.

Full Changelog: https://github.com/coollabsio/coolify/compare/v4.3.9...v4.3.10

v4.4-rc.1

Release candidate

This is the first release candidate for Coolify v4.4. It is intended for testing and validation before the stable v4.4 release.

Do not use this release candidate in production without appropriate testing. Please report regressions through GitHub Issues.

Changes in next

These notes include only changes currently unique to next compared with main.

OpenID Connect and authentication

  • Added first-class OpenID Connect (OIDC) authentication, including discovery, JWKS signing-key resolution, token validation, PKCE support, and identity linking.
  • Added OIDC configuration and registration-policy controls to instance settings.
  • Added an option to automatically join OIDC users to the root team.
  • Improved OAuth login handling and profile indication for SSO accounts.

Integration tokens

  • Added team-scoped integration-token management under Security settings.
  • Added create, edit, permission, and authorization handling for integration tokens.

Settings and server management

  • Improved email-provider configuration and enforced mutually exclusive provider selection.
  • Added notification-channel enable/disable handling for Discord, email, Pushover, Slack, Telegram, and webhooks.
  • Improved Docker prerequisite and package installation, including Alpine Linux package handling.
  • Improved log-drain toggle rollback behavior and SSH multiplexing controls.

Additional improvements

  • Improved settings navigation and action-button state handling.
  • Updated bundled service templates.
  • Added broader automated coverage for OIDC, OAuth registration, integration tokens, email providers, server packages, and related settings.

Comparison: main...next

v4.3.9

Features

  • 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.
  • Clarified proxy-label generation choices (#11362).
  • Clarified that saving Sentinel settings restarted Sentinel.
  • Made database and OAuth seed operations transactional to preserve existing data when seeding failed (#11360).

What's Changed

New Contributors

Full Changelog: https://github.com/coollabsio/coolify/compare/v4.3.8...v4.3.9

v4.3.8

Features

  • Added configurable HTTPS redirects for service applications across the dashboard, API, and MCP.

Fixes

  • Prevented members from accessing deployment, database, service, and other mutable controls, and clarified disabled control styling.
  • Fixed confirmation modal checkboxes that generated malformed Livewire bindings (#11335).
  • Kept table page-size dropdowns visible and usable near the bottom of the viewport (#11349, fixes #11336).
  • Persisted PostgreSQL public-access changes so they no longer reverted after refreshes or proxy restarts (#11348, fixes #11345).
  • Corrected Traefik redirect capture groups and selected the proper Docker network for routed Compose applications and services.
  • Reconciled proxy networks from running containers, improving routing when cached resource status was stale.

Improvements

  • Made GitHub repository and branch selectors searchable and preselected each repository’s default branch.
  • Improved active-deployment indicator contrast with solid surfaces in every state.

What's Changed

Full Changelog: https://github.com/coollabsio/coolify/compare/v4.3.7...v4.3.8

v4.3.7

Fixes

  • 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

New Contributors

Full Changelog: https://github.com/coollabsio/coolify/compare/v4.3.6...v4.3.7

v4.3.6

Features

  • Added full-width and centered page layout preferences.
  • Added searchable breadcrumb switching for applications, databases, and services.
  • Added an Admin navigation link for root users.
  • Added the installed Coolify version to the mobile sidebar.

Fixes

  • Correctly marked missing resources as stopped when Sentinel reported a complete empty container snapshot.
  • Fixed dropdown sizing and positioning, including trigger-width matching and viewport overflow.
  • Fixed horizontal scrolling and row borders in the database backup execution table.
  • Displayed a clear empty state when no database backup executions existed.
  • Added missing Turkish translations for Authentik and Zitadel sign-in (#9938).
  • Improved loading indicator contrast in dark mode.

Improvements

  • Replaced page-size selectors with clearer dropdown controls while retaining custom page sizes.
  • Sorted resources alphabetically in breadcrumb switchers.
  • Refined desktop header borders and breadcrumb search styling.

What's Changed

New Contributors

Full Changelog: https://github.com/coollabsio/coolify/compare/v4.3.5...v4.3.6

v4.3.4

Features

  • Added project icons to dashboard cards and shared-variable project views.

Fixes

  • Restored clickable deployment-log download actions (#11306; closed #11301).
  • 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

Full Changelog: https://github.com/coollabsio/coolify/compare/v4.3.3...v4.3.4

v4.3.3

Features

  • Added custom project icons with local and S3-backed storage.
  • Added configurable CPU limits for volume-backup compression.

Fixes

  • Fixed the What’s New dialog failing to open from the account menu (#11261, fixes #11219).
  • Fixed PostgreSQL instances with SSL certificates failing to start because of private-key ownership (#11286, fixes #5450).
  • Fixed S3 connection tests using saved settings instead of current form values (#11297, fixes #11289).
  • Fixed inconsistent MinIO client versions across Coolify images (#11291, fixes #11288).
  • Fixed search-indexing table headers overflowing domain tables (#11275, fixes #11263).
  • Fixed Sentinel restarting after it had been disabled (#11298, fixes #11280).
  • Allowed more startup time before Coolify health checks marked the container unhealthy (#11299, fixes #11277).
  • Fixed databases disappearing from counts and resource operations when different database types shared the same numeric ID (#11300, fixes #11285).
  • Fixed Traefik network labels for Docker Compose services without a user-selected network.
  • Fixed PostgreSQL custom-format backup uploads being rejected by SQL safety validation.
  • Fixed Compose environment variables that referenced themselves becoming uneditable.
  • Fixed stopped resources retaining stale running states.
  • Fixed deployment logs losing the manually selected follow mode and showing filtered lines.
  • Fixed S3 endpoint normalization, validation feedback, and partial numeric host editing.

Improvements

  • Made volume and full-database backups faster by using parallel gzip compression when available.
  • Prevented deletion of Compose-managed persistent volumes and improved persistent-volume management.
  • Improved mobile application links, backup screens, loading states, and validation feedback.
  • Clarified application image-retention cleanup options.

What's Changed

New Contributors

Full Changelog: https://github.com/coollabsio/coolify/compare/v4.3.2...v4.3.3

v4.3.2

Features

  • Added a one-click Jean Server template with configurable tokens and allowed origins (#11248).

Fixes

  • Allowed long-running backups and scheduled tasks to honor their configured SSH timeouts, including S3 uploads (#11183, closed #8435).
  • Restored built-in Coolify database backups and other scheduled jobs whose legacy records used ID 0 (#11249, closed #10623).
  • Corrected application and database container memory charts to display megabytes instead of raw bytes (#11247, closed #11246).
  • Replaced deprecated Docker stop flags with version-aware options for older and newer Docker engines (#11251, closed #11244).
  • Made upgrades wait for the restarted instance and target version before reporting success, including upgrades from older releases.
  • Stopped suggesting unconfigured www counterpart domains and corrected domain guidance and mobile domain visibility.
  • Prevented nested controls in new-resource cards from accidentally triggering deployment.

Improvements

  • Unified application, service, database, and server headings with responsive action menus.
  • Made resource, environment, and new-resource cards fully clickable, and displayed domains in resource grids (#11231, #11227).
  • Improved API token input and empty states (#11226, #11224).
  • Clarified health check wording (#11232).
  • Reduced layout shifts and added smoother notification event selector transitions.

What's Changed

Full Changelog: https://github.com/coollabsio/coolify/compare/v4.3.1...v4.3.2