From eaaaf7a71377ca57de0bc703006cc9c25442ff77 Mon Sep 17 00:00:00 2001 From: Andras Bacsai <5845193+andrasbacsai@users.noreply.github.com> Date: Mon, 9 Nov 2026 12:35:03 +0100 Subject: [PATCH] feat(release): bump coolify version to v4.7.0 --- .changes/a-list-view-on-the-new.md | 5 - .changes/a-not-used-label-on-the.md | 8 - .changes/a-run-in-a-shell-option.md | 8 - .../a-separate-notification-sender-in-the.md | 9 - ...ip-tls-certificate-verification-setting.md | 9 - .changes/a-star-button-on-servers-and.md | 7 - .changes/a-ui-scale-option-in-the.md | 5 - .changes/a-warning-when-the-docker-compose.md | 7 - .changes/api-endpoints-and-mcp-tools-that.md | 8 - .changes/api-token-search-out-of-sync.md | 5 - ...ications-and-databases-removed-from-the.md | 10 - ...plications-deleted-on-all-their-servers.md | 10 - .changes/applied-the-limits-of-api-tokens.md | 7 - ...atic-update-notifications-the-root-team.md | 7 - ...gsink-service-template-filling-the-disk.md | 8 - .../builds-that-failed-with-x509-errors.md | 7 - .../built-team-invitation-links-from-the.md | 4 - ...ed-the-older-queued-webhook-deployments.md | 12 - ...checked-that-members-with-access-grants.md | 10 - .../checked-the-deploy-permission-before-a.md | 5 - .../compose-services-that-could-not-reach.md | 7 - ...ner-image-vulnerability-scanning-opt-in.md | 9 - .../copy-from-instance-settings-from-the.md | 5 - .../copy-logs-not-changing-the-clipboard.md | 7 - ...-off-descriptions-of-postgresql-mongodb.md | 5 - .changes/data-that-looked-lost-after-you.md | 7 - ...tabase-backup-executions-table-that-did.md | 8 - .changes/database-backups-saved-to-s3-when.md | 7 - ...database-backups-that-passed-the-worker.md | 10 - ...deleted-coolify-yaml-and-an-unreachable.md | 7 - .../deleted-volume-coming-back-after-a.md | 8 - ...deploy-canvas-cards-with-another-border.md | 5 - ...loyments-started-through-the-mcp-server.md | 8 - .../deployments-that-failed-on-one-502.md | 8 - ...deployments-that-failed-with-curl-error.md | 7 - ...loyments-that-failed-with-the-container.md | 7 - .../deployments-that-stopped-on-a-broken.md | 7 - ...yments-to-additional-servers-losing-the.md | 7 - .../different-coolify-branch-values-in-the.md | 7 - ...isabled-self-hosted-servers-that-stayed.md | 9 - .changes/dns-matches-on-a-domain-in.md | 9 - ...docker-builds-that-failed-with-buildkit.md | 8 - ...er-compose-previews-sharing-one-project.md | 7 - ...ile-healthcheck-options-not-imported-as.md | 7 - ...ockerfile-healthcheck-read-from-a-stage.md | 5 - .../domains-showing-not-checked-when-an.md | 8 - .changes/duplicate-and-empty-rows-in-the.md | 5 - ...-environment-variables-and-extra-copies.md | 5 - ...empty-database-backups-of-odoo-services.md | 7 - .changes/empty-disk-usage-on-the-metrics.md | 7 - .changes/empty-list-of-the-commit-images.md | 7 - .../ended-terminal-sessions-when-access-to.md | 5 - ...nforced-fixed-ssh-connection-options-on.md | 5 - .../exact-start-time-in-service-backup.md | 7 - ...expired-sessions-kept-for-the-retention.md | 7 - .../failed-backups-to-s3-endpoints-with.md | 7 - .../failed-clone-of-an-application-with.md | 7 - ...ed-docker-install-on-ubuntu-derivatives.md | 8 - .changes/failed-image-pull-in-the-convex.md | 5 - .changes/failed-parse-of-a-docker-compose.md | 7 - .../failed-s3-uploads-of-backups-larger.md | 5 - .changes/failed-sign-up-and-login-in.md | 8 - .../failed-startup-and-broken-public-album.md | 9 - .changes/forgejo-and-codeberg-in-the-gitea.md | 8 - .changes/generated-new-ssh-keys-as-ed25519.md | 5 - .changes/generic-error-when-a-new-private.md | 7 - .changes/gitea-app-endpoints-in-the-api.md | 7 - ...ub-deployments-sync-each-deployment-and.md | 7 - .../hardened-smtp-and-terminal-connections.md | 8 - .../health-checks-in-their-start-period.md | 5 - .changes/hid-the-secrets-of-the-server.md | 4 - .changes/hid-the-server-details-of-a.md | 4 - .changes/high-cpu-use-of-dockerd-while.md | 5 - ...ignored-concurrent-build-limit-of-build.md | 8 - .../import-backup-from-the-resource-menu.md | 8 - ...consistent-status-badges-and-s3-storage.md | 5 - ...nstance-database-backups-running-on-the.md | 9 - .../kept-personal-data-and-credentials-out.md | 7 - .changes/kept-stored-private-keys-out-of.md | 5 - .changes/kept-the-sentinel-token-out-of.md | 7 - .../limited-api-clients-that-keep-failing.md | 8 - .../limited-the-cloud-provider-token-api.md | 8 - .../litellm-service-template-with-a-master.md | 9 - .../live-updates-such-as-proxy-restart.md | 5 - .../localhost-server-page-that-did-not.md | 5 - ...ed-environment-variables-that-could-not.md | 8 - .../lost-audit-events-12433-https-github.md | 7 - ...ram-notifications-when-telegram-rejects.md | 7 - ...ailing-newline-of-multiline-environment.md | 9 - ...lost-update-channel-in-settings-updates.md | 7 - ...maintenance-mode-to-its-own-maintenance.md | 5 - ...missing-check-of-the-closest-cloudflare.md | 5 - .../missing-cloudflare-dns-record-when-you.md | 8 - .../missing-disabled-server-message-on-the.md | 5 - .../missing-git-error-reason-when-coolify.md | 5 - ...issing-links-to-the-provider-dashboards.md | 5 - ...sing-project-environment-and-service-in.md | 7 - ...source-status-changes-notification-when.md | 9 - ...raefik-proxy-outdated-notification-when.md | 7 - .changes/moved-the-resend-sender-to-the.md | 8 - ...ames-and-descriptions-saved-through-the.md | 7 - .changes/nested-test-key-in-the-api.md | 7 - .changes/network-error-when-you-sign-in.md | 8 - .changes/new-rsa-deploy-keys-that-github.md | 7 - .../oauth-redirect-uris-that-silently-sent.md | 7 - .changes/old-cached-image-in-the-usesend.md | 7 - .changes/one-email-provider-list-with-none.md | 5 - ...utline-service-template-restarting-in-a.md | 8 - ...d-coolify-cloud-subscriptions-that-lost.md | 7 - .changes/pinned-the-ssh-host-key-of.md | 7 - .changes/pinned-the-ssh-host-keys-of.md | 7 - .changes/port-warning-on-a-service-domain.md | 7 - .../rebuilt-docker-layers-when-a-preview.md | 8 - .../rebuilt-docker-layers-when-a-short.md | 7 - .../redis-health-check-that-always-passed.md | 7 - .changes/refused-servers-with-the-same-ip.md | 5 - ...esource-limits-shown-for-docker-compose.md | 5 - ...review-changes-rollbacks-and-repository.md | 10 - .changes/rotate-key-on-private-keys-which.md | 10 - .../sentinel-that-kept-pushing-after-its.md | 7 - .changes/server-error-when-a-backup-was.md | 6 - .changes/server-page-that-did-not-refresh.md | 7 - .../server-shared-variables-that-did-not.md | 7 - .changes/server-usage-in-the-server-table.md | 5 - .../servers-that-refused-new-ssh-logins.md | 8 - .../service-backup-path-that-could-not.md | 5 - .../service-backup-tables-that-were-not.md | 5 - ...rvice-resource-cards-showing-a-starting.md | 7 - .../service-resource-cards-that-did-not.md | 5 - ...es-stayed-down-after-restart-image-pull.md | 6 - .../sftp-ftps-and-webdav-backup-storages.md | 7 - .../startup-and-the-nightly-cleanup-of.md | 8 - .../supabase-studio-showing-the-api-logs.md | 8 - ...he-data-retention-of-unsubscribed-teams.md | 7 - .changes/the-default-image-of-new-redis.md | 7 - .../the-default-images-of-new-databases.md | 7 - .changes/the-default-images-on-the-new.md | 5 - .../the-finish-time-of-recent-deployments.md | 5 - .changes/the-logo-and-name-of-the.md | 5 - ...he-notifications-of-scheduled-jobs-that.md | 13 - .changes/the-orbit-service-template-a-self.md | 5 - .changes/the-security-settings-of-a-server.md | 5 - .changes/the-sentinel-version-to-1-1.md | 5 - .changes/the-unused-minio-client-from-the.md | 5 - .../tooltips-on-close-and-dismiss-buttons.md | 5 - ...-deployments-of-one-application-running.md | 9 - .../unexplained-uuid-prefix-on-the-names.md | 7 - .../unreadable-accent-text-and-fills-in.md | 7 - ...unreadable-account-menu-entries-such-as.md | 5 - ...e-subscription-and-server-limit-banners.md | 6 - .changes/upgrade-modal-that-did-not-finish.md | 8 - ...idated-webhook-urls-limited-dns-lookups.md | 5 - .changes/valkey-as-an-image-of-the.md | 8 - .../volume-data-checkboxes-that-were-not.md | 5 - .../websockets-closed-by-caddy-on-every.md | 7 - .changes/white-flash-of-the-dark-theme.md | 5 - .../wrong-docker-compose-file-not-found.md | 6 - CHANGELOG.md | 363 ++++++++++++++++++ release.json | 2 +- 159 files changed, 364 insertions(+), 1077 deletions(-) delete mode 100644 .changes/a-list-view-on-the-new.md delete mode 100644 .changes/a-not-used-label-on-the.md delete mode 100644 .changes/a-run-in-a-shell-option.md delete mode 100644 .changes/a-separate-notification-sender-in-the.md delete mode 100644 .changes/a-skip-tls-certificate-verification-setting.md delete mode 100644 .changes/a-star-button-on-servers-and.md delete mode 100644 .changes/a-ui-scale-option-in-the.md delete mode 100644 .changes/a-warning-when-the-docker-compose.md delete mode 100644 .changes/api-endpoints-and-mcp-tools-that.md delete mode 100644 .changes/api-token-search-out-of-sync.md delete mode 100644 .changes/applications-and-databases-removed-from-the.md delete mode 100644 .changes/applications-deleted-on-all-their-servers.md delete mode 100644 .changes/applied-the-limits-of-api-tokens.md delete mode 100644 .changes/automatic-update-notifications-the-root-team.md delete mode 100644 .changes/bugsink-service-template-filling-the-disk.md delete mode 100644 .changes/builds-that-failed-with-x509-errors.md delete mode 100644 .changes/built-team-invitation-links-from-the.md delete mode 100644 .changes/cancelled-the-older-queued-webhook-deployments.md delete mode 100644 .changes/checked-that-members-with-access-grants.md delete mode 100644 .changes/checked-the-deploy-permission-before-a.md delete mode 100644 .changes/compose-services-that-could-not-reach.md delete mode 100644 .changes/container-image-vulnerability-scanning-opt-in.md delete mode 100644 .changes/copy-from-instance-settings-from-the.md delete mode 100644 .changes/copy-logs-not-changing-the-clipboard.md delete mode 100644 .changes/cut-off-descriptions-of-postgresql-mongodb.md delete mode 100644 .changes/data-that-looked-lost-after-you.md delete mode 100644 .changes/database-backup-executions-table-that-did.md delete mode 100644 .changes/database-backups-saved-to-s3-when.md delete mode 100644 .changes/database-backups-that-passed-the-worker.md delete mode 100644 .changes/deleted-coolify-yaml-and-an-unreachable.md delete mode 100644 .changes/deleted-volume-coming-back-after-a.md delete mode 100644 .changes/deploy-canvas-cards-with-another-border.md delete mode 100644 .changes/deployments-started-through-the-mcp-server.md delete mode 100644 .changes/deployments-that-failed-on-one-502.md delete mode 100644 .changes/deployments-that-failed-with-curl-error.md delete mode 100644 .changes/deployments-that-failed-with-the-container.md delete mode 100644 .changes/deployments-that-stopped-on-a-broken.md delete mode 100644 .changes/deployments-to-additional-servers-losing-the.md delete mode 100644 .changes/different-coolify-branch-values-in-the.md delete mode 100644 .changes/disabled-self-hosted-servers-that-stayed.md delete mode 100644 .changes/dns-matches-on-a-domain-in.md delete mode 100644 .changes/docker-builds-that-failed-with-buildkit.md delete mode 100644 .changes/docker-compose-previews-sharing-one-project.md delete mode 100644 .changes/dockerfile-healthcheck-options-not-imported-as.md delete mode 100644 .changes/dockerfile-healthcheck-read-from-a-stage.md delete mode 100644 .changes/domains-showing-not-checked-when-an.md delete mode 100644 .changes/duplicate-and-empty-rows-in-the.md delete mode 100644 .changes/duplicate-environment-variables-and-extra-copies.md delete mode 100644 .changes/empty-database-backups-of-odoo-services.md delete mode 100644 .changes/empty-disk-usage-on-the-metrics.md delete mode 100644 .changes/empty-list-of-the-commit-images.md delete mode 100644 .changes/ended-terminal-sessions-when-access-to.md delete mode 100644 .changes/enforced-fixed-ssh-connection-options-on.md delete mode 100644 .changes/exact-start-time-in-service-backup.md delete mode 100644 .changes/expired-sessions-kept-for-the-retention.md delete mode 100644 .changes/failed-backups-to-s3-endpoints-with.md delete mode 100644 .changes/failed-clone-of-an-application-with.md delete mode 100644 .changes/failed-docker-install-on-ubuntu-derivatives.md delete mode 100644 .changes/failed-image-pull-in-the-convex.md delete mode 100644 .changes/failed-parse-of-a-docker-compose.md delete mode 100644 .changes/failed-s3-uploads-of-backups-larger.md delete mode 100644 .changes/failed-sign-up-and-login-in.md delete mode 100644 .changes/failed-startup-and-broken-public-album.md delete mode 100644 .changes/forgejo-and-codeberg-in-the-gitea.md delete mode 100644 .changes/generated-new-ssh-keys-as-ed25519.md delete mode 100644 .changes/generic-error-when-a-new-private.md delete mode 100644 .changes/gitea-app-endpoints-in-the-api.md delete mode 100644 .changes/github-deployments-sync-each-deployment-and.md delete mode 100644 .changes/hardened-smtp-and-terminal-connections.md delete mode 100644 .changes/health-checks-in-their-start-period.md delete mode 100644 .changes/hid-the-secrets-of-the-server.md delete mode 100644 .changes/hid-the-server-details-of-a.md delete mode 100644 .changes/high-cpu-use-of-dockerd-while.md delete mode 100644 .changes/ignored-concurrent-build-limit-of-build.md delete mode 100644 .changes/import-backup-from-the-resource-menu.md delete mode 100644 .changes/inconsistent-status-badges-and-s3-storage.md delete mode 100644 .changes/instance-database-backups-running-on-the.md delete mode 100644 .changes/kept-personal-data-and-credentials-out.md delete mode 100644 .changes/kept-stored-private-keys-out-of.md delete mode 100644 .changes/kept-the-sentinel-token-out-of.md delete mode 100644 .changes/limited-api-clients-that-keep-failing.md delete mode 100644 .changes/limited-the-cloud-provider-token-api.md delete mode 100644 .changes/litellm-service-template-with-a-master.md delete mode 100644 .changes/live-updates-such-as-proxy-restart.md delete mode 100644 .changes/localhost-server-page-that-did-not.md delete mode 100644 .changes/locked-environment-variables-that-could-not.md delete mode 100644 .changes/lost-audit-events-12433-https-github.md delete mode 100644 .changes/lost-telegram-notifications-when-telegram-rejects.md delete mode 100644 .changes/lost-trailing-newline-of-multiline-environment.md delete mode 100644 .changes/lost-update-channel-in-settings-updates.md delete mode 100644 .changes/maintenance-mode-to-its-own-maintenance.md delete mode 100644 .changes/missing-check-of-the-closest-cloudflare.md delete mode 100644 .changes/missing-cloudflare-dns-record-when-you.md delete mode 100644 .changes/missing-disabled-server-message-on-the.md delete mode 100644 .changes/missing-git-error-reason-when-coolify.md delete mode 100644 .changes/missing-links-to-the-provider-dashboards.md delete mode 100644 .changes/missing-project-environment-and-service-in.md delete mode 100644 .changes/missing-resource-status-changes-notification-when.md delete mode 100644 .changes/missing-traefik-proxy-outdated-notification-when.md delete mode 100644 .changes/moved-the-resend-sender-to-the.md delete mode 100644 .changes/names-and-descriptions-saved-through-the.md delete mode 100644 .changes/nested-test-key-in-the-api.md delete mode 100644 .changes/network-error-when-you-sign-in.md delete mode 100644 .changes/new-rsa-deploy-keys-that-github.md delete mode 100644 .changes/oauth-redirect-uris-that-silently-sent.md delete mode 100644 .changes/old-cached-image-in-the-usesend.md delete mode 100644 .changes/one-email-provider-list-with-none.md delete mode 100644 .changes/outline-service-template-restarting-in-a.md delete mode 100644 .changes/paid-coolify-cloud-subscriptions-that-lost.md delete mode 100644 .changes/pinned-the-ssh-host-key-of.md delete mode 100644 .changes/pinned-the-ssh-host-keys-of.md delete mode 100644 .changes/port-warning-on-a-service-domain.md delete mode 100644 .changes/rebuilt-docker-layers-when-a-preview.md delete mode 100644 .changes/rebuilt-docker-layers-when-a-short.md delete mode 100644 .changes/redis-health-check-that-always-passed.md delete mode 100644 .changes/refused-servers-with-the-same-ip.md delete mode 100644 .changes/resource-limits-shown-for-docker-compose.md delete mode 100644 .changes/restricted-preview-changes-rollbacks-and-repository.md delete mode 100644 .changes/rotate-key-on-private-keys-which.md delete mode 100644 .changes/sentinel-that-kept-pushing-after-its.md delete mode 100644 .changes/server-error-when-a-backup-was.md delete mode 100644 .changes/server-page-that-did-not-refresh.md delete mode 100644 .changes/server-shared-variables-that-did-not.md delete mode 100644 .changes/server-usage-in-the-server-table.md delete mode 100644 .changes/servers-that-refused-new-ssh-logins.md delete mode 100644 .changes/service-backup-path-that-could-not.md delete mode 100644 .changes/service-backup-tables-that-were-not.md delete mode 100644 .changes/service-resource-cards-showing-a-starting.md delete mode 100644 .changes/service-resource-cards-that-did-not.md delete mode 100644 .changes/services-stayed-down-after-restart-image-pull.md delete mode 100644 .changes/sftp-ftps-and-webdav-backup-storages.md delete mode 100644 .changes/startup-and-the-nightly-cleanup-of.md delete mode 100644 .changes/supabase-studio-showing-the-api-logs.md delete mode 100644 .changes/the-data-retention-of-unsubscribed-teams.md delete mode 100644 .changes/the-default-image-of-new-redis.md delete mode 100644 .changes/the-default-images-of-new-databases.md delete mode 100644 .changes/the-default-images-on-the-new.md delete mode 100644 .changes/the-finish-time-of-recent-deployments.md delete mode 100644 .changes/the-logo-and-name-of-the.md delete mode 100644 .changes/the-notifications-of-scheduled-jobs-that.md delete mode 100644 .changes/the-orbit-service-template-a-self.md delete mode 100644 .changes/the-security-settings-of-a-server.md delete mode 100644 .changes/the-sentinel-version-to-1-1.md delete mode 100644 .changes/the-unused-minio-client-from-the.md delete mode 100644 .changes/tooltips-on-close-and-dismiss-buttons.md delete mode 100644 .changes/two-deployments-of-one-application-running.md delete mode 100644 .changes/unexplained-uuid-prefix-on-the-names.md delete mode 100644 .changes/unreadable-accent-text-and-fills-in.md delete mode 100644 .changes/unreadable-account-menu-entries-such-as.md delete mode 100644 .changes/unreadable-subscription-and-server-limit-banners.md delete mode 100644 .changes/upgrade-modal-that-did-not-finish.md delete mode 100644 .changes/validated-webhook-urls-limited-dns-lookups.md delete mode 100644 .changes/valkey-as-an-image-of-the.md delete mode 100644 .changes/volume-data-checkboxes-that-were-not.md delete mode 100644 .changes/websockets-closed-by-caddy-on-every.md delete mode 100644 .changes/white-flash-of-the-dark-theme.md delete mode 100644 .changes/wrong-docker-compose-file-not-found.md diff --git a/.changes/a-list-view-on-the-new.md b/.changes/a-list-view-on-the-new.md deleted file mode 100644 index 6583416058..0000000000 --- a/.changes/a-list-view-on-the-new.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: added -commit: 91d233be59 ---- -A list view on the new resource page diff --git a/.changes/a-not-used-label-on-the.md b/.changes/a-not-used-label-on-the.md deleted file mode 100644 index 73e50b121f..0000000000 --- a/.changes/a-not-used-label-on-the.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: added -commit: 777362cd97 ---- -A `Not used` label on the TLS certificates of the Traefik proxy page, and a `Delete unused` button that deletes them in one step ([#12447](https://github.com/coollabsio/coolify/issues/12447)) - -- A certificate is unused when no route and no resource on the server uses its domain -- Traefik renews every certificate in `acme.json` until you delete it and restart the proxy diff --git a/.changes/a-run-in-a-shell-option.md b/.changes/a-run-in-a-shell-option.md deleted file mode 100644 index cf25b02fd3..0000000000 --- a/.changes/a-run-in-a-shell-option.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: added -commit: 31c3fcf50d ---- -A `Run in a shell` option on scheduled tasks, so containers without `sh`, such as distroless or scratch images, can run them ([#8244](https://github.com/coollabsio/coolify/issues/8244)) - -- Turn it off to split the command into arguments and run it directly -- The API and the MCP tools set it too diff --git a/.changes/a-separate-notification-sender-in-the.md b/.changes/a-separate-notification-sender-in-the.md deleted file mode 100644 index 1be671cc47..0000000000 --- a/.changes/a-separate-notification-sender-in-the.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -type: added -commit: a5b4e1d32e ---- -A separate notification sender in the instance email settings - -- Team notifications through the instance email settings, the S3 connection error alert and the channel disabled alert use it -- Account emails keep the default sender -- The `emails` artisan command no longer exists diff --git a/.changes/a-skip-tls-certificate-verification-setting.md b/.changes/a-skip-tls-certificate-verification-setting.md deleted file mode 100644 index 49017e3a33..0000000000 --- a/.changes/a-skip-tls-certificate-verification-setting.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -type: added -commit: 7f521e496d ---- -A `Skip TLS certificate verification` setting on S3 storages, for endpoints with a self-signed or private CA certificate ([#9762](https://github.com/coollabsio/coolify/issues/9762), [#4402](https://github.com/coollabsio/coolify/issues/4402)) - -- It applies to the connection test, backups, restores and the deletion of old backups -- The S3 storages API sets it with `skip_tls_verification` -- Browsers that download files from the storage must still trust the certificate diff --git a/.changes/a-star-button-on-servers-and.md b/.changes/a-star-button-on-servers-and.md deleted file mode 100644 index 48571dac7a..0000000000 --- a/.changes/a-star-button-on-servers-and.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: added -commit: c648f4ec6a ---- -A star button on servers and resources for quick access on the dashboard - -- The button is after the status in the top bar diff --git a/.changes/a-ui-scale-option-in-the.md b/.changes/a-ui-scale-option-in-the.md deleted file mode 100644 index 6936de298b..0000000000 --- a/.changes/a-ui-scale-option-in-the.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: added -commit: bd499de1fb ---- -A `UI scale` option in the appearance settings diff --git a/.changes/a-warning-when-the-docker-compose.md b/.changes/a-warning-when-the-docker-compose.md deleted file mode 100644 index 03a364112e..0000000000 --- a/.changes/a-warning-when-the-docker-compose.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: added -commit: fc027be248 ---- -A warning when the Docker Compose file of an application is in a subdirectory of the base directory, with a button that moves the directory of the file into the base directory ([#9525](https://github.com/coollabsio/coolify/issues/9525)) - -- Coolify runs Docker Compose in the base directory, so relative paths such as `build.context: ..` resolve from there diff --git a/.changes/api-endpoints-and-mcp-tools-that.md b/.changes/api-endpoints-and-mcp-tools-that.md deleted file mode 100644 index ae9824bf12..0000000000 --- a/.changes/api-endpoints-and-mcp-tools-that.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: added -commit: 1703265353 ---- -API endpoints and MCP tools that manage image scanning and read the scan results - -- `GET` and `PATCH /api/v1/servers/{uuid}/image-scanning`, `GET /api/v1/vulnerabilities` and `GET /api/v1/{applications|databases|services}/{uuid}/vulnerabilities` -- The MCP tools are `get_vulnerabilities` and `manage_image_scanning` diff --git a/.changes/api-token-search-out-of-sync.md b/.changes/api-token-search-out-of-sync.md deleted file mode 100644 index f96f247c84..0000000000 --- a/.changes/api-token-search-out-of-sync.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: fixed -commit: 59481c7bb6 ---- -API token search out of sync after you create, edit or revoke a token ([#12465](https://github.com/coollabsio/coolify/issues/12465)) diff --git a/.changes/applications-and-databases-removed-from-the.md b/.changes/applications-and-databases-removed-from-the.md deleted file mode 100644 index 5ca616c8d9..0000000000 --- a/.changes/applications-and-databases-removed-from-the.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -type: fixed -commit: e29dcf70d9 ---- -Applications and databases removed from the Docker Compose file of a service showing as `Exited` and keeping the service degraded ([#9591](https://github.com/coollabsio/coolify/issues/9591)) - -- They show `Not in Compose file` and do not count in the service status -- Coolify keeps their settings and uses them again when you add the service back under the same name -- To remove one, delete it in its settings -- Existing ones are marked at the next deployment or save of the service diff --git a/.changes/applications-deleted-on-all-their-servers.md b/.changes/applications-deleted-on-all-their-servers.md deleted file mode 100644 index e349671fc4..0000000000 --- a/.changes/applications-deleted-on-all-their-servers.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -type: fixed -commit: 83a5667387 ---- -Applications deleted on all their servers when you delete a server that they use only as an additional destination - -- This applies to `Delete all resources` and `DELETE /api/v1/servers/{uuid}?force=true` -- Coolify removes the application only from the deleted server and stops its containers there -- A server that has only such applications can be deleted without `Delete all resources` -- The delete confirmation lists the resources it deletes and the applications that keep running on another server diff --git a/.changes/applied-the-limits-of-api-tokens.md b/.changes/applied-the-limits-of-api-tokens.md deleted file mode 100644 index 0430930612..0000000000 --- a/.changes/applied-the-limits-of-api-tokens.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: security -commit: 3c588d482d ---- -Applied the limits of API tokens to more permission checks - -- A message explains when a token limit blocks a change diff --git a/.changes/automatic-update-notifications-the-root-team.md b/.changes/automatic-update-notifications-the-root-team.md deleted file mode 100644 index 491a148357..0000000000 --- a/.changes/automatic-update-notifications-the-root-team.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: added -commit: a5c3ca0b73 ---- -Automatic update notifications, the root team gets one when an automatic update starts, fails or finishes - -- A manual upgrade that fails before the upgrade script starts shows the error in the upgrade modal diff --git a/.changes/bugsink-service-template-filling-the-disk.md b/.changes/bugsink-service-template-filling-the-disk.md deleted file mode 100644 index a6eb08f0bd..0000000000 --- a/.changes/bugsink-service-template-filling-the-disk.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: fixed -commit: ccaa04ce33 ---- -Bugsink service template filling the disk with MySQL binary logs until Bugsink stopped ([#10626](https://github.com/coollabsio/coolify/issues/10626)) - -- New services use PostgreSQL 17 and Bugsink 2 -- To stop the growth in an existing service, run `PURGE BINARY LOGS BEFORE NOW();` in MySQL, then add `command: ['--disable-log-bin']` to the `mysql` service and restart it diff --git a/.changes/builds-that-failed-with-x509-errors.md b/.changes/builds-that-failed-with-x509-errors.md deleted file mode 100644 index 44dd206847..0000000000 --- a/.changes/builds-that-failed-with-x509-errors.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 4b9fe035dc ---- -Builds that failed with x509 errors behind a TLS-inspecting proxy, although the server trusts the proxy CA ([#7568](https://github.com/coollabsio/coolify/issues/7568)) - -- The helper container mounts the CA bundle of the server read-only diff --git a/.changes/built-team-invitation-links-from-the.md b/.changes/built-team-invitation-links-from-the.md deleted file mode 100644 index b31495cf38..0000000000 --- a/.changes/built-team-invitation-links-from-the.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -type: security ---- -Built team invitation links from the instance URL instead of the request host, when no instance domain is set diff --git a/.changes/cancelled-the-older-queued-webhook-deployments.md b/.changes/cancelled-the-older-queued-webhook-deployments.md deleted file mode 100644 index e04496c0cb..0000000000 --- a/.changes/cancelled-the-older-queued-webhook-deployments.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -type: changed -breaking: true -commit: cf1e0e70c5 ---- -Cancelled the older queued webhook deployments of an application by default when a newer push arrives, so only the latest commit is built ([#10921](https://github.com/coollabsio/coolify/discussions/10921), [#7678](https://github.com/coollabsio/coolify/discussions/7678)) - -- It works per application, pull request and server -- `Advanced` > `Deployment` and `is_auto_cancel_queued_deployments_enabled` in the applications API turn it off -- Manual, API, restart and rollback deployments are never cancelled -- An opt-in setting, `is_auto_cancel_building_deployments_enabled` in the API, also stops an older webhook deployment that is still building, a deployment that started to replace containers always finishes -- `cancel_previous` (`none`, `queued` or `building`) on `/api/v1/deploy` and the MCP `deploy` tool cancels the older webhook, API and MCP deployments, the default is `none` diff --git a/.changes/checked-that-members-with-access-grants.md b/.changes/checked-that-members-with-access-grants.md deleted file mode 100644 index a335b5e2d8..0000000000 --- a/.changes/checked-that-members-with-access-grants.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -type: security -commit: 8011d0d6ab ---- -Checked that members with access grants can use the selected server and the team credentials - -- A new, cloned or migrated resource needs a server that the member can use, the localhost server needs an instance admin -- Server lists show only the servers that the member can use -- Team private keys, GitHub Apps, Gitea Apps and new S3 storages of backup schedules need write access on the whole team, also through the API -- A message explains when write access on the whole team is needed diff --git a/.changes/checked-the-deploy-permission-before-a.md b/.changes/checked-the-deploy-permission-before-a.md deleted file mode 100644 index 859b974e7b..0000000000 --- a/.changes/checked-the-deploy-permission-before-a.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: security -commit: 25b4236e35 ---- -Checked the deploy permission before a deploy through the API creates a preview or changes its image tag diff --git a/.changes/compose-services-that-could-not-reach.md b/.changes/compose-services-that-could-not-reach.md deleted file mode 100644 index 3f49941fb6..0000000000 --- a/.changes/compose-services-that-could-not-reach.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 3c87879e6b ---- -Compose services that could not reach each other by name in preview deployments and failed to start ([#8030](https://github.com/coollabsio/coolify/issues/8030)) - -- The original name is an alias on the preview network diff --git a/.changes/container-image-vulnerability-scanning-opt-in.md b/.changes/container-image-vulnerability-scanning-opt-in.md deleted file mode 100644 index 73fdbcee6c..0000000000 --- a/.changes/container-image-vulnerability-scanning-opt-in.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -type: added -commit: 3c33f61d7b ---- -Container image vulnerability scanning, opt-in for each server and each application - -- Syft and Grype run on your server, and no data goes to a third party -- Each resource gets one security status and version recommendations, with an optional deploy gate for each application -- The team `Security` page and the notifications show the results diff --git a/.changes/copy-from-instance-settings-from-the.md b/.changes/copy-from-instance-settings-from-the.md deleted file mode 100644 index e598afeff3..0000000000 --- a/.changes/copy-from-instance-settings-from-the.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: removed -commit: f7867923b7 ---- -`Copy from instance settings` from the email notification page, select `Use system-wide settings` instead diff --git a/.changes/copy-logs-not-changing-the-clipboard.md b/.changes/copy-logs-not-changing-the-clipboard.md deleted file mode 100644 index 23450d6c69..0000000000 --- a/.changes/copy-logs-not-changing-the-clipboard.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 1ff99b0dc8 ---- -`Copy logs` not changing the clipboard on iPhone and iPad, in the runtime and deployment logs ([#9408](https://github.com/coollabsio/coolify/issues/9408)) - -- Coolify starts the clipboard write during the tap and adds the logs when they load diff --git a/.changes/cut-off-descriptions-of-postgresql-mongodb.md b/.changes/cut-off-descriptions-of-postgresql-mongodb.md deleted file mode 100644 index d8b926f296..0000000000 --- a/.changes/cut-off-descriptions-of-postgresql-mongodb.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: fixed -commit: 813bc72af4 ---- -Cut-off descriptions of PostgreSQL, MongoDB and ClickHouse on the new resource page diff --git a/.changes/data-that-looked-lost-after-you.md b/.changes/data-that-looked-lost-after-you.md deleted file mode 100644 index 7a868f20ee..0000000000 --- a/.changes/data-that-looked-lost-after-you.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: a05fe524f8 ---- -Data that looked lost after you changed the name of a persistent volume, because a new name points to a new, empty Docker volume ([#8816](https://github.com/coollabsio/coolify/issues/8816)) - -- A dialog asks for confirmation and tells you to copy the data into the new volume diff --git a/.changes/database-backup-executions-table-that-did.md b/.changes/database-backup-executions-table-that-did.md deleted file mode 100644 index 9be99fba1a..0000000000 --- a/.changes/database-backup-executions-table-that-did.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: fixed -commit: 0b89b857ed ---- -Database backup executions table that did not fit the page and was hard to read ([#7188](https://github.com/coollabsio/coolify/issues/7188)) - -- It shows the file name of the archive, with a button that copies its path -- It shows `All databases` for a backup of all databases diff --git a/.changes/database-backups-saved-to-s3-when.md b/.changes/database-backups-saved-to-s3-when.md deleted file mode 100644 index becdbfcbcc..0000000000 --- a/.changes/database-backups-saved-to-s3-when.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 3b64cbc379 ---- -Database backups saved to S3 when an API request does not send `save_s3` - -- The backup page resets the S3 selection when a change is not allowed diff --git a/.changes/database-backups-that-passed-the-worker.md b/.changes/database-backups-that-passed-the-worker.md deleted file mode 100644 index 6ed3367e4c..0000000000 --- a/.changes/database-backups-that-passed-the-worker.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -type: fixed -commit: 5c71067481 ---- -Database backups that passed the worker timeout, stayed running, and left the upload container and the dump file on the server - -- Each step gets only the time that is left of the backup timeout, so a run that takes too long fails and cleans up -- An SSH retry does not start a second dump -- The backup log explains exit code 124, and the timeout help says that it covers the complete run -- The daily helper container cleanup removes the upload containers of executions that are not running diff --git a/.changes/deleted-coolify-yaml-and-an-unreachable.md b/.changes/deleted-coolify-yaml-and-an-unreachable.md deleted file mode 100644 index a4925682d3..0000000000 --- a/.changes/deleted-coolify-yaml-and-an-unreachable.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: ed03a31b3a ---- -Deleted `coolify.yaml` and an unreachable dashboard on a server with the IP `host.docker.internal` that is not the default localhost server ([#12444](https://github.com/coollabsio/coolify/issues/12444)) - -- Coolify keeps treating this server as localhost after a save, for example after a proxy restart diff --git a/.changes/deleted-volume-coming-back-after-a.md b/.changes/deleted-volume-coming-back-after-a.md deleted file mode 100644 index 19dff39023..0000000000 --- a/.changes/deleted-volume-coming-back-after-a.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: fixed -commit: 780d67ccbb ---- -Deleted volume coming back after a redeploy when the image declares `VOLUME` at its path ([#6875](https://github.com/coollabsio/coolify/issues/6875)) - -- Coolify removes containers that still mount a deleted volume before it starts the new ones -- The stale volume delete dialog warns when a container still uses the volume diff --git a/.changes/deploy-canvas-cards-with-another-border.md b/.changes/deploy-canvas-cards-with-another-border.md deleted file mode 100644 index aae8ad11b1..0000000000 --- a/.changes/deploy-canvas-cards-with-another-border.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: fixed -commit: 5960814df5 ---- -Deploy canvas cards with another border than the resource tiles diff --git a/.changes/deployments-started-through-the-mcp-server.md b/.changes/deployments-started-through-the-mcp-server.md deleted file mode 100644 index 48a2abfebc..0000000000 --- a/.changes/deployments-started-through-the-mcp-server.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: fixed -commit: b063a41624 ---- -Deployments started through the MCP server saved as API deployments - -- The deployment list shows them with the `MCP` source and filter -- The API and MCP deployment data have a new `is_mcp` field diff --git a/.changes/deployments-that-failed-on-one-502.md b/.changes/deployments-that-failed-on-one-502.md deleted file mode 100644 index 6628cec726..0000000000 --- a/.changes/deployments-that-failed-on-one-502.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: fixed -commit: d70801aaa1 ---- -Deployments that failed on one `502` or one timeout from the GitHub API ([#9785](https://github.com/coollabsio/coolify/issues/9785)) - -- GitHub API reads retry up to three times on a 5xx error or a failed connection -- Writes, such as pull request comments, are not retried diff --git a/.changes/deployments-that-failed-with-curl-error.md b/.changes/deployments-that-failed-with-curl-error.md deleted file mode 100644 index 0d08bc88af..0000000000 --- a/.changes/deployments-that-failed-with-curl-error.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: b7a2c75739 ---- -Deployments that failed with `cURL error 28` on `https://api.github.com/zen`, because Coolify compared its clock with GitHub before each token request ([#9785](https://github.com/coollabsio/coolify/issues/9785)) - -- Coolify compares the clocks only when GitHub rejects a request, from the `Date` header of that response diff --git a/.changes/deployments-that-failed-with-the-container.md b/.changes/deployments-that-failed-with-the-container.md deleted file mode 100644 index b39f253b44..0000000000 --- a/.changes/deployments-that-failed-with-the-container.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: d6405d5545 ---- -Deployments that failed with "The container name ... is already in use" when `Use build secrets` is on ([#9363](https://github.com/coollabsio/coolify/issues/9363)) - -- Coolify removes the old helper container and waits until Docker frees the name diff --git a/.changes/deployments-that-stopped-on-a-broken.md b/.changes/deployments-that-stopped-on-a-broken.md deleted file mode 100644 index 548e89c346..0000000000 --- a/.changes/deployments-that-stopped-on-a-broken.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 0b45d8dd6c ---- -Deployments that stopped on a broken `.env` file, because multi-line JSON values saved before exact escaping had no quotes ([#8279](https://github.com/coollabsio/coolify/issues/8279)) - -- These values use exact escaping, which gives the container the same value as before beta.463 diff --git a/.changes/deployments-to-additional-servers-losing-the.md b/.changes/deployments-to-additional-servers-losing-the.md deleted file mode 100644 index 17c1be2a33..0000000000 --- a/.changes/deployments-to-additional-servers-losing-the.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 37b4a8b4e7 ---- -Deployments to additional servers losing the source of the main deployment - -- The audit log records actions that MCP tools do through the API as MCP events diff --git a/.changes/different-coolify-branch-values-in-the.md b/.changes/different-coolify-branch-values-in-the.md deleted file mode 100644 index 3daa5e9f70..0000000000 --- a/.changes/different-coolify-branch-values-in-the.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 71814b4541 ---- -Different `COOLIFY_BRANCH` values in the parts of a preview deployment ([#9572](https://github.com/coollabsio/coolify/issues/9572)) - -- All parts use `pull//head` diff --git a/.changes/disabled-self-hosted-servers-that-stayed.md b/.changes/disabled-self-hosted-servers-that-stayed.md deleted file mode 100644 index fff2a0eea2..0000000000 --- a/.changes/disabled-self-hosted-servers-that-stayed.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -type: fixed -commit: f7ea962145 ---- -Disabled self-hosted servers that stayed disabled after a validation that connects ([#12475](https://github.com/coollabsio/coolify/issues/12475)) - -- The unreachable cleanup skips the localhost server -- The server page explains why a server is disabled -- Coolify Cloud servers and transferred servers stay disabled diff --git a/.changes/dns-matches-on-a-domain-in.md b/.changes/dns-matches-on-a-domain-in.md deleted file mode 100644 index 5cc469b4e6..0000000000 --- a/.changes/dns-matches-on-a-domain-in.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -type: fixed -commit: b7defddc32 ---- -`DNS matches` on a domain in a connected Cloudflare zone that goes through Cloudflare to a different server, which then failed with Cloudflare error 526 and a Let's Encrypt error ([#12436](https://github.com/coollabsio/coolify/issues/12436)) - -- The domain shows `DNS mismatch` -- CNAME records, for example of a Cloudflare Tunnel, are still accepted -- A clone of an application or a service, or a new one through the API, gets a Cloudflare DNS record for each domain in a zone with automatic DNS, a clone only for the domains that the source does not use diff --git a/.changes/docker-builds-that-failed-with-buildkit.md b/.changes/docker-builds-that-failed-with-buildkit.md deleted file mode 100644 index d600062721..0000000000 --- a/.changes/docker-builds-that-failed-with-buildkit.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: fixed -commit: 8c6774e17f ---- -Docker builds that failed with "BuildKit is enabled but the buildx component is missing or broken" when an application has a build-time variable `HOME` or `DOCKER_CONFIG` ([#9726](https://github.com/coollabsio/coolify/issues/9726)) - -- The Docker CLI in the helper container always uses `/root/.docker` -- A `HOME` build argument keeps its value diff --git a/.changes/docker-compose-previews-sharing-one-project.md b/.changes/docker-compose-previews-sharing-one-project.md deleted file mode 100644 index 57f9bb52da..0000000000 --- a/.changes/docker-compose-previews-sharing-one-project.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: d09480973e ---- -Docker Compose previews sharing one project with the application and the other previews, so Docker Compose treated their containers as orphans ([#9014](https://github.com/coollabsio/coolify/issues/9014)) - -- Each preview has its own Compose project, and the networks that the Compose file declares are not shared diff --git a/.changes/dockerfile-healthcheck-options-not-imported-as.md b/.changes/dockerfile-healthcheck-options-not-imported-as.md deleted file mode 100644 index 59a3e5e743..0000000000 --- a/.changes/dockerfile-healthcheck-options-not-imported-as.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 51a7e97619 ---- -Dockerfile `HEALTHCHECK` options not imported as Docker reads them, zero and sub-second values became 0 seconds ([#12455](https://github.com/coollabsio/coolify/issues/12455)) - -- Coolify reads compound and fractional durations, quoted values, only the flags before `CMD`, the `escape` directive and `NONE` with flags diff --git a/.changes/dockerfile-healthcheck-read-from-a-stage.md b/.changes/dockerfile-healthcheck-read-from-a-stage.md deleted file mode 100644 index 250574c346..0000000000 --- a/.changes/dockerfile-healthcheck-read-from-a-stage.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: fixed -commit: fcf92b751f ---- -Dockerfile `HEALTHCHECK` read from a stage that is not built ([#9475](https://github.com/coollabsio/coolify/issues/9475)) diff --git a/.changes/domains-showing-not-checked-when-an.md b/.changes/domains-showing-not-checked-when-an.md deleted file mode 100644 index 086038c392..0000000000 --- a/.changes/domains-showing-not-checked-when-an.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: fixed -commit: c3a21eceeb ---- -Domains showing `Not checked` when an existing Cloudflare DNS record of a new domain has a different IP - -- Coolify replaces the record when it created the record and no other resource uses it -- Otherwise it opens the `Configure DNS` dialog, where you can replace the record, and the domain shows the conflict diff --git a/.changes/duplicate-and-empty-rows-in-the.md b/.changes/duplicate-and-empty-rows-in-the.md deleted file mode 100644 index f0ff496d7d..0000000000 --- a/.changes/duplicate-and-empty-rows-in-the.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: fixed -commit: b7d0e6be2a ---- -Duplicate and empty rows in the audit log diff --git a/.changes/duplicate-environment-variables-and-extra-copies.md b/.changes/duplicate-environment-variables-and-extra-copies.md deleted file mode 100644 index 1e10d48260..0000000000 --- a/.changes/duplicate-environment-variables-and-extra-copies.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: fixed -commit: f9bde1cd7a ---- -Duplicate environment variables, and extra copies that could not be removed ([#8041](https://github.com/coollabsio/coolify/issues/8041)) diff --git a/.changes/empty-database-backups-of-odoo-services.md b/.changes/empty-database-backups-of-odoo-services.md deleted file mode 100644 index 4980384998..0000000000 --- a/.changes/empty-database-backups-of-odoo-services.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 232e8b8616 ---- -Empty database backups of Odoo services, which backed up only the empty `postgres` database ([#7555](https://github.com/coollabsio/coolify/issues/7555)) - -- New backup schedules of Odoo services back up all databases by default diff --git a/.changes/empty-disk-usage-on-the-metrics.md b/.changes/empty-disk-usage-on-the-metrics.md deleted file mode 100644 index a6148f0788..0000000000 --- a/.changes/empty-disk-usage-on-the-metrics.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 6254f44f16 ---- -Empty disk usage on the `Metrics` tab, the `Fleet` page and in the MCP `get_server_metrics` tool when Sentinel reports the Coolify data disk under another mount point than `/`, `/data` or `/data/coolify` ([#12448](https://github.com/coollabsio/coolify/issues/12448)) - -- This occurs for example on a NAS where `/data` is a symlink into a data volume diff --git a/.changes/empty-list-of-the-commit-images.md b/.changes/empty-list-of-the-commit-images.md deleted file mode 100644 index b78337a444..0000000000 --- a/.changes/empty-list-of-the-commit-images.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: f057aaf2e6 ---- -Empty list of the commit images of Docker Compose applications on the `Rollback` page and in `GET /api/v1/applications/{uuid}/rollback-images`, since v4.5.0 ([#12446](https://github.com/coollabsio/coolify/issues/12446)) - -- The page also shows the running commit when the Compose file has services from other images diff --git a/.changes/ended-terminal-sessions-when-access-to.md b/.changes/ended-terminal-sessions-when-access-to.md deleted file mode 100644 index 47e963c225..0000000000 --- a/.changes/ended-terminal-sessions-when-access-to.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: security -commit: cdc45e5736 ---- -Ended terminal sessions when access to the server is lost diff --git a/.changes/enforced-fixed-ssh-connection-options-on.md b/.changes/enforced-fixed-ssh-connection-options-on.md deleted file mode 100644 index 9a91afa49a..0000000000 --- a/.changes/enforced-fixed-ssh-connection-options-on.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: security -commit: cdc45e5736 ---- -Enforced fixed SSH connection options on every connection, also for health checks diff --git a/.changes/exact-start-time-in-service-backup.md b/.changes/exact-start-time-in-service-backup.md deleted file mode 100644 index 6f820e845e..0000000000 --- a/.changes/exact-start-time-in-service-backup.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: ba966846e1 ---- -Exact start time in service backup executions that is hard to read - -- The table shows the relative time, with the exact date in a tooltip diff --git a/.changes/expired-sessions-kept-for-the-retention.md b/.changes/expired-sessions-kept-for-the-retention.md deleted file mode 100644 index 9fa1699db9..0000000000 --- a/.changes/expired-sessions-kept-for-the-retention.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 960471984c ---- -Expired sessions kept for the retention days of the database cleanup ([#7394](https://github.com/coollabsio/coolify/issues/7394)) - -- The cleanup deletes sessions older than the session lifetime diff --git a/.changes/failed-backups-to-s3-endpoints-with.md b/.changes/failed-backups-to-s3-endpoints-with.md deleted file mode 100644 index 5c284810e5..0000000000 --- a/.changes/failed-backups-to-s3-endpoints-with.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 21d1ad4874 ---- -Failed backups to S3 endpoints with a path, such as `/storage/v1/s3` of Supabase Storage ([#8530](https://github.com/coollabsio/coolify/issues/8530)) - -- Database backups, volume backups and S3 restores use curl with a presigned URL for these endpoints diff --git a/.changes/failed-clone-of-an-application-with.md b/.changes/failed-clone-of-an-application-with.md deleted file mode 100644 index de5bcce38a..0000000000 --- a/.changes/failed-clone-of-an-application-with.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: c94411fb92 ---- -Failed clone of an application with a fixed preview URL template, with a duplicate preview domain error and a stopped, partial clone - -- A clone does not copy preview deployments and gets its own from new pull requests diff --git a/.changes/failed-docker-install-on-ubuntu-derivatives.md b/.changes/failed-docker-install-on-ubuntu-derivatives.md deleted file mode 100644 index 63e672a788..0000000000 --- a/.changes/failed-docker-install-on-ubuntu-derivatives.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: fixed -commit: d6acd9a3c5 ---- -Failed Docker install on Ubuntu derivatives such as Pop!_OS and Linux Mint, and on Raspbian 13 (Trixie) ([#9455](https://github.com/coollabsio/coolify/issues/9455)) - -- The fallback uses the Ubuntu repository with `UBUNTU_CODENAME` on Ubuntu derivatives -- It uses the Debian repository on Raspbian 13, which has no Docker repository of its own diff --git a/.changes/failed-image-pull-in-the-convex.md b/.changes/failed-image-pull-in-the-convex.md deleted file mode 100644 index 2c6e28f303..0000000000 --- a/.changes/failed-image-pull-in-the-convex.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: fixed -commit: 3895ca05f3 ---- -Failed image pull in the Convex service template, after the rename to the `ghcr.io/convex` namespace ([#12449](https://github.com/coollabsio/coolify/issues/12449)) diff --git a/.changes/failed-parse-of-a-docker-compose.md b/.changes/failed-parse-of-a-docker-compose.md deleted file mode 100644 index 3f488940e1..0000000000 --- a/.changes/failed-parse-of-a-docker-compose.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 455b22f26c ---- -Failed parse of a Docker Compose file whose `services` key is empty or is not a map, and unexplained exit code 255 in failed commands - -- The message explains that the SSH connection to the server closed before the command finished diff --git a/.changes/failed-s3-uploads-of-backups-larger.md b/.changes/failed-s3-uploads-of-backups-larger.md deleted file mode 100644 index 9d292d9ccb..0000000000 --- a/.changes/failed-s3-uploads-of-backups-larger.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: fixed -commit: 8126a5c128 ---- -Failed S3 uploads of backups larger than about 15.6 GiB on providers that accept only 1000 parts, such as Scaleway ([#8411](https://github.com/coollabsio/coolify/issues/8411)) diff --git a/.changes/failed-sign-up-and-login-in.md b/.changes/failed-sign-up-and-login-in.md deleted file mode 100644 index e153446c3e..0000000000 --- a/.changes/failed-sign-up-and-login-in.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: fixed -commit: d3ef4d1c57 ---- -Failed sign-up and login in the Rybbit service template, `/api` requests got a 404 error ([#9055](https://github.com/coollabsio/coolify/issues/9055)) - -- The template routes `/api` on the same domain to the backend on port 3001 and keeps the `/api` prefix -- For an existing service, add `SERVICE_URL_RYBBIT_3001=/api` to `rybbit_backend`, move it above `rybbit` in the Docker Compose file, set `Path prefixes` to `Keep prefixes` in the advanced settings of the backend and redeploy diff --git a/.changes/failed-startup-and-broken-public-album.md b/.changes/failed-startup-and-broken-public-album.md deleted file mode 100644 index 5deb18db80..0000000000 --- a/.changes/failed-startup-and-broken-public-album.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -type: fixed -commit: 927e3f0b42 ---- -Failed startup and broken public album links in the Ente service templates ([#7405](https://github.com/coollabsio/coolify/issues/7405)) - -- An albums service with its own domain serves public links -- The images come from `ghcr.io/ente`, and the JWT secret is URL-safe so that Museum can decode it -- With S3, the template uses the routed `MINIO_SERVER_URL` as the S3 endpoint and allows all CORS origins diff --git a/.changes/forgejo-and-codeberg-in-the-gitea.md b/.changes/forgejo-and-codeberg-in-the-gitea.md deleted file mode 100644 index 003bec0be2..0000000000 --- a/.changes/forgejo-and-codeberg-in-the-gitea.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: added -commit: a58588faa0 ---- -Forgejo and Codeberg in the Gitea App source - -- A `Provider` list fills in the Gitea.com or Codeberg URLs -- Webhooks accept the `X-Forgejo-*` headers diff --git a/.changes/generated-new-ssh-keys-as-ed25519.md b/.changes/generated-new-ssh-keys-as-ed25519.md deleted file mode 100644 index ca9854aa94..0000000000 --- a/.changes/generated-new-ssh-keys-as-ed25519.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: security -commit: cdc45e5736 ---- -Generated new SSH keys as Ed25519 and validated private keys more strictly diff --git a/.changes/generic-error-when-a-new-private.md b/.changes/generic-error-when-a-new-private.md deleted file mode 100644 index e128e8958f..0000000000 --- a/.changes/generic-error-when-a-new-private.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: b83b97f7e6 ---- -Generic error when a new private key cannot connect to a server ([#7980](https://github.com/coollabsio/coolify/issues/7980)) - -- The message shows the SSH error diff --git a/.changes/gitea-app-endpoints-in-the-api.md b/.changes/gitea-app-endpoints-in-the-api.md deleted file mode 100644 index 3cd0153479..0000000000 --- a/.changes/gitea-app-endpoints-in-the-api.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: added -commit: 3bc82eb71d ---- -Gitea App endpoints in the API and the MCP tools, `GET /gitea-apps` and `POST /applications/private-gitea-app` ([#12459](https://github.com/coollabsio/coolify/issues/12459)) - -- `gitea_app_uuid` sets the source when you create or update an application diff --git a/.changes/github-deployments-sync-each-deployment-and.md b/.changes/github-deployments-sync-each-deployment-and.md deleted file mode 100644 index 098affd211..0000000000 --- a/.changes/github-deployments-sync-each-deployment-and.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: added -commit: bf4b6ad921 ---- -GitHub Deployments sync, each deployment and preview reports to GitHub Deployments with links to the log and the environment - -- It needs a private GitHub App with `Deployments: write` diff --git a/.changes/hardened-smtp-and-terminal-connections.md b/.changes/hardened-smtp-and-terminal-connections.md deleted file mode 100644 index 7d8de669f9..0000000000 --- a/.changes/hardened-smtp-and-terminal-connections.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: security -commit: cdc45e5736 ---- -Hardened SMTP and terminal connections - -- SMTP hosts are validated, and Coolify connects only to the checked address -- The error message explains why an SMTP host is refused diff --git a/.changes/health-checks-in-their-start-period.md b/.changes/health-checks-in-their-start-period.md deleted file mode 100644 index 86945caf50..0000000000 --- a/.changes/health-checks-in-their-start-period.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: fixed -commit: 666ac84efb ---- -Health checks in their start period shown as unknown, not as `running:starting` ([#9411](https://github.com/coollabsio/coolify/issues/9411)) diff --git a/.changes/hid-the-secrets-of-the-server.md b/.changes/hid-the-secrets-of-the-server.md deleted file mode 100644 index 4a01617d68..0000000000 --- a/.changes/hid-the-secrets-of-the-server.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -type: security ---- -Limited the server data in the application, service, and database API responses to tokens that cover the whole team diff --git a/.changes/hid-the-server-details-of-a.md b/.changes/hid-the-server-details-of-a.md deleted file mode 100644 index 2eebc3f5fb..0000000000 --- a/.changes/hid-the-server-details-of-a.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -type: security ---- -Removed the server details from the response of the `get_service` MCP tool diff --git a/.changes/high-cpu-use-of-dockerd-while.md b/.changes/high-cpu-use-of-dockerd-while.md deleted file mode 100644 index 63b5b52740..0000000000 --- a/.changes/high-cpu-use-of-dockerd-while.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: fixed -commit: 1b571f4509 ---- -High CPU use of `dockerd` while you stream the logs of a container with a large log file ([#7693](https://github.com/coollabsio/coolify/issues/7693)) diff --git a/.changes/ignored-concurrent-build-limit-of-build.md b/.changes/ignored-concurrent-build-limit-of-build.md deleted file mode 100644 index d0f2fa48d6..0000000000 --- a/.changes/ignored-concurrent-build-limit-of-build.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: fixed -commit: e0b94662e9 ---- -Ignored concurrent build limit of build servers ([#7649](https://github.com/coollabsio/coolify/issues/7649)) - -- Each build counts on the server that runs it, and a deployment reserves a build server with a free slot when it starts -- A freed build server slot starts the waiting deployments of other servers diff --git a/.changes/import-backup-from-the-resource-menu.md b/.changes/import-backup-from-the-resource-menu.md deleted file mode 100644 index 27f671b4e9..0000000000 --- a/.changes/import-backup-from-the-resource-menu.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: changed -commit: 688134a994 ---- -`Import Backup` from the resource menu to an `Import backup` button on the `Backups` page of databases and services ([#11818](https://github.com/coollabsio/coolify/discussions/11818)) - -- The button opens the import in a dialog -- Old `Import Backup` links open the `Backups` page diff --git a/.changes/inconsistent-status-badges-and-s3-storage.md b/.changes/inconsistent-status-badges-and-s3-storage.md deleted file mode 100644 index 1c4af5c777..0000000000 --- a/.changes/inconsistent-status-badges-and-s3-storage.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: fixed -commit: b12c965fbe ---- -Inconsistent status badges and S3 storage names in service backup tables diff --git a/.changes/instance-database-backups-running-on-the.md b/.changes/instance-database-backups-running-on-the.md deleted file mode 100644 index 8422c84366..0000000000 --- a/.changes/instance-database-backups-running-on-the.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -type: fixed -commit: 860e786481 ---- -Instance database backups running on the wrong server when the destination of `coolify-db` points to another one ([#8139](https://github.com/coollabsio/coolify/issues/8139)) - -- The backup always runs on the Coolify host -- A failed pre-update backup shows why it failed -- The pre-update backup skips a disabled schedule diff --git a/.changes/kept-personal-data-and-credentials-out.md b/.changes/kept-personal-data-and-credentials-out.md deleted file mode 100644 index 416d6c72da..0000000000 --- a/.changes/kept-personal-data-and-credentials-out.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: security -commit: 3379fa448a ---- -Kept personal data and credentials out of audit events - -- The audit events of a deleted user are anonymized diff --git a/.changes/kept-stored-private-keys-out-of.md b/.changes/kept-stored-private-keys-out-of.md deleted file mode 100644 index 8eea5dc17c..0000000000 --- a/.changes/kept-stored-private-keys-out-of.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: security -commit: cdc45e5736 ---- -Kept stored private keys out of the browser diff --git a/.changes/kept-the-sentinel-token-out-of.md b/.changes/kept-the-sentinel-token-out-of.md deleted file mode 100644 index 713b428b07..0000000000 --- a/.changes/kept-the-sentinel-token-out-of.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: security -commit: cdc45e5736 ---- -Kept the Sentinel token out of process arguments - -- Sentinel reads it from an env file diff --git a/.changes/limited-api-clients-that-keep-failing.md b/.changes/limited-api-clients-that-keep-failing.md deleted file mode 100644 index 80bab0ad11..0000000000 --- a/.changes/limited-api-clients-that-keep-failing.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: security -commit: 13298591d8 ---- -Limited API clients that keep failing to 30 failed requests per minute for one token or IP - -- More failed requests get `429`, `API_FAILED_REQUEST_RATE_LIMIT` sets the limit -- The team of the token gets one notification a day when the token reaches the limit diff --git a/.changes/limited-the-cloud-provider-token-api.md b/.changes/limited-the-cloud-provider-token-api.md deleted file mode 100644 index a662548647..0000000000 --- a/.changes/limited-the-cloud-provider-token-api.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: changed -breaking: true -commit: cdc45e5736 ---- -Limited the cloud provider token API to team admins and owners - -- Other members get `403` diff --git a/.changes/litellm-service-template-with-a-master.md b/.changes/litellm-service-template-with-a-master.md deleted file mode 100644 index 88b24eaca8..0000000000 --- a/.changes/litellm-service-template-with-a-master.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -type: fixed -commit: a487d7c9d3 ---- -LiteLLM service template with a master key that did not start with `sk-` ([#10521](https://github.com/coollabsio/coolify/issues/10521)) - -- The admin API key is `sk-` followed by the value of `SERVICE_PASSWORD_MASTERKEY` -- A separate `LITELLM_SALT_KEY` keeps stored model credentials readable when the master key changes -- `STORE_MODEL_IN_DB` is `True` by default, so you can add models in the LiteLLM UI diff --git a/.changes/live-updates-such-as-proxy-restart.md b/.changes/live-updates-such-as-proxy-restart.md deleted file mode 100644 index c9bfe53126..0000000000 --- a/.changes/live-updates-such-as-proxy-restart.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: fixed -commit: c8c639e3d6 ---- -Live updates, such as proxy restart logs, that did not reach the browser, because the WebSocket handshake failed with `413` with large cookie headers diff --git a/.changes/localhost-server-page-that-did-not.md b/.changes/localhost-server-page-that-did-not.md deleted file mode 100644 index 0c9521f01c..0000000000 --- a/.changes/localhost-server-page-that-did-not.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: fixed -commit: ca27224628 ---- -Localhost server page that did not refresh after its connection is validated diff --git a/.changes/locked-environment-variables-that-could-not.md b/.changes/locked-environment-variables-that-could-not.md deleted file mode 100644 index f58a7f6a9e..0000000000 --- a/.changes/locked-environment-variables-that-could-not.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: fixed -commit: da7779d061 ---- -Locked environment variables that could not be changed, unlocked or deleted when Docker Compose uses them ([#6803](https://github.com/coollabsio/coolify/issues/6803)) - -- A locked value can be replaced without showing it -- The lock is permanent in the UI, the API and MCP, and `Lock` asks for confirmation diff --git a/.changes/lost-audit-events-12433-https-github.md b/.changes/lost-audit-events-12433-https-github.md deleted file mode 100644 index 05a25fddf2..0000000000 --- a/.changes/lost-audit-events-12433-https-github.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: cdc45e5736 ---- -Lost audit events - -- Coolify writes audit events at commit time diff --git a/.changes/lost-telegram-notifications-when-telegram-rejects.md b/.changes/lost-telegram-notifications-when-telegram-rejects.md deleted file mode 100644 index dc5cbf8e97..0000000000 --- a/.changes/lost-telegram-notifications-when-telegram-rejects.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: a7b7aa350a ---- -Lost Telegram notifications when Telegram rejects a button URL, for example localhost or an IP address without a domain ([#8269](https://github.com/coollabsio/coolify/issues/8269)) - -- Coolify then sends the links as text diff --git a/.changes/lost-trailing-newline-of-multiline-environment.md b/.changes/lost-trailing-newline-of-multiline-environment.md deleted file mode 100644 index 6bbb1945ec..0000000000 --- a/.changes/lost-trailing-newline-of-multiline-environment.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -type: fixed -commit: 52a78cdb0f ---- -Lost trailing newline of multiline environment variables, so OpenSSH rejected an SSH private key with "error in libcrypto" ([#9438](https://github.com/coollabsio/coolify/issues/9438)) - -- A value with more than one line is saved exactly as you enter it, in the UI and in the API -- Single-line values still lose their edge whitespace -- Save a variable again to add the newline that Coolify removed diff --git a/.changes/lost-update-channel-in-settings-updates.md b/.changes/lost-update-channel-in-settings-updates.md deleted file mode 100644 index 6950fa914c..0000000000 --- a/.changes/lost-update-channel-in-settings-updates.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 7e7f491749 ---- -Lost update channel in `Settings` > `Updates` and lost healthcheck `Check type` when one of them is the only change - -- The `Save changes` bar opens for them diff --git a/.changes/maintenance-mode-to-its-own-maintenance.md b/.changes/maintenance-mode-to-its-own-maintenance.md deleted file mode 100644 index 25630ea198..0000000000 --- a/.changes/maintenance-mode-to-its-own-maintenance.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: changed -commit: 17a9fa624e ---- -Maintenance mode to its own `Maintenance` page of applications and services, and you must confirm the toggle diff --git a/.changes/missing-check-of-the-closest-cloudflare.md b/.changes/missing-check-of-the-closest-cloudflare.md deleted file mode 100644 index 70dc51bde5..0000000000 --- a/.changes/missing-check-of-the-closest-cloudflare.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: fixed -commit: e20e652c00 ---- -Missing check of the closest Cloudflare wildcard record for deeper domain names, such as `app.apps.example.com` through `*.example.com` ([#12436](https://github.com/coollabsio/coolify/issues/12436)) diff --git a/.changes/missing-cloudflare-dns-record-when-you.md b/.changes/missing-cloudflare-dns-record-when-you.md deleted file mode 100644 index c30b763a85..0000000000 --- a/.changes/missing-cloudflare-dns-record-when-you.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: fixed -commit: daf0e1a70c ---- -Missing Cloudflare DNS record when you edit a domain to a hostname in a connected Cloudflare zone, for example a generated domain changed to your own domain - -- Coolify adds the record automatically or opens the `Configure DNS` dialog, as it did only for new domains -- This applies to the `Domains` pages, the application and service application settings and the service application API diff --git a/.changes/missing-disabled-server-message-on-the.md b/.changes/missing-disabled-server-message-on-the.md deleted file mode 100644 index 7db79d7eb5..0000000000 --- a/.changes/missing-disabled-server-message-on-the.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: fixed -commit: eb5f238a45 ---- -Missing disabled server message on the localhost server page ([#12475](https://github.com/coollabsio/coolify/issues/12475)) diff --git a/.changes/missing-git-error-reason-when-coolify.md b/.changes/missing-git-error-reason-when-coolify.md deleted file mode 100644 index 3982b272e0..0000000000 --- a/.changes/missing-git-error-reason-when-coolify.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: fixed -commit: 3f51c251c0 ---- -Missing Git error reason when Coolify cannot read a repository diff --git a/.changes/missing-links-to-the-provider-dashboards.md b/.changes/missing-links-to-the-provider-dashboards.md deleted file mode 100644 index cdcb7c50fe..0000000000 --- a/.changes/missing-links-to-the-provider-dashboards.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: fixed -commit: 693cf0486d ---- -Missing links to the provider dashboards on the secret manager token forms diff --git a/.changes/missing-project-environment-and-service-in.md b/.changes/missing-project-environment-and-service-in.md deleted file mode 100644 index d821ce2054..0000000000 --- a/.changes/missing-project-environment-and-service-in.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 8d07d178f0 ---- -Missing project, environment and service in Fluent Bit log drains for containers without the Coolify default variables ([#8415](https://github.com/coollabsio/coolify/issues/8415)) - -- The `fluentd` driver also sends the Coolify container labels, and the built-in configurations use them as a fallback diff --git a/.changes/missing-resource-status-changes-notification-when.md b/.changes/missing-resource-status-changes-notification-when.md deleted file mode 100644 index 820c46c569..0000000000 --- a/.changes/missing-resource-status-changes-notification-when.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -type: fixed -commit: f21acdc3e4 ---- -Missing `Resource status changes` notification when an application, preview, service or database stops unexpectedly, for example after a crash or `docker kill` ([#9493](https://github.com/coollabsio/coolify/issues/9493)) - -- Coolify waits 2 minutes and notifies only when the resource is still stopped -- A stop, restart or redeploy from Coolify sends no notification -- The same resource sends at most one notification in 15 minutes diff --git a/.changes/missing-traefik-proxy-outdated-notification-when.md b/.changes/missing-traefik-proxy-outdated-notification-when.md deleted file mode 100644 index 1b427b52e2..0000000000 --- a/.changes/missing-traefik-proxy-outdated-notification-when.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 2fbe9d2abe ---- -Missing `Traefik Proxy Outdated` notification when a newer Traefik patch version of the running branch is available ([#9727](https://github.com/coollabsio/coolify/issues/9727)) - -- Coolify sends one notification for each new patch version, not one for each hourly check diff --git a/.changes/moved-the-resend-sender-to-the.md b/.changes/moved-the-resend-sender-to-the.md deleted file mode 100644 index 0196275f39..0000000000 --- a/.changes/moved-the-resend-sender-to-the.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: changed -breaking: true -commit: f7867923b7 ---- -Moved the Resend sender to the new `resend_from_address` and `resend_from_name` fields, API clients must use the new fields - -- A migration copies the current values diff --git a/.changes/names-and-descriptions-saved-through-the.md b/.changes/names-and-descriptions-saved-through-the.md deleted file mode 100644 index 7f09b19e8b..0000000000 --- a/.changes/names-and-descriptions-saved-through-the.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 32541a32ce ---- -Names and descriptions saved through the API and the MCP server that the UI rejects, so the resource could not be saved in the UI afterwards ([#12466](https://github.com/coollabsio/coolify/issues/12466)) - -- Applications, services, databases, servers and private keys use the rules and the error messages of the UI diff --git a/.changes/nested-test-key-in-the-api.md b/.changes/nested-test-key-in-the-api.md deleted file mode 100644 index c51afeec06..0000000000 --- a/.changes/nested-test-key-in-the-api.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 05e52fc41d ---- -Nested `test` key in the `api` service when you update the image of a service named like `api.test` ([#12456](https://github.com/coollabsio/coolify/issues/12456)) - -- A service name that Docker cannot use as a container name prefix gets a clear error on save diff --git a/.changes/network-error-when-you-sign-in.md b/.changes/network-error-when-you-sign-in.md deleted file mode 100644 index 4fe9d671af..0000000000 --- a/.changes/network-error-when-you-sign-in.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: fixed -commit: e9028e1338 ---- -"Network error" when you sign in with email in AppFlowy Web ([#10545](https://github.com/coollabsio/coolify/issues/10545)) - -- The template sets `GOTRUE_CORS_ALLOWED_HEADERS=redirect_to` -- For an existing service, add this variable to the `gotrue` service in the Docker Compose file and restart the service diff --git a/.changes/new-rsa-deploy-keys-that-github.md b/.changes/new-rsa-deploy-keys-that-github.md deleted file mode 100644 index b96ea3435e..0000000000 --- a/.changes/new-rsa-deploy-keys-that-github.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 4bdf03db69 ---- -New RSA deploy keys that GitHub rejected, because Coolify made 2048-bit keys ([#12461](https://github.com/coollabsio/coolify/issues/12461)) - -- New RSA keys are 4096 bits diff --git a/.changes/oauth-redirect-uris-that-silently-sent.md b/.changes/oauth-redirect-uris-that-silently-sent.md deleted file mode 100644 index d9f1ae7ef4..0000000000 --- a/.changes/oauth-redirect-uris-that-silently-sent.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 3dc89cfe05 ---- -OAuth redirect URIs that silently sent the user back to the login page - -- A redirect URI must point at the callback route of the provider, any other path gets a validation error diff --git a/.changes/old-cached-image-in-the-usesend.md b/.changes/old-cached-image-in-the-usesend.md deleted file mode 100644 index ea0e4d5bc1..0000000000 --- a/.changes/old-cached-image-in-the-usesend.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 7ec000ab86 ---- -Old cached image in the Usesend service template, which used `latest` ([#12443](https://github.com/coollabsio/coolify/issues/12443)) - -- The template pins `usesend/usesend:v1.10.0`, which has the Next.js, Node.js 24 and nodemailer security updates diff --git a/.changes/one-email-provider-list-with-none.md b/.changes/one-email-provider-list-with-none.md deleted file mode 100644 index 3e5d820d70..0000000000 --- a/.changes/one-email-provider-list-with-none.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: added -commit: f7867923b7 ---- -One email provider list with None, SMTP and Resend, more than one named SMTP server with its own sender, and SMTP templates for common providers diff --git a/.changes/outline-service-template-restarting-in-a.md b/.changes/outline-service-template-restarting-in-a.md deleted file mode 100644 index ffd8a7f246..0000000000 --- a/.changes/outline-service-template-restarting-in-a.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: fixed -commit: dd8ea3dc93 ---- -Outline service template restarting in a loop with `syntax error at or near "TRIGGER"` on `postgres:12-alpine` ([#12345](https://github.com/coollabsio/coolify/issues/12345)) - -- New services use PostgreSQL 16 -- An existing service keeps PostgreSQL 12, the Outline service documentation has the steps to upgrade it diff --git a/.changes/paid-coolify-cloud-subscriptions-that-lost.md b/.changes/paid-coolify-cloud-subscriptions-that-lost.md deleted file mode 100644 index 5c5a4f92e8..0000000000 --- a/.changes/paid-coolify-cloud-subscriptions-that-lost.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: d333f3f6e6 ---- -Paid Coolify Cloud subscriptions that lost their link to Stripe staying active after the customer cancels them - -- `cloud:sync-stripe-subscriptions` reports them diff --git a/.changes/pinned-the-ssh-host-key-of.md b/.changes/pinned-the-ssh-host-key-of.md deleted file mode 100644 index 4b264d6697..0000000000 --- a/.changes/pinned-the-ssh-host-key-of.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: security -commit: cdc45e5736 ---- -Pinned the SSH host key of a server on the first connection, the team gets a notification when it changes - -- `SSH_HOST_KEY_CHECKING` sets the mode: `warn`, `enforce` or `off` diff --git a/.changes/pinned-the-ssh-host-keys-of.md b/.changes/pinned-the-ssh-host-keys-of.md deleted file mode 100644 index 76e2f46cd9..0000000000 --- a/.changes/pinned-the-ssh-host-keys-of.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: security -commit: cdc45e5736 ---- -Pinned the SSH host keys of Git hosts across deployments - -- Coolify shows the published host keys of GitHub, GitLab and Bitbucket diff --git a/.changes/port-warning-on-a-service-domain.md b/.changes/port-warning-on-a-service-domain.md deleted file mode 100644 index 4f1a4c7948..0000000000 --- a/.changes/port-warning-on-a-service-domain.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 53e21abe97 ---- -Port warning on a service domain without a port, although Coolify routes it to the required port - -- The edit dialog shows the effective port, and the warning buttons name the ports diff --git a/.changes/rebuilt-docker-layers-when-a-preview.md b/.changes/rebuilt-docker-layers-when-a-preview.md deleted file mode 100644 index 2faf55c5b7..0000000000 --- a/.changes/rebuilt-docker-layers-when-a-preview.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: fixed -commit: e7e952fcad ---- -Rebuilt Docker layers when a preview comes or goes, and unreachable hosts on a build server ([#12452](https://github.com/coollabsio/coolify/issues/12452)) - -- Preview containers and the hosts of the deployment server stay out of `--add-host` on a build server -- A setting of the application turns off the network hosts during the build diff --git a/.changes/rebuilt-docker-layers-when-a-short.md b/.changes/rebuilt-docker-layers-when-a-short.md deleted file mode 100644 index 6748fb9593..0000000000 --- a/.changes/rebuilt-docker-layers-when-a-short.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 6ab538d0f1 ---- -Rebuilt Docker layers when a short-lived container joins or leaves the network between two builds ([#12452](https://github.com/coollabsio/coolify/issues/12452)) - -- Database backup and S3 import helpers, Sentinel and the proxy error page container stay out of `--add-host` diff --git a/.changes/redis-health-check-that-always-passed.md b/.changes/redis-health-check-that-always-passed.md deleted file mode 100644 index 22eebc91f4..0000000000 --- a/.changes/redis-health-check-that-always-passed.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 878d77bd66 ---- -Redis health check that always passed, because it did not ping the database - -- The check pings with the password and requires `PONG` diff --git a/.changes/refused-servers-with-the-same-ip.md b/.changes/refused-servers-with-the-same-ip.md deleted file mode 100644 index 48e8882afc..0000000000 --- a/.changes/refused-servers-with-the-same-ip.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: fixed -commit: ecb14e6cd5 ---- -Refused servers with the same IP and different SSH ports ([#7573](https://github.com/coollabsio/coolify/issues/7573)) diff --git a/.changes/resource-limits-shown-for-docker-compose.md b/.changes/resource-limits-shown-for-docker-compose.md deleted file mode 100644 index 334cd175f1..0000000000 --- a/.changes/resource-limits-shown-for-docker-compose.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: fixed -commit: cdc45e5736 ---- -Resource limits shown for Docker Compose applications diff --git a/.changes/restricted-preview-changes-rollbacks-and-repository.md b/.changes/restricted-preview-changes-rollbacks-and-repository.md deleted file mode 100644 index f910912ae8..0000000000 --- a/.changes/restricted-preview-changes-rollbacks-and-repository.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -type: security -commit: c75e7078b7 ---- -Restricted preview changes, rollbacks and repository URL changes - -- Opening a preview, changing its pull request URL, Git type or Docker tag, or choosing a commit through the API needs write access, a deploy token can only redeploy an existing preview -- A rollback goes only to a listed rollback image or a successful production deployment -- A new `git_repository` of an application is validated like in the UI -- The `docker_tag` of `/api/v1/deploy` is validated like in the preview API diff --git a/.changes/rotate-key-on-private-keys-which.md b/.changes/rotate-key-on-private-keys-which.md deleted file mode 100644 index 87d349de71..0000000000 --- a/.changes/rotate-key-on-private-keys-which.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -type: added -commit: cdc45e5736 ---- -`Rotate key` on private keys, which replaces a key on all servers that use it - -- Coolify adds the new key to `authorized_keys`, can undo the rotation, and removes the old key -- A server delete can remove the key from `authorized_keys` -- Coolify deletes unused SSH key files every hour -- The button shows only when a server uses the key diff --git a/.changes/sentinel-that-kept-pushing-after-its.md b/.changes/sentinel-that-kept-pushing-after-its.md deleted file mode 100644 index b564ce3dcf..0000000000 --- a/.changes/sentinel-that-kept-pushing-after-its.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 5c34a1b3d4 ---- -Sentinel that kept pushing after its server was deleted or its team stopped paying - -- Coolify removes the Sentinel container of unpaid servers once a day and before a server is deleted diff --git a/.changes/server-error-when-a-backup-was.md b/.changes/server-error-when-a-backup-was.md deleted file mode 100644 index 594250b189..0000000000 --- a/.changes/server-error-when-a-backup-was.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -type: fixed ---- -Server error when a backup was uploaded in `Import Backup` for a database that the team cannot open - -- The upload now answers with `Database not found` diff --git a/.changes/server-page-that-did-not-refresh.md b/.changes/server-page-that-did-not-refresh.md deleted file mode 100644 index 612cf07be3..0000000000 --- a/.changes/server-page-that-did-not-refresh.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 30a8e3357a ---- -Server page that did not refresh after a background validation - -- The validation dialog that a background job opens closes when the job finishes diff --git a/.changes/server-shared-variables-that-did-not.md b/.changes/server-shared-variables-that-did-not.md deleted file mode 100644 index e5aae7a3ff..0000000000 --- a/.changes/server-shared-variables-that-did-not.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 106a6d7ac0 ---- -Server shared variables that did not resolve in Docker Compose files - -- Their values are redacted in the rendered Compose file diff --git a/.changes/server-usage-in-the-server-table.md b/.changes/server-usage-in-the-server-table.md deleted file mode 100644 index 6b75ccb8f0..0000000000 --- a/.changes/server-usage-in-the-server-table.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: added -commit: cab5ae9903 ---- -Server usage in the server table of the dashboard on mobile diff --git a/.changes/servers-that-refused-new-ssh-logins.md b/.changes/servers-that-refused-new-ssh-logins.md deleted file mode 100644 index c3ca975f1f..0000000000 --- a/.changes/servers-that-refused-new-ssh-logins.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: fixed -commit: 5431d4954d ---- -Servers that refused new SSH logins with "Maximum number of sessions (8192) reached", because each connection check opened three SSH logins ([#9148](https://github.com/coollabsio/coolify/issues/9148)) - -- The Docker and Docker Compose version checks use the multiplexed SSH connection, so each check opens one login -- To remove the stuck sessions, run `systemctl restart systemd-logind` on the server diff --git a/.changes/service-backup-path-that-could-not.md b/.changes/service-backup-path-that-could-not.md deleted file mode 100644 index e89de9c840..0000000000 --- a/.changes/service-backup-path-that-could-not.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: fixed -commit: 3115980c77 ---- -Service backup path that could not be copied, and an S3 badge on runs that are not stored in S3 diff --git a/.changes/service-backup-tables-that-were-not.md b/.changes/service-backup-tables-that-were-not.md deleted file mode 100644 index 052d2766e3..0000000000 --- a/.changes/service-backup-tables-that-were-not.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: fixed -commit: 7fbc5d7797 ---- -Service backup tables that were not aligned or sortable by column diff --git a/.changes/service-resource-cards-showing-a-starting.md b/.changes/service-resource-cards-showing-a-starting.md deleted file mode 100644 index 3267150ab4..0000000000 --- a/.changes/service-resource-cards-showing-a-starting.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 50af95a70b ---- -Service resource cards showing a starting health check as success ([#9411](https://github.com/coollabsio/coolify/issues/9411)) - -- The card shows it as a warning diff --git a/.changes/service-resource-cards-that-did-not.md b/.changes/service-resource-cards-that-did-not.md deleted file mode 100644 index 2b07ebf621..0000000000 --- a/.changes/service-resource-cards-that-did-not.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: fixed -commit: 4d932b3078 ---- -Service resource cards that did not update their status together with the heading badge diff --git a/.changes/services-stayed-down-after-restart-image-pull.md b/.changes/services-stayed-down-after-restart-image-pull.md deleted file mode 100644 index 63a93215cd..0000000000 --- a/.changes/services-stayed-down-after-restart-image-pull.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -type: fixed ---- -Services that stopped and stayed down after a `Restart` when an image could not be pulled ([#12485](https://github.com/coollabsio/coolify/issues/12485)) - -- Coolify pulls the missing images before it stops the containers. If an image cannot be pulled, the restart fails and the service keeps running diff --git a/.changes/sftp-ftps-and-webdav-backup-storages.md b/.changes/sftp-ftps-and-webdav-backup-storages.md deleted file mode 100644 index 90de297237..0000000000 --- a/.changes/sftp-ftps-and-webdav-backup-storages.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: added -commit: 0db8f60bdd ---- -SFTP, FTPS and WebDAV backup storages for database and volume backups, with downloads, retention and restores - -- SFTP restores and downloads need a host key that an admin saved with a validation diff --git a/.changes/startup-and-the-nightly-cleanup-of.md b/.changes/startup-and-the-nightly-cleanup-of.md deleted file mode 100644 index b9c85a1f4d..0000000000 --- a/.changes/startup-and-the-nightly-cleanup-of.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: fixed -commit: 9c6138fe18 ---- -Startup and the nightly cleanup of stuck resources stopping with "Allowed memory size exhausted" on instances with many large deployment logs ([#12435](https://github.com/coollabsio/coolify/issues/12435)) - -- Stuck deployments, tasks and backups are marked as failed, and the proxy configuration is set up -- Database backup pages and `Settings` > `Backup` do not load all executions on each request diff --git a/.changes/supabase-studio-showing-the-api-logs.md b/.changes/supabase-studio-showing-the-api-logs.md deleted file mode 100644 index 7f71aa5f05..0000000000 --- a/.changes/supabase-studio-showing-the-api-logs.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: fixed -commit: 8f7d1be7a9 ---- -Supabase Studio showing the API logs of another stack when two Supabase services run on one server ([#10324](https://github.com/coollabsio/coolify/issues/10324)) - -- The Vector container of the template reads only the logs of its own stack -- An existing service keeps its `vector.yml`, to fix it add `include_labels: ['com.docker.compose.project=${COOLIFY_RESOURCE_UUID}']` under `sources.docker_host` in `/data/coolify/services//volumes/logs/vector.yml` and restart the service diff --git a/.changes/the-data-retention-of-unsubscribed-teams.md b/.changes/the-data-retention-of-unsubscribed-teams.md deleted file mode 100644 index 733deeea46..0000000000 --- a/.changes/the-data-retention-of-unsubscribed-teams.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: changed -commit: 997396b926 ---- -The data retention of unsubscribed teams on Coolify Cloud from 30 to 60 days - -- The cleanup saves the deleted users to `cloud-deleted-users.csv` on the backups disk diff --git a/.changes/the-default-image-of-new-redis.md b/.changes/the-default-image-of-new-redis.md deleted file mode 100644 index c7786157e7..0000000000 --- a/.changes/the-default-image-of-new-redis.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: changed -commit: b7dc2e435b ---- -The default image of new Redis databases to `valkey/valkey:9-alpine` - -- Existing databases keep their image diff --git a/.changes/the-default-images-of-new-databases.md b/.changes/the-default-images-of-new-databases.md deleted file mode 100644 index e898aef875..0000000000 --- a/.changes/the-default-images-of-new-databases.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: changed -commit: 70adcc2b0e ---- -The default images of new databases to PostgreSQL 18, MongoDB 9, MySQL 9.7, MariaDB 12.3 and ClickHouse 26.8 - -- Existing databases keep their image diff --git a/.changes/the-default-images-on-the-new.md b/.changes/the-default-images-on-the-new.md deleted file mode 100644 index b797991103..0000000000 --- a/.changes/the-default-images-on-the-new.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: changed -commit: 145569bea6 ---- -The default images on the new resource page to Supabase PostgreSQL 17.11.0.018 and PostGIS 18-3.7-alpine diff --git a/.changes/the-finish-time-of-recent-deployments.md b/.changes/the-finish-time-of-recent-deployments.md deleted file mode 100644 index 05bfbab04c..0000000000 --- a/.changes/the-finish-time-of-recent-deployments.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: added -commit: 1652a1d091 ---- -The finish time of recent deployments on the dashboard diff --git a/.changes/the-logo-and-name-of-the.md b/.changes/the-logo-and-name-of-the.md deleted file mode 100644 index 7c2296175e..0000000000 --- a/.changes/the-logo-and-name-of-the.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: added -commit: 973cd8684a ---- -The logo and name of the resource on the resource creation screen diff --git a/.changes/the-notifications-of-scheduled-jobs-that.md b/.changes/the-notifications-of-scheduled-jobs-that.md deleted file mode 100644 index 7d32cebc62..0000000000 --- a/.changes/the-notifications-of-scheduled-jobs-that.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -type: changed -commit: 06c41f57d6 ---- -The notifications of scheduled jobs that keep failing, to the first failure and then at most once a day - -- This covers scheduled tasks, database backups, storage backups and Docker cleanup -- The first successful run after a failure sends one "works again" notification to the failure channels -- A database backup whose S3 upload keeps failing also notifies at most once a day -- A scheduled task disables itself after 10 failures in a row when the first failure is more than 24 hours old, one notification and the task page give the reason, and enabling the task again clears it -- The scheduled tasks API returns `consecutive_failures`, `failing_since` and `disabled_reason` -- Backups and Docker cleanup are never disabled automatically, so they start again by themselves after an outage -- A scheduled task skips a run when the application or service has no running container, without a notification and without a count toward the automatic disable diff --git a/.changes/the-orbit-service-template-a-self.md b/.changes/the-orbit-service-template-a-self.md deleted file mode 100644 index 63aa31957b..0000000000 --- a/.changes/the-orbit-service-template-a-self.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: added -commit: abea0747ed ---- -The Orbit service template, a self-hosted workspace for teams with tasks, docs, chat and an MCP server for AI clients diff --git a/.changes/the-security-settings-of-a-server.md b/.changes/the-security-settings-of-a-server.md deleted file mode 100644 index 46a3027743..0000000000 --- a/.changes/the-security-settings-of-a-server.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: changed -commit: cdc45e5736 ---- -The security settings of a server to one `Security` page with patches, terminal access, SSH host key and image scanning diff --git a/.changes/the-sentinel-version-to-1-1.md b/.changes/the-sentinel-version-to-1-1.md deleted file mode 100644 index b87d2a3bbb..0000000000 --- a/.changes/the-sentinel-version-to-1-1.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: changed -commit: 54da974045 ---- -The Sentinel version to 1.1.5 diff --git a/.changes/the-unused-minio-client-from-the.md b/.changes/the-unused-minio-client-from-the.md deleted file mode 100644 index b3c2aa8d80..0000000000 --- a/.changes/the-unused-minio-client-from-the.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: removed -commit: 91985acf42 ---- -The unused MinIO client from the Coolify image diff --git a/.changes/tooltips-on-close-and-dismiss-buttons.md b/.changes/tooltips-on-close-and-dismiss-buttons.md deleted file mode 100644 index afb91e0880..0000000000 --- a/.changes/tooltips-on-close-and-dismiss-buttons.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: fixed -commit: b1a20fabd4 ---- -Tooltips on close and dismiss buttons that stayed visible diff --git a/.changes/two-deployments-of-one-application-running.md b/.changes/two-deployments-of-one-application-running.md deleted file mode 100644 index e9f60dbe3a..0000000000 --- a/.changes/two-deployments-of-one-application-running.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -type: fixed -commit: bb6dfd147e ---- -Two deployments of one application running at once when started from the MCP `deploy` tool or the MCP `control` start action, which could stop the application ([#12442](https://github.com/coollabsio/coolify/issues/12442)) - -- They queue behind a deployment in progress, as the API and the `Deploy` button do -- A deployment of the same commit is skipped, and the response gives the UUID of the deployment in progress -- A rolling update removes only the containers that ran before it started diff --git a/.changes/unexplained-uuid-prefix-on-the-names.md b/.changes/unexplained-uuid-prefix-on-the-names.md deleted file mode 100644 index 003e46e78f..0000000000 --- a/.changes/unexplained-uuid-prefix-on-the-names.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: e0ae59deca ---- -Unexplained UUID prefix on the names of new volumes ([#8620](https://github.com/coollabsio/coolify/issues/8620)) - -- The dialog explains that Coolify adds the prefix so that the volume name is unique on the server diff --git a/.changes/unreadable-accent-text-and-fills-in.md b/.changes/unreadable-accent-text-and-fills-in.md deleted file mode 100644 index 7fed10b446..0000000000 --- a/.changes/unreadable-accent-text-and-fills-in.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: 6518734935 ---- -Unreadable accent text and fills in custom themes ([#12468](https://github.com/coollabsio/coolify/issues/12468)) - -- Accent text reaches a contrast of 4.5:1 on the page and in the sidebar, and the preview shows the real fill diff --git a/.changes/unreadable-account-menu-entries-such-as.md b/.changes/unreadable-account-menu-entries-such-as.md deleted file mode 100644 index 4a1fcc31d6..0000000000 --- a/.changes/unreadable-account-menu-entries-such-as.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: fixed -commit: 5eee9933ca ---- -Unreadable account menu entries, such as `Log out`, when a custom theme sidebar uses the other light or dark scheme than the page ([#12467](https://github.com/coollabsio/coolify/issues/12467)) diff --git a/.changes/unreadable-subscription-and-server-limit-banners.md b/.changes/unreadable-subscription-and-server-limit-banners.md deleted file mode 100644 index 75f6acfd30..0000000000 --- a/.changes/unreadable-subscription-and-server-limit-banners.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -type: fixed ---- -Unreadable subscription and server limit banners in light mode ([#12494](https://github.com/coollabsio/coolify/issues/12494)) - -- The banners now use a light background with dark text in light mode diff --git a/.changes/upgrade-modal-that-did-not-finish.md b/.changes/upgrade-modal-that-did-not-finish.md deleted file mode 100644 index e323813ad2..0000000000 --- a/.changes/upgrade-modal-that-did-not-finish.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: fixed -commit: dec776025e ---- -Upgrade modal that did not finish when the new version answered ([#8024](https://github.com/coollabsio/coolify/issues/8024)) - -- The modal shows success as soon as the new version is up -- Livewire error pages stay hidden while an upgrade runs diff --git a/.changes/validated-webhook-urls-limited-dns-lookups.md b/.changes/validated-webhook-urls-limited-dns-lookups.md deleted file mode 100644 index fd353fda2c..0000000000 --- a/.changes/validated-webhook-urls-limited-dns-lookups.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: security -commit: cdc45e5736 ---- -Validated webhook URLs, limited DNS lookups and tightened the authorization of team resources diff --git a/.changes/valkey-as-an-image-of-the.md b/.changes/valkey-as-an-image-of-the.md deleted file mode 100644 index 427ae2b860..0000000000 --- a/.changes/valkey-as-an-image-of-the.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -type: added -commit: 41877198b3 ---- -Valkey as an image of the Redis database type - -- A new step of a new Redis database asks for Redis or Valkey -- Global search accepts "new valkey" diff --git a/.changes/volume-data-checkboxes-that-were-not.md b/.changes/volume-data-checkboxes-that-were-not.md deleted file mode 100644 index 7fd257bc1e..0000000000 --- a/.changes/volume-data-checkboxes-that-were-not.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: fixed -commit: 19762a7950 ---- -Volume data checkboxes that were not next to their labels diff --git a/.changes/websockets-closed-by-caddy-on-every.md b/.changes/websockets-closed-by-caddy-on-every.md deleted file mode 100644 index c91088d2bc..0000000000 --- a/.changes/websockets-closed-by-caddy-on-every.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -type: fixed -commit: f4a1e3e427 ---- -WebSockets closed by Caddy on every configuration reload ([#7942](https://github.com/coollabsio/coolify/issues/7942)) - -- The application, service and dashboard routes set `stream_close_delay` diff --git a/.changes/white-flash-of-the-dark-theme.md b/.changes/white-flash-of-the-dark-theme.md deleted file mode 100644 index 275573d621..0000000000 --- a/.changes/white-flash-of-the-dark-theme.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -type: fixed -commit: 618d377d87 ---- -White flash of the dark theme during page loads and `wire:navigate` ([#7866](https://github.com/coollabsio/coolify/issues/7866)) diff --git a/.changes/wrong-docker-compose-file-not-found.md b/.changes/wrong-docker-compose-file-not-found.md deleted file mode 100644 index 2a421e9c31..0000000000 --- a/.changes/wrong-docker-compose-file-not-found.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -type: fixed ---- -Wrong `Docker Compose file not found` error for an empty Compose file ([#12477](https://github.com/coollabsio/coolify/issues/12477)) - -- An empty Compose file now gives an error that says that the file is empty diff --git a/CHANGELOG.md b/CHANGELOG.md index 5783668d1d..e24c111156 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,369 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ## [Unreleased] +## [v4.7.0] - 2026-11-09 + +### Breaking Changes + +- Cancelled the older queued webhook deployments of an application by default when a newer push arrives, so only the latest commit is built ([#10921](https://github.com/coollabsio/coolify/discussions/10921), [#7678](https://github.com/coollabsio/coolify/discussions/7678)) + - It works per application, pull request and server + - `Advanced` > `Deployment` and `is_auto_cancel_queued_deployments_enabled` in the applications API turn it off + - Manual, API, restart and rollback deployments are never cancelled + - An opt-in setting, `is_auto_cancel_building_deployments_enabled` in the API, also stops an older webhook deployment that is still building, a deployment that started to replace containers always finishes + - `cancel_previous` (`none`, `queued` or `building`) on `/api/v1/deploy` and the MCP `deploy` tool cancels the older webhook, API and MCP deployments, the default is `none` +- Limited the cloud provider token API to team admins and owners + - Other members get `403` +- Moved the Resend sender to the new `resend_from_address` and `resend_from_name` fields, API clients must use the new fields + - A migration copies the current values + +### Security + +- Applied the limits of API tokens to more permission checks + - A message explains when a token limit blocks a change +- Built team invitation links from the instance URL instead of the request host, when no instance domain is set +- Checked that members with access grants can use the selected server and the team credentials + - A new, cloned or migrated resource needs a server that the member can use, the localhost server needs an instance admin + - Server lists show only the servers that the member can use + - Team private keys, GitHub Apps, Gitea Apps and new S3 storages of backup schedules need write access on the whole team, also through the API + - A message explains when write access on the whole team is needed +- Checked the deploy permission before a deploy through the API creates a preview or changes its image tag +- Ended terminal sessions when access to the server is lost +- Enforced fixed SSH connection options on every connection, also for health checks +- Generated new SSH keys as Ed25519 and validated private keys more strictly +- Hardened SMTP and terminal connections + - SMTP hosts are validated, and Coolify connects only to the checked address + - The error message explains why an SMTP host is refused +- Limited the server data in the application, service, and database API responses to tokens that cover the whole team +- Removed the server details from the response of the `get_service` MCP tool +- Kept personal data and credentials out of audit events + - The audit events of a deleted user are anonymized +- Kept stored private keys out of the browser +- Kept the Sentinel token out of process arguments + - Sentinel reads it from an env file +- Limited API clients that keep failing to 30 failed requests per minute for one token or IP + - More failed requests get `429`, `API_FAILED_REQUEST_RATE_LIMIT` sets the limit + - The team of the token gets one notification a day when the token reaches the limit +- Pinned the SSH host key of a server on the first connection, the team gets a notification when it changes + - `SSH_HOST_KEY_CHECKING` sets the mode: `warn`, `enforce` or `off` +- Pinned the SSH host keys of Git hosts across deployments + - Coolify shows the published host keys of GitHub, GitLab and Bitbucket +- Restricted preview changes, rollbacks and repository URL changes + - Opening a preview, changing its pull request URL, Git type or Docker tag, or choosing a commit through the API needs write access, a deploy token can only redeploy an existing preview + - A rollback goes only to a listed rollback image or a successful production deployment + - A new `git_repository` of an application is validated like in the UI + - The `docker_tag` of `/api/v1/deploy` is validated like in the preview API +- Validated webhook URLs, limited DNS lookups and tightened the authorization of team resources + +### Added + +- A list view on the new resource page +- A `Not used` label on the TLS certificates of the Traefik proxy page, and a `Delete unused` button that deletes them in one step ([#12447](https://github.com/coollabsio/coolify/issues/12447)) + - A certificate is unused when no route and no resource on the server uses its domain + - Traefik renews every certificate in `acme.json` until you delete it and restart the proxy +- API endpoints and MCP tools that manage image scanning and read the scan results + - `GET` and `PATCH /api/v1/servers/{uuid}/image-scanning`, `GET /api/v1/vulnerabilities` and `GET /api/v1/{applications|databases|services}/{uuid}/vulnerabilities` + - The MCP tools are `get_vulnerabilities` and `manage_image_scanning` +- A `Run in a shell` option on scheduled tasks, so containers without `sh`, such as distroless or scratch images, can run them ([#8244](https://github.com/coollabsio/coolify/issues/8244)) + - Turn it off to split the command into arguments and run it directly + - The API and the MCP tools set it too +- A separate notification sender in the instance email settings + - Team notifications through the instance email settings, the S3 connection error alert and the channel disabled alert use it + - Account emails keep the default sender + - The `emails` artisan command no longer exists +- A `Skip TLS certificate verification` setting on S3 storages, for endpoints with a self-signed or private CA certificate ([#9762](https://github.com/coollabsio/coolify/issues/9762), [#4402](https://github.com/coollabsio/coolify/issues/4402)) + - It applies to the connection test, backups, restores and the deletion of old backups + - The S3 storages API sets it with `skip_tls_verification` + - Browsers that download files from the storage must still trust the certificate +- A star button on servers and resources for quick access on the dashboard + - The button is after the status in the top bar +- A `UI scale` option in the appearance settings +- Automatic update notifications, the root team gets one when an automatic update starts, fails or finishes + - A manual upgrade that fails before the upgrade script starts shows the error in the upgrade modal +- A warning when the Docker Compose file of an application is in a subdirectory of the base directory, with a button that moves the directory of the file into the base directory ([#9525](https://github.com/coollabsio/coolify/issues/9525)) + - Coolify runs Docker Compose in the base directory, so relative paths such as `build.context: ..` resolve from there +- Container image vulnerability scanning, opt-in for each server and each application + - Syft and Grype run on your server, and no data goes to a third party + - Each resource gets one security status and version recommendations, with an optional deploy gate for each application + - The team `Security` page and the notifications show the results +- Forgejo and Codeberg in the Gitea App source + - A `Provider` list fills in the Gitea.com or Codeberg URLs + - Webhooks accept the `X-Forgejo-*` headers +- Gitea App endpoints in the API and the MCP tools, `GET /gitea-apps` and `POST /applications/private-gitea-app` ([#12459](https://github.com/coollabsio/coolify/issues/12459)) + - `gitea_app_uuid` sets the source when you create or update an application +- GitHub Deployments sync, each deployment and preview reports to GitHub Deployments with links to the log and the environment + - It needs a private GitHub App with `Deployments: write` +- One email provider list with None, SMTP and Resend, more than one named SMTP server with its own sender, and SMTP templates for common providers +- `Rotate key` on private keys, which replaces a key on all servers that use it + - Coolify adds the new key to `authorized_keys`, can undo the rotation, and removes the old key + - A server delete can remove the key from `authorized_keys` + - Coolify deletes unused SSH key files every hour + - The button shows only when a server uses the key +- Server usage in the server table of the dashboard on mobile +- SFTP, FTPS and WebDAV backup storages for database and volume backups, with downloads, retention and restores + - SFTP restores and downloads need a host key that an admin saved with a validation +- The finish time of recent deployments on the dashboard +- The logo and name of the resource on the resource creation screen +- The Orbit service template, a self-hosted workspace for teams with tasks, docs, chat and an MCP server for AI clients +- Valkey as an image of the Redis database type + - A new step of a new Redis database asks for Redis or Valkey + - Global search accepts "new valkey" + +### Changed + +- `Import Backup` from the resource menu to an `Import backup` button on the `Backups` page of databases and services ([#11818](https://github.com/coollabsio/coolify/discussions/11818)) + - The button opens the import in a dialog + - Old `Import Backup` links open the `Backups` page +- Maintenance mode to its own `Maintenance` page of applications and services, and you must confirm the toggle +- The data retention of unsubscribed teams on Coolify Cloud from 30 to 60 days + - The cleanup saves the deleted users to `cloud-deleted-users.csv` on the backups disk +- The default image of new Redis databases to `valkey/valkey:9-alpine` + - Existing databases keep their image +- The default images of new databases to PostgreSQL 18, MongoDB 9, MySQL 9.7, MariaDB 12.3 and ClickHouse 26.8 + - Existing databases keep their image +- The default images on the new resource page to Supabase PostgreSQL 17.11.0.018 and PostGIS 18-3.7-alpine +- The notifications of scheduled jobs that keep failing, to the first failure and then at most once a day + - This covers scheduled tasks, database backups, storage backups and Docker cleanup + - The first successful run after a failure sends one "works again" notification to the failure channels + - A database backup whose S3 upload keeps failing also notifies at most once a day + - A scheduled task disables itself after 10 failures in a row when the first failure is more than 24 hours old, one notification and the task page give the reason, and enabling the task again clears it + - The scheduled tasks API returns `consecutive_failures`, `failing_since` and `disabled_reason` + - Backups and Docker cleanup are never disabled automatically, so they start again by themselves after an outage + - A scheduled task skips a run when the application or service has no running container, without a notification and without a count toward the automatic disable +- The security settings of a server to one `Security` page with patches, terminal access, SSH host key and image scanning +- The Sentinel version to 1.1.5 + +### Removed + +- `Copy from instance settings` from the email notification page, select `Use system-wide settings` instead +- The unused MinIO client from the Coolify image + +### Fixed + +- API token search out of sync after you create, edit or revoke a token ([#12465](https://github.com/coollabsio/coolify/issues/12465)) +- Applications and databases removed from the Docker Compose file of a service showing as `Exited` and keeping the service degraded ([#9591](https://github.com/coollabsio/coolify/issues/9591)) + - They show `Not in Compose file` and do not count in the service status + - Coolify keeps their settings and uses them again when you add the service back under the same name + - To remove one, delete it in its settings + - Existing ones are marked at the next deployment or save of the service +- Applications deleted on all their servers when you delete a server that they use only as an additional destination + - This applies to `Delete all resources` and `DELETE /api/v1/servers/{uuid}?force=true` + - Coolify removes the application only from the deleted server and stops its containers there + - A server that has only such applications can be deleted without `Delete all resources` + - The delete confirmation lists the resources it deletes and the applications that keep running on another server +- Bugsink service template filling the disk with MySQL binary logs until Bugsink stopped ([#10626](https://github.com/coollabsio/coolify/issues/10626)) + - New services use PostgreSQL 17 and Bugsink 2 + - To stop the growth in an existing service, run `PURGE BINARY LOGS BEFORE NOW();` in MySQL, then add `command: ['--disable-log-bin']` to the `mysql` service and restart it +- Builds that failed with x509 errors behind a TLS-inspecting proxy, although the server trusts the proxy CA ([#7568](https://github.com/coollabsio/coolify/issues/7568)) + - The helper container mounts the CA bundle of the server read-only +- Compose services that could not reach each other by name in preview deployments and failed to start ([#8030](https://github.com/coollabsio/coolify/issues/8030)) + - The original name is an alias on the preview network +- `Copy logs` not changing the clipboard on iPhone and iPad, in the runtime and deployment logs ([#9408](https://github.com/coollabsio/coolify/issues/9408)) + - Coolify starts the clipboard write during the tap and adds the logs when they load +- Cut-off descriptions of PostgreSQL, MongoDB and ClickHouse on the new resource page +- Database backup executions table that did not fit the page and was hard to read ([#7188](https://github.com/coollabsio/coolify/issues/7188)) + - It shows the file name of the archive, with a button that copies its path + - It shows `All databases` for a backup of all databases +- Database backups saved to S3 when an API request does not send `save_s3` + - The backup page resets the S3 selection when a change is not allowed +- Database backups that passed the worker timeout, stayed running, and left the upload container and the dump file on the server + - Each step gets only the time that is left of the backup timeout, so a run that takes too long fails and cleans up + - An SSH retry does not start a second dump + - The backup log explains exit code 124, and the timeout help says that it covers the complete run + - The daily helper container cleanup removes the upload containers of executions that are not running +- Data that looked lost after you changed the name of a persistent volume, because a new name points to a new, empty Docker volume ([#8816](https://github.com/coollabsio/coolify/issues/8816)) + - A dialog asks for confirmation and tells you to copy the data into the new volume +- Deleted `coolify.yaml` and an unreachable dashboard on a server with the IP `host.docker.internal` that is not the default localhost server ([#12444](https://github.com/coollabsio/coolify/issues/12444)) + - Coolify keeps treating this server as localhost after a save, for example after a proxy restart +- Deleted volume coming back after a redeploy when the image declares `VOLUME` at its path ([#6875](https://github.com/coollabsio/coolify/issues/6875)) + - Coolify removes containers that still mount a deleted volume before it starts the new ones + - The stale volume delete dialog warns when a container still uses the volume +- Deploy canvas cards with another border than the resource tiles +- Deployments started through the MCP server saved as API deployments + - The deployment list shows them with the `MCP` source and filter + - The API and MCP deployment data have a new `is_mcp` field +- Deployments that failed on one `502` or one timeout from the GitHub API ([#9785](https://github.com/coollabsio/coolify/issues/9785)) + - GitHub API reads retry up to three times on a 5xx error or a failed connection + - Writes, such as pull request comments, are not retried +- Deployments that failed with `cURL error 28` on `https://api.github.com/zen`, because Coolify compared its clock with GitHub before each token request ([#9785](https://github.com/coollabsio/coolify/issues/9785)) + - Coolify compares the clocks only when GitHub rejects a request, from the `Date` header of that response +- Deployments that failed with "The container name ... is already in use" when `Use build secrets` is on ([#9363](https://github.com/coollabsio/coolify/issues/9363)) + - Coolify removes the old helper container and waits until Docker frees the name +- Deployments that stopped on a broken `.env` file, because multi-line JSON values saved before exact escaping had no quotes ([#8279](https://github.com/coollabsio/coolify/issues/8279)) + - These values use exact escaping, which gives the container the same value as before beta.463 +- Deployments to additional servers losing the source of the main deployment + - The audit log records actions that MCP tools do through the API as MCP events +- Different `COOLIFY_BRANCH` values in the parts of a preview deployment ([#9572](https://github.com/coollabsio/coolify/issues/9572)) + - All parts use `pull//head` +- Disabled self-hosted servers that stayed disabled after a validation that connects ([#12475](https://github.com/coollabsio/coolify/issues/12475)) + - The unreachable cleanup skips the localhost server + - The server page explains why a server is disabled + - Coolify Cloud servers and transferred servers stay disabled +- `DNS matches` on a domain in a connected Cloudflare zone that goes through Cloudflare to a different server, which then failed with Cloudflare error 526 and a Let's Encrypt error ([#12436](https://github.com/coollabsio/coolify/issues/12436)) + - The domain shows `DNS mismatch` + - CNAME records, for example of a Cloudflare Tunnel, are still accepted + - A clone of an application or a service, or a new one through the API, gets a Cloudflare DNS record for each domain in a zone with automatic DNS, a clone only for the domains that the source does not use +- Docker builds that failed with "BuildKit is enabled but the buildx component is missing or broken" when an application has a build-time variable `HOME` or `DOCKER_CONFIG` ([#9726](https://github.com/coollabsio/coolify/issues/9726)) + - The Docker CLI in the helper container always uses `/root/.docker` + - A `HOME` build argument keeps its value +- Docker Compose previews sharing one project with the application and the other previews, so Docker Compose treated their containers as orphans ([#9014](https://github.com/coollabsio/coolify/issues/9014)) + - Each preview has its own Compose project, and the networks that the Compose file declares are not shared +- Dockerfile `HEALTHCHECK` options not imported as Docker reads them, zero and sub-second values became 0 seconds ([#12455](https://github.com/coollabsio/coolify/issues/12455)) + - Coolify reads compound and fractional durations, quoted values, only the flags before `CMD`, the `escape` directive and `NONE` with flags +- Dockerfile `HEALTHCHECK` read from a stage that is not built ([#9475](https://github.com/coollabsio/coolify/issues/9475)) +- Domains showing `Not checked` when an existing Cloudflare DNS record of a new domain has a different IP + - Coolify replaces the record when it created the record and no other resource uses it + - Otherwise it opens the `Configure DNS` dialog, where you can replace the record, and the domain shows the conflict +- Duplicate and empty rows in the audit log +- Duplicate environment variables, and extra copies that could not be removed ([#8041](https://github.com/coollabsio/coolify/issues/8041)) +- Empty database backups of Odoo services, which backed up only the empty `postgres` database ([#7555](https://github.com/coollabsio/coolify/issues/7555)) + - New backup schedules of Odoo services back up all databases by default +- Empty disk usage on the `Metrics` tab, the `Fleet` page and in the MCP `get_server_metrics` tool when Sentinel reports the Coolify data disk under another mount point than `/`, `/data` or `/data/coolify` ([#12448](https://github.com/coollabsio/coolify/issues/12448)) + - This occurs for example on a NAS where `/data` is a symlink into a data volume +- Empty list of the commit images of Docker Compose applications on the `Rollback` page and in `GET /api/v1/applications/{uuid}/rollback-images`, since v4.5.0 ([#12446](https://github.com/coollabsio/coolify/issues/12446)) + - The page also shows the running commit when the Compose file has services from other images +- Exact start time in service backup executions that is hard to read + - The table shows the relative time, with the exact date in a tooltip +- Expired sessions kept for the retention days of the database cleanup ([#7394](https://github.com/coollabsio/coolify/issues/7394)) + - The cleanup deletes sessions older than the session lifetime +- Failed backups to S3 endpoints with a path, such as `/storage/v1/s3` of Supabase Storage ([#8530](https://github.com/coollabsio/coolify/issues/8530)) + - Database backups, volume backups and S3 restores use curl with a presigned URL for these endpoints +- Failed clone of an application with a fixed preview URL template, with a duplicate preview domain error and a stopped, partial clone + - A clone does not copy preview deployments and gets its own from new pull requests +- Failed Docker install on Ubuntu derivatives such as Pop!_OS and Linux Mint, and on Raspbian 13 (Trixie) ([#9455](https://github.com/coollabsio/coolify/issues/9455)) + - The fallback uses the Ubuntu repository with `UBUNTU_CODENAME` on Ubuntu derivatives + - It uses the Debian repository on Raspbian 13, which has no Docker repository of its own +- Failed image pull in the Convex service template, after the rename to the `ghcr.io/convex` namespace ([#12449](https://github.com/coollabsio/coolify/issues/12449)) +- Failed parse of a Docker Compose file whose `services` key is empty or is not a map, and unexplained exit code 255 in failed commands + - The message explains that the SSH connection to the server closed before the command finished +- Failed S3 uploads of backups larger than about 15.6 GiB on providers that accept only 1000 parts, such as Scaleway ([#8411](https://github.com/coollabsio/coolify/issues/8411)) +- Failed sign-up and login in the Rybbit service template, `/api` requests got a 404 error ([#9055](https://github.com/coollabsio/coolify/issues/9055)) + - The template routes `/api` on the same domain to the backend on port 3001 and keeps the `/api` prefix + - For an existing service, add `SERVICE_URL_RYBBIT_3001=/api` to `rybbit_backend`, move it above `rybbit` in the Docker Compose file, set `Path prefixes` to `Keep prefixes` in the advanced settings of the backend and redeploy +- Failed startup and broken public album links in the Ente service templates ([#7405](https://github.com/coollabsio/coolify/issues/7405)) + - An albums service with its own domain serves public links + - The images come from `ghcr.io/ente`, and the JWT secret is URL-safe so that Museum can decode it + - With S3, the template uses the routed `MINIO_SERVER_URL` as the S3 endpoint and allows all CORS origins +- Generic error when a new private key cannot connect to a server ([#7980](https://github.com/coollabsio/coolify/issues/7980)) + - The message shows the SSH error +- Health checks in their start period shown as unknown, not as `running:starting` ([#9411](https://github.com/coollabsio/coolify/issues/9411)) +- High CPU use of `dockerd` while you stream the logs of a container with a large log file ([#7693](https://github.com/coollabsio/coolify/issues/7693)) +- Ignored concurrent build limit of build servers ([#7649](https://github.com/coollabsio/coolify/issues/7649)) + - Each build counts on the server that runs it, and a deployment reserves a build server with a free slot when it starts + - A freed build server slot starts the waiting deployments of other servers +- Inconsistent status badges and S3 storage names in service backup tables +- Instance database backups running on the wrong server when the destination of `coolify-db` points to another one ([#8139](https://github.com/coollabsio/coolify/issues/8139)) + - The backup always runs on the Coolify host + - A failed pre-update backup shows why it failed + - The pre-update backup skips a disabled schedule +- LiteLLM service template with a master key that did not start with `sk-` ([#10521](https://github.com/coollabsio/coolify/issues/10521)) + - The admin API key is `sk-` followed by the value of `SERVICE_PASSWORD_MASTERKEY` + - A separate `LITELLM_SALT_KEY` keeps stored model credentials readable when the master key changes + - `STORE_MODEL_IN_DB` is `True` by default, so you can add models in the LiteLLM UI +- Live updates, such as proxy restart logs, that did not reach the browser, because the WebSocket handshake failed with `413` with large cookie headers +- Localhost server page that did not refresh after its connection is validated +- Locked environment variables that could not be changed, unlocked or deleted when Docker Compose uses them ([#6803](https://github.com/coollabsio/coolify/issues/6803)) + - A locked value can be replaced without showing it + - The lock is permanent in the UI, the API and MCP, and `Lock` asks for confirmation +- Lost audit events + - Coolify writes audit events at commit time +- Lost Telegram notifications when Telegram rejects a button URL, for example localhost or an IP address without a domain ([#8269](https://github.com/coollabsio/coolify/issues/8269)) + - Coolify then sends the links as text +- Lost trailing newline of multiline environment variables, so OpenSSH rejected an SSH private key with "error in libcrypto" ([#9438](https://github.com/coollabsio/coolify/issues/9438)) + - A value with more than one line is saved exactly as you enter it, in the UI and in the API + - Single-line values still lose their edge whitespace + - Save a variable again to add the newline that Coolify removed +- Lost update channel in `Settings` > `Updates` and lost healthcheck `Check type` when one of them is the only change + - The `Save changes` bar opens for them +- Missing check of the closest Cloudflare wildcard record for deeper domain names, such as `app.apps.example.com` through `*.example.com` ([#12436](https://github.com/coollabsio/coolify/issues/12436)) +- Missing Cloudflare DNS record when you edit a domain to a hostname in a connected Cloudflare zone, for example a generated domain changed to your own domain + - Coolify adds the record automatically or opens the `Configure DNS` dialog, as it did only for new domains + - This applies to the `Domains` pages, the application and service application settings and the service application API +- Missing disabled server message on the localhost server page ([#12475](https://github.com/coollabsio/coolify/issues/12475)) +- Missing Git error reason when Coolify cannot read a repository +- Missing links to the provider dashboards on the secret manager token forms +- Missing project, environment and service in Fluent Bit log drains for containers without the Coolify default variables ([#8415](https://github.com/coollabsio/coolify/issues/8415)) + - The `fluentd` driver also sends the Coolify container labels, and the built-in configurations use them as a fallback +- Missing `Resource status changes` notification when an application, preview, service or database stops unexpectedly, for example after a crash or `docker kill` ([#9493](https://github.com/coollabsio/coolify/issues/9493)) + - Coolify waits 2 minutes and notifies only when the resource is still stopped + - A stop, restart or redeploy from Coolify sends no notification + - The same resource sends at most one notification in 15 minutes +- Missing `Traefik Proxy Outdated` notification when a newer Traefik patch version of the running branch is available ([#9727](https://github.com/coollabsio/coolify/issues/9727)) + - Coolify sends one notification for each new patch version, not one for each hourly check +- Names and descriptions saved through the API and the MCP server that the UI rejects, so the resource could not be saved in the UI afterwards ([#12466](https://github.com/coollabsio/coolify/issues/12466)) + - Applications, services, databases, servers and private keys use the rules and the error messages of the UI +- Nested `test` key in the `api` service when you update the image of a service named like `api.test` ([#12456](https://github.com/coollabsio/coolify/issues/12456)) + - A service name that Docker cannot use as a container name prefix gets a clear error on save +- "Network error" when you sign in with email in AppFlowy Web ([#10545](https://github.com/coollabsio/coolify/issues/10545)) + - The template sets `GOTRUE_CORS_ALLOWED_HEADERS=redirect_to` + - For an existing service, add this variable to the `gotrue` service in the Docker Compose file and restart the service +- New RSA deploy keys that GitHub rejected, because Coolify made 2048-bit keys ([#12461](https://github.com/coollabsio/coolify/issues/12461)) + - New RSA keys are 4096 bits +- OAuth redirect URIs that silently sent the user back to the login page + - A redirect URI must point at the callback route of the provider, any other path gets a validation error +- Old cached image in the Usesend service template, which used `latest` ([#12443](https://github.com/coollabsio/coolify/issues/12443)) + - The template pins `usesend/usesend:v1.10.0`, which has the Next.js, Node.js 24 and nodemailer security updates +- Outline service template restarting in a loop with `syntax error at or near "TRIGGER"` on `postgres:12-alpine` ([#12345](https://github.com/coollabsio/coolify/issues/12345)) + - New services use PostgreSQL 16 + - An existing service keeps PostgreSQL 12, the Outline service documentation has the steps to upgrade it +- Paid Coolify Cloud subscriptions that lost their link to Stripe staying active after the customer cancels them + - `cloud:sync-stripe-subscriptions` reports them +- Port warning on a service domain without a port, although Coolify routes it to the required port + - The edit dialog shows the effective port, and the warning buttons name the ports +- Rebuilt Docker layers when a preview comes or goes, and unreachable hosts on a build server ([#12452](https://github.com/coollabsio/coolify/issues/12452)) + - Preview containers and the hosts of the deployment server stay out of `--add-host` on a build server + - A setting of the application turns off the network hosts during the build +- Rebuilt Docker layers when a short-lived container joins or leaves the network between two builds ([#12452](https://github.com/coollabsio/coolify/issues/12452)) + - Database backup and S3 import helpers, Sentinel and the proxy error page container stay out of `--add-host` +- Redis health check that always passed, because it did not ping the database + - The check pings with the password and requires `PONG` +- Refused servers with the same IP and different SSH ports ([#7573](https://github.com/coollabsio/coolify/issues/7573)) +- Resource limits shown for Docker Compose applications +- Sentinel that kept pushing after its server was deleted or its team stopped paying + - Coolify removes the Sentinel container of unpaid servers once a day and before a server is deleted +- Server error when a backup was uploaded in `Import Backup` for a database that the team cannot open + - The upload now answers with `Database not found` +- Server page that did not refresh after a background validation + - The validation dialog that a background job opens closes when the job finishes +- Server shared variables that did not resolve in Docker Compose files + - Their values are redacted in the rendered Compose file +- Servers that refused new SSH logins with "Maximum number of sessions (8192) reached", because each connection check opened three SSH logins ([#9148](https://github.com/coollabsio/coolify/issues/9148)) + - The Docker and Docker Compose version checks use the multiplexed SSH connection, so each check opens one login + - To remove the stuck sessions, run `systemctl restart systemd-logind` on the server +- Service backup path that could not be copied, and an S3 badge on runs that are not stored in S3 +- Service backup tables that were not aligned or sortable by column +- Service resource cards showing a starting health check as success ([#9411](https://github.com/coollabsio/coolify/issues/9411)) + - The card shows it as a warning +- Service resource cards that did not update their status together with the heading badge +- Services that stopped and stayed down after a `Restart` when an image could not be pulled ([#12485](https://github.com/coollabsio/coolify/issues/12485)) + - Coolify pulls the missing images before it stops the containers. If an image cannot be pulled, the restart fails and the service keeps running +- Startup and the nightly cleanup of stuck resources stopping with "Allowed memory size exhausted" on instances with many large deployment logs ([#12435](https://github.com/coollabsio/coolify/issues/12435)) + - Stuck deployments, tasks and backups are marked as failed, and the proxy configuration is set up + - Database backup pages and `Settings` > `Backup` do not load all executions on each request +- Supabase Studio showing the API logs of another stack when two Supabase services run on one server ([#10324](https://github.com/coollabsio/coolify/issues/10324)) + - The Vector container of the template reads only the logs of its own stack + - An existing service keeps its `vector.yml`, to fix it add `include_labels: ['com.docker.compose.project=${COOLIFY_RESOURCE_UUID}']` under `sources.docker_host` in `/data/coolify/services//volumes/logs/vector.yml` and restart the service +- Tooltips on close and dismiss buttons that stayed visible +- Two deployments of one application running at once when started from the MCP `deploy` tool or the MCP `control` start action, which could stop the application ([#12442](https://github.com/coollabsio/coolify/issues/12442)) + - They queue behind a deployment in progress, as the API and the `Deploy` button do + - A deployment of the same commit is skipped, and the response gives the UUID of the deployment in progress + - A rolling update removes only the containers that ran before it started +- Unexplained UUID prefix on the names of new volumes ([#8620](https://github.com/coollabsio/coolify/issues/8620)) + - The dialog explains that Coolify adds the prefix so that the volume name is unique on the server +- Unreadable accent text and fills in custom themes ([#12468](https://github.com/coollabsio/coolify/issues/12468)) + - Accent text reaches a contrast of 4.5:1 on the page and in the sidebar, and the preview shows the real fill +- Unreadable account menu entries, such as `Log out`, when a custom theme sidebar uses the other light or dark scheme than the page ([#12467](https://github.com/coollabsio/coolify/issues/12467)) +- Unreadable subscription and server limit banners in light mode ([#12494](https://github.com/coollabsio/coolify/issues/12494)) + - The banners now use a light background with dark text in light mode +- Upgrade modal that did not finish when the new version answered ([#8024](https://github.com/coollabsio/coolify/issues/8024)) + - The modal shows success as soon as the new version is up + - Livewire error pages stay hidden while an upgrade runs +- Volume data checkboxes that were not next to their labels +- WebSockets closed by Caddy on every configuration reload ([#7942](https://github.com/coollabsio/coolify/issues/7942)) + - The application, service and dashboard routes set `stream_close_delay` +- White flash of the dark theme during page loads and `wire:navigate` ([#7866](https://github.com/coollabsio/coolify/issues/7866)) +- Wrong `Docker Compose file not found` error for an empty Compose file ([#12477](https://github.com/coollabsio/coolify/issues/12477)) + - An empty Compose file now gives an error that says that the file is empty + ## [v4.6.0] - 2026-11-02 ### Breaking Changes diff --git a/release.json b/release.json index d66e762149..bdd4f055e4 100644 --- a/release.json +++ b/release.json @@ -1,6 +1,6 @@ { "stable": { - "coolify": "4.6.0" + "coolify": "4.7.0" }, "preview": { "coolify": "4.5.3"