release-notes.md
The following release notes are for the Business Edition of Portainer. For Community Edition release notes, refer to the GitHub releases page.
February 26, 2026
Known issues with Podman support
Known issues with Talos clusters managed by Omni (BE only)
ArrayBuffer] instead of human-readable text
February 13, 2026
Known issues with Podman support
Known issues with Talos clusters managed by Omni (BE only)
January 29, 2026
Known issues with Policy Based Management (BE only)
Known issues with Podman support
Known issues with Talos clusters managed by Omni (BE only)
rollbackTo query parameterDecember 11, 2025
Known issues with Fleet Management (BE only)
Known issues with Podman support
Known issues with Talos clusters managed by Omni
.txt extension when downloading filesNovember 27, 2025
Known issues with Podman support
Known issues with Talos clusters managed by Omni
Breaking change
November 27, 2025
Known issues with Podman support
Known issues with Talos clusters managed by Omni
--data-path flag to the password reset helperNovember 20, 2025
Known issues with Podman support
Known issues with Talos clusters managed by Omni
October 30, 2025
Known issues with Podman support
Known issues with Talos clusters managed by Omni
kubeconfigOctober 16, 2025
--compact-db to allow database compaction on startupSeptember 25, 2025
Known issues with Podman support
Known issues with Talos clusters managed by Omni
--sslcert and --sslkey CLI options in favor of the --tlscert and --tlskey options respectively, and will be removing the --sslcert and --sslkey options in a future release.September 18, 2025
mingit binary from Windows imageswindows-2025 builds of the Portainer imageduplicate metrics collector registration attempted)August 27, 2025
--tlscert and --tlskey CLI options did not work unless --sslcert and --sslkey were also providedAugust 20, 2025
kubectl exec to failapplication/vnd.docker.distribution.manifest.list.v2+json) has been removed. All published container images now exclusively use the OCI image index format (application/vnd.oci.image.index.v1+json). Tooling that relied on Docker-specific media types should be updated to ensure compatibility with OCI-compliant image indexes.July 24, 2025
--trusted-origins flag to allow for CSRF protection in more complex setupsapplication/vnd.docker.distribution.manifest.list.v2+json) has been removed. All published container images now exclusively use the OCI image index format (application/vnd.oci.image.index.v1+json). Tooling that relied on Docker-specific media types should be updated to ensure compatibility with OCI-compliant image indexes.July 3, 2025
--trusted-origins CLI option and TRUSTED_ORIGINS environment variable to specify (in a comma-separated list) the domain(s) used to access Portainer when it is behind a reverse proxy. Use this option if Portainer is behind a reverse proxy and you are getting "Origin invalid" errors.July 2, 2025
--trusted-origins CLI option and TRUSTED_ORIGINS environment variable to specify (in a comma-separated list) the domain(s) used to access Portainer when it is behind a reverse proxy. Use this option if Portainer is behind a reverse proxy and you are getting "Origin invalid" errors.June 26, 2025
June 25, 2025
June 19, 2025
June 17, 2025
June 12, 2025
--device nvidia.com/gpu=all setapplication/vnd.oci.image.index.v1+json) instead of the traditional Docker manifest list format (application/vnd.docker.distribution.manifest.list.v2+json) in a future release. Any tooling relying on Docker-specific media types should be checked for compatibility, although most OCI-compliant tools already support this format.May 20, 2025
May 15, 2025
kubectl binary with the upstream SDKPORTAINER_ prefixed environment variables from the edge agent to the edge stacksPORTAINER_EDGE_ID variable in async environmentsDeprecated features
Removed features
None
May 9, 2025
May 2, 2025
April 24, 2025
April 23, 2025
April 16, 2025
libstack used an incorrect working directory in some scenarios.--disable-role-sync flag in Kubernetes environments.Deprecated features
None
Removed features
None
April 15, 2025
March 20, 2025
March 19, 2025
This is a STS (Short Term Support) release that includes all the changes added up to and including the 2.27.2 patch release as well as various fixes aimed at enhancing the stability and scalability of Portainer. For more details on what is included from the 2.27 release, refer to the 2.27 release notes.
--disable-role-sync flagMarch 19, 2025
--disable-role-sync flagFebruary 27, 2025
February 20, 2025
StorageError: invalid object"Create from file to Create from codeDeprecated features
<platform>-<arch> image tags were deprecated in 2.21Removed features
The following API endpoints have been removed:
January 21, 2025
January 15, 2025
This is a STS (Short Term Support) release that includes all the changes added up to and including the 2.25.1 patch release as well as various fixes aimed at enhancing the stability and scalability of Portainer. For more details on what is included from the 2.25 release, refer to the 2.25 release notes.
None
None
December 20, 2024
December 20, 2024
December 16, 2024
This is a STS (Short Term Support) release that includes all the changes added up to and including the 2.24.1 patch release as well as various fixes aimed at enhancing the stability and scalability of Portainer. For more details on what is included from the 2.24 release, refer to the 2.24 release notes.
docker_config/config.json file is corruptedenv_file field in Compose files were being ignoredPORTAINER_EDGE_ID variable is properly exposed when using Edge ConfigurationsPUT /kubernetes/{id}/namespaces API endpointNone
December 3, 2024
env_file field in Compose files was being ignored.November 20, 2024
This is a STS (Short Term Support) release that includes all the changes added up to the 2.23 release and 2.21.4 LTS patch release, as well as various fixes aimed at enhancing the stability and scalability of Portainer. For more details on what is included from the 2.23 release, refer to the 2.23 release notes.
Known issues with Docker support
Known issues with Podman support
None
None
October 25, 2024
October 16, 2024
This is a STS (Short Term Support) release that includes all the changes added up to and including the 2.22.0 release, as well as various fixes aimed at enhancing the stability and scalability of Portainer. For more details on what is included from the 2.22 release, refer to the 2.22 release notes.
None
<platform>-<arch>. These images tags were deprecated in a previous release. This change ensures further standardization and consistency across our software distribution.October 8, 2024
October 3, 2024
This is a STS (Short Term Support) release that includes all the changes added up to and including the 2.21.2 release, as well as various fixes aimed at enhancing the stability and scalability of Portainer. For more details on what is included from the 2.21 release, refer to the 2.21 release notes.
As part of the changes on the Kubernetes experiences, some API operations for Kubernetes management may have changed slightly.
<platform>-<arch>. This change ensures further standardization and consistency across our software distribution.<platform>-<arch>-<version>. These images were deprecated in a previous release in favor of the newer convention <version>-<platform>-<arch>. This change ensures standardization and consistency across our software distribution.September 24, 2024
September 10, 2024
August 27, 2024
This is our first Long-Term Support (LTS) release, which includes all the changes that have been added up to the 2.20.3 release, as well as various fixes aimed at enhancing the stability and scalability of Portainer.
<platform>-<arch>-<version> in favor of the newer convention <version>-<platform>-<arch>. This change ensures standardization and consistency across our software distribution. In the future, we’ll only build and publish images using the new tag convention.May 21, 2024
This is an STS (Short-Term Support) release. Read more in our "Portainer 2.20 STS" blog post.
On update to this Portainer version, stacks and edge stacks will have their containers restarted after updating them. This is caused by the use of Docker Compose 2.26.1, which requires this restart. Note: If you already updated to 2.20.0, 2.20.1 or 2.20.2 previously, stacks and edge stacks that DO NOT use relative paths may already have had their containers restarted on update of them, and you would not then see a restart again.
POST /endpoints/edge/trust Associate one or more Edge environments in the waiting room to environmentsPOST /endpoints/{id}/edge/trust Associate an Edge environment in the waiting room to an environment
POST /endpoints/edge/trust insteadMay 1, 2024
This is an STS (Short-Term Support) release. Read more in our "Portainer 2.20 STS" blog post.
PUT /settings Update Portainer settings
body.OAuthSettings.AuthStyleOAuthSettings.AuthStyleGET /settings Retrieve Portainer settings
OAuthSettings.AuthStylePUT /settings/default_registry Update Portainer default registry settings
OAuthSettings.AuthStylePOST /users/{id}/tokens Generate an API key for a user
apiKeyrawAPIKeyApril 22, 2024
April 5, 2024
This is an STS (Short-Term Support) release. Read more in our "Portainer 2.20 STS" blog post.
Please be aware that support for Docker 26 is provided on an "as-is" basis and is primarily driven by best-effort principles. Minimal regression testing has been conducted to ensure basic functionality. Users should proceed with caution and report any issues they encounter.
March 19, 2024
Introducing the new Portainer BE 2.20.0 release. This is an STS (Short-Term Support) release.
As you gear up for the transition to Portainer BE 2.20.0, our latest STS (Short-Term Support) installment, ensuring a smooth upgrade is key. We urge you to back up your configurations via the Portainer UI beforehand. This backup acts as your safety net, ensuring you can gracefully revert to the prior version or state if the new frontier proves too wild. Additionally, pore over the release notes for catching any compatibility issues, understanding deprecated functionalities, and identifying essential tweaks to your current setup. Your diligence will pave the way for a seamless update.
A Short-Term Support release can be considered as "bleeding-edge" as it will contain the latest features and functionality we've developed. The STS releases (including this one) will go through a significant amount of pre-release testing, but there may be changes that could cause regressions and features that might see further iterations. As such, if stability is a crucial concern for your setup we wouldn't recommend deploying STS releases on production environments.
Read more in our "Portainer 2.20 STS" blog post.
GET /kubernetes/{id}/namespaces/{namespace}/configuration. Following Portainer 2.19 split of K8s ConfigMaps and Secrets to two UI tabs and K8s API proxy use, the original endpoint combining both resource types is marked deprecated.GET+POST /endpoints/{id}/kubernetes/helm/repositories, MOVED Helm UI option to Advanced Deployment/Create from Manifest screen + now allow users to delete their Helm repos. New endpoint GET+POST /users/{id}/helm/repositories added.GET+POST /endpoints/{id}/kubernetes/helm/repositories, MOVED Helm UI option to Advanced Deployment/Create from Manifest screen + now allow users to delete their Helm repos. New endpoint GET+POST /users/{id}/helm/repositories added. portainer/portainer#11127/stacks/{id}/images_status (rather than /docker/{environmentId}/stacks/{id}/images_status).GET+POST /users/{id}/tokens endpoint so the example response describes the digest format correctly as a string, rather than (erroneously) as a list of integers. portainer/portainer#11172GET /edge_update_schedules endpoint so it now describes the includeEdgeStacks parameter, and the /edge_update_schedules/active endpoint which is a POST request but was (erroneously) described as a GET request./custom_templates/file (or repository or string), but should have listed them as /custom_templates/create/file (or repository or string). portainer/portainer#11149GET /edge_stacks/{id}/logs/{endpoint_id}/file, GET /kubernetes/{id}/max_resource_limits and GET /kubernetes/{id}/namespaces/{namespace}/role_bindings. portainer/portainer#11171POST /users/{id}/tokens API endpoint. portainer/portainer#11126POST /custom_templates/file Create a custom templatePOST /custom_templates/repository Create a custom templatePOST /custom_templates/string Create a custom templateGET /docker/{environmentId}/stacks/{id}/images_status Fetch image status for stackPOST /cloud/credentials/{id}/delete delete a cloud credential by IDPUT /edge_configurations Update an Edge ConfigurationGET /edge_update_schedules/active Fetches the list of Active Edge Update SchedulesPOST /kubernetes/{id}/namespaces/{namespace} Create a kubernetes namespacePOST /custom_templates/create/file Create a custom templatePOST /custom_templates/create/repository Create a custom templatePOST /custom_templates/create/string Create a custom templatePOST /docker/{environmentId}/containers/image_status/clear Clear container image status cacheGET /docker/{environmentId}/images Fetch imagesPOST /docker/{environmentId}/services/image_status/clear Clear service image status cacheGET /edge_stacks/{id}/logs/{endpoint_id}/file Downloads the available logs for a given edge stack and endpointPOST /edge_stacks/parse_registries Parse registries from a stack fileGET /kubernetes/{id}/cluster_role_bindings Get a list of cluster role bindingsPOST /kubernetes/{id}/cluster_role_bindings/delete Delete the provided cluster role bindingsGET /kubernetes/{id}/cluster_roles Get a list of cluster rolesPOST /kubernetes/{id}/cluster_roles/delete Delete the provided cluster rolesGET /kubernetes/{id}/max_resource_limits Get max unused CPU and memory limits of all nodes within k8s clusterGET /kubernetes/{id}/namespaces/{namespace}/configuration Get ConfigMaps and SecretsGET /kubernetes/{id}/namespaces/{namespace}/role_bindings Get a list of role bindingsGET /kubernetes/{id}/namespaces/{namespace}/roles Get a list of rolesGET /kubernetes/{id}/namespaces/{namespace}/service_accounts Get a list of service accountsPOST /kubernetes/{id}/role_bindings/delete Delete the provided role bindingsPOST /kubernetes/{id}/roles/delete Delete the provided rolesPOST /kubernetes/{id}/service_accounts/delete Delete the provided service accountsPUT /settings/default_registry Update Portainer default registry settingsGET /stacks/{id}/images_status Fetch image status for stackPOST /stacks/image_status/clear Clear stack image status cacheDELETE /stacks/name/{name} Remove Kubernetes stacks by namePOST /templates/{id}/file Get a template's fileGET /users/{id}/helm/repositories List a users helm repositoriesPOST /users/{id}/helm/repositories Create a user helm repositoryDELETE /users/{id}/helm/repositories/{repositoryID} Delete a users helm repositoryGET /users/me Inspect the current user userDELETE /cloud/credentials/{id} Delete a cloud credentialPUT /edge_configurations/{id} Update an Edge ConfigurationPOST /edge_update_schedules/active Fetches the list of Active Edge Update SchedulesPOST /kubernetes/{id}/namespaces Create a kubernetes namespacePOST /auth AuthenticatePOST /auth/oauth/validate Authenticate with OAuthPOST /cloud/{provider}/cluster Provision a new KaaS cluster and create an environmentGET /cloud/{provider}/info Get information about the provisioning options for a cloud provider.GET /custom_templates List available custom templatesPOST /custom_templates Create a custom templatePUT /custom_templates/{id} Update a templateGET /custom_templates/{id} Inspect a custom templateGET /docker/{environmentId}/containers/{containerId}/image_status Fetch image status for containerGET /docker/{environmentId}/services/{serviceId}/image_status Fetch image status for serviceGET /edge_configurations List available Edge ConfigurationsPOST /edge_configurations Create an Edge ConfigurationGET /edge_configurations/{id} Inspect an Edge configurationGET /edge_groups list EdgeGroupsGET /edge_jobs Fetch EdgeJobs listGET /edge_jobs/{id} Inspect an EdgeJobPOST /edge_jobs/{id} Update an EdgeJobGET /edge_stacks Fetches the list of EdgeStacksPOST /edge_stacks Create an EdgeStackDecember 6, 2023
November 22, 2023
November 13, 2023
/edge_update_schedules/{id}/auth/logout
/edge_update_schedules
200204/edge_update_schedules/previous_versions
environmentIdsskipScheduleIDSeptember 20, 2023
August 31, 2023
/edge_groups. Users relying on the HasEdgeGroup parameter should now use HasEdgeJob to achieve the intended functionality./cloud/microk8s/addons/cloud/{provider}/cloudcredentials/cloudcredentials/cloudcredentials/custom_templates/edge_jobs/edge_stacks/endpoints/{id}/edge/generate-key/stacks/cloud/credentials/cloud/credentials/cloud/credentials/cloud/endpoints/{endpointid}/nodes/nodestatus/cloud/endpoints/{environmentid}/addons/cloud/endpoints/{environmentid}/addons/cloud/endpoints/{environmentid}/nodes/add/cloud/endpoints/{environmentid}/nodes/remove/cloud/endpoints/{environmentid}/upgrade/cloud/endpoints/{environmentid}/version/cloud/testssh/custom_templates/file/custom_templates/repository/custom_templates/string/custom_templates/{id}/git_fetch/edge_configurations/edge_configurations/edge_configurations/edge_configurations/{id}/edge_configurations/{id}/edge_configurations/{id}/files/edge_configurations/{id}/{state}/edge_jobs/create/file/edge_jobs/create/string/edge_stacks/create/file/edge_stacks/create/repository/edge_stacks/create/string/edge_stacks/webhooks/{webhookID}/edge_stacks/{id}/git/edge_stacks/{id}/stagger/status/endpoints/edge/generate-key/endpoints/relations/gitops/repo/file/preview/kubernetes/{endpointId}/opa/kubernetes/{id}/ingresscontrollers/kubernetes/{id}/ingresscontrollers/kubernetes/{id}/ingresses/delete/kubernetes/{id}/metrics/nodes/kubernetes/{id}/metrics/nodes/{name}/kubernetes/{id}/metrics/pods/{namespace}/kubernetes/{id}/metrics/pods/{namespace}/{name}/kubernetes/{id}/namespaces/kubernetes/{id}/namespaces/{namespace}/kubernetes/{id}/namespaces/{namespace}/kubernetes/{id}/namespaces/{namespace}/kubernetes/{id}/namespaces/{namespace}/kubernetes/{id}/namespaces/{namespace}/ingresscontrollers/kubernetes/{id}/namespaces/{namespace}/ingresscontrollers/kubernetes/{id}/namespaces/{namespace}/ingresses/kubernetes/{id}/namespaces/{namespace}/ingresses/kubernetes/{id}/namespaces/{namespace}/ingresses/kubernetes/{id}/namespaces/{namespace}/services/kubernetes/{id}/namespaces/{namespace}/services/kubernetes/{id}/namespaces/{namespace}/services/kubernetes/{id}/opa/kubernetes/{id}/services/delete/stacks/create/kubernetes/repository/stacks/create/kubernetes/string/stacks/create/kubernetes/url/stacks/create/standalone/file/stacks/create/standalone/repository/stacks/create/standalone/string/stacks/create/swarm/file/stacks/create/swarm/repository/stacks/create/swarm/string/system/update/webhooks/{id}/webhooks/{token}/webhooks/{token}/websocket/microk8s-shell/cloud/{provider}/info
/custom_templates/{id}/docker/{environmentId}/containers/{containerID}/image_status
/docker/{environmentId}/services/{serviceID}/image_status
/docker/{environmentId}/snapshot/containers/{containerId}
/docker/{environmentId}/stacks/{id}/images_status
/edge_stacks/{id}/edge_stacks/{id}/file
/edge_stacks/{id}/status/edge_stacks/{id}/status/{endpoint_id}
/edge_update_schedules/previous_versions
/edge_update_schedules/{id}
/edge_update_schedules/{id}
/endpoints
/endpoints/endpoints/edge/async
/endpoints/{id}
/endpoints/{id}/endpoints/{id}/edge/stacks/{stackId}
/endpoints/{id}/pools/{rpn}/access
/fdo/configure/{guid}
/fdo/profiles/{id}
/fdo/profiles/{id}
/fdo/profiles/{id}
/fdo/profiles/{id}/duplicate
/gitops/repo/files/search/kubernetes/config
/kubernetes/{endpointId}/opa
/kubernetes/{id}/namespaces/{namespace}/applications
/kubernetes/{id}/opa
/nomad/endpoints/{endpointID}/allocation/{id}/events
/nomad/endpoints/{endpointID}/allocation/{id}/logs
/nomad/endpoints/{endpointID}/dashboard
/nomad/endpoints/{endpointID}/jobs
/nomad/endpoints/{endpointID}/jobs/{id}
/nomad/endpoints/{endpointID}/leader
/open_amt/{id}/activate
/open_amt/{id}/devices/{deviceId}/action
/open_amt/{id}/devices_features/{deviceId}
/open_amt/{id}/info
/registries/{id}/ecr/repositories/{repositoryName}/tags
/settings/ssl/stacks/webhooks/{webhookID}/stacks/{id}
/stacks/{id}
/stacks/{id}/associate
/stacks/{id}/file
/stacks/{id}/start
/stacks/{id}/stop
/tags/webhooks
/webhooks/webhooks/{id}
/webhooks/{id}/reassign
/webhooks/{token}
July 7, 2023
This release includes an experimental ChatGPT integration. Although it promises exciting possibilities, it's in the early stages of development. We recommend its use for testing and development, and urge caution in production environments. We greatly appreciate your feedback and understanding during this phase. portainer/portainer#9116
May 22, 2023
In this release, we introduce an experimental ChatGPT integration. Although it promises exciting possibilities, it's in the early stages of development. We recommend its use for testing and development, and urge caution in production environments. We greatly appreciate your feedback and understanding during this phase.
May 1, 2023
initialDelaySeconds of 45 (sec) and failureThreshold of 3. portainer/portainer#8860April 18, 2023
Please note 2.18.0 is not publicly available. This release is 2.18.1 and is our next GA release since "2.17.x". This was done due to the need to provide an upgradeable preview image to a customer.
/edge_update_schedules/previous_versions/sshkeygen/system/info/system/upgrade/cloud/{provider}/cloudcredentials
id/custom_templates/custom_templates/{id}/edge_groups/edge_groups/{id}/edge_jobs/edge_jobs/{id}/edge_stacks/edge_stacks/{id}/edge_update_schedules/edge_update_schedules/active/edge_update_schedules/agent_versions/endpoint_groups/endpoint_groups/{id}/endpoints
edgeAsyncedgeDeviceedgeDeviceUntrusted
/endpoints/endpoints/{id}/endpoints/{id}/docker/v2/browse/put
204200/endpoints/{id}/kubernetes/helm
filter
true to falsenamespace
true to falseselector
true to false/endpoints/{id}/kubernetes/helm/{release}
namespace
true to false/endpoints/{id}/registries/{registryId}/endpoints/{id}/settings/gitops/repo/files/search/gitops/repo/refs/ldap/admin-groups/ldap/check/ldap/groups/ldap/test/ldap/users/registries/registries/{id}/resource_controls/settings/stacks/team/webhooks/webhooks/{id}/webhooks/{id}/reassignFebruary 22, 2023
February 7, 2023
failed initializing upgrade service | error="failed to determine container platform: failed to retrieve docker info: Error response from daemon: client version 1.41 is too new. Maximum supported API version is 1.40"/docker/{environmentId}/containers/{containerID}/image_status/docker/{environmentId}/services/{serviceID}/image_status/docker/{environmentId}/stacks/{id}/images_status/kubernetes/{id}/namespaces/{namespace}/applications/kubernetes/{id}/namespaces/{namespace}/applications/{kind}/{name}/kubernetes/{id}/rbac_enabled/nomad/endpoints/{endpointID}/leader/system/info/system/nodes/system/status/system/upgrade/system/version/webhooks/{id}/reassign/nomad/endpoints/{endpointID}/status/status - Deprecated: use the /system/status endpoint instead to retrieve the Portainer status./status/nodes - Deprecated: use the /system/nodes endpoint instead./status/version - Deprecated: use the /system/version endpoint instead to check if portainer has an update available./backup/s3/execute/backup/s3/restore/backup/s3/settings/edge_jobs/edge_jobs/{id}/edge_stacks/edge_stacks/{id}/edge_update_schedules/edge_update_schedules/active/endpoints/{id}/endpoints/{id}/settings/registries/registries/{id}/settings/stacksNovember 21, 2022
November 9, 2022
October 31, 2022
portainer/portainer:latest moved to portainer/portainer:2.16.September 16, 2022
September 6, 2022
edgeDeviceFilter has been replaced by edgeDevice and edgeDeviceUntrusted.July 26, 2022
July 12, 2022
{{ service }}) multiple times in the YAML, the UI also prompts for it multiple times, rather than prompting for it a single time and then reusing it.June 28, 2022
May 12, 2022
May 9. 2022
April 4, 2022
March 9, 2022
March 8, 2022
--sslcert flag was being ignored: portainer/portainer#6021November 15, 2021
Default HTTPS support has been added: portainer/portainer#5462
As a consequence the --ssl flag has been deprecated. If you are using the --sslcert and --sslkey flags, then after the upgrade port 9000 will serve http and port 9443 will serve https with the provided certificate. To retain the old behavior consider using the port mapping -p 9000:9443 instead.
The /stacks API has renamed from ComposeFilePathInRepository to ComposeFile, and the non-mandatory fields AdditionalFiles and AutoUpdate were added: portainer/portainer#5461
container_name validation would not take stopped containers into account: portainer/portainer#5522July 29, 2021
<portainer_url>/#!/internal-auth to login with internal admin.May 4, 2021
February 22, 2021
@ character in their username@ character in their username were not able to create the following Kubernetes resources:
December 3, 2020
Initial release of Portainer Business