Skip to main content

v3.13.1

LTSUnskippable
Released Oct 16, 2026·Supported until Mar 31, 2028·Community 1.17.x·Community commit 61c48b8·Enterprise 0.20.x·Helm chart·Docker Compose
Breaking
2 to verify
Security
Issues
Changes
1F · 13B
Downtime
Migration required

Upgrade Impact

1 features · 13 fixes
Breaking:Upgrade directly to this release instead of 3.13.0, then run the Agent permission migration. If you already completed the migration on a 3.13.0 hotfix image, you do not need to run it again. The default Enterprise API image still excludes ChromaDB. See the Upgrade Guide.
RBAC: Agent Permission Migration RequiredWhen upgrading from a version earlier than 3.13.0, upgrade directly to 3.13.1 and run the Agent permission migration here; the migration in 3.13.0 can fail with 409 RBAC_ACCESS_POLICY_BINDING_LOCKED. If you are on 3.13.0, run the migration again after upgrading to 3.13.1. If you are on a 3.13.0 hotfix image (3.13.0-hotfix-20261001 or later) and the migration completed there, you do not need to run it again. See the 3.13.0 release notes for the steps.
API image: ChromaDB remains excluded from the default buildThe default dify-ee-api image continues to exclude the ChromaDB vector store to address a critical CVE in the ChromaDB dependency, unchanged from 3.13.0. If your deployment relies on ChromaDB, use the docker.io/langgenius/dify-ee-api-insecure:3.13.1 image tag, which includes ChromaDB at the cost of the additional known vulnerabilities listed in the CVE report below.
CVEs for the opt-in api-insecure image is excluded from the aggregate counts above.

What Changed

14
New Features
Bug Fixes
Multi-Environment Deployment: Deployments Stop Updating Above 50 per RunnerFixed an issue where an app runner assigned more than 50 deployments rejected all of them and stopped updating every deployment it served. The per-runner limit is removed.
Multi-Environment Deployment: Workflow Runs Stopped After 20 MinutesFixed an issue where every workflow run on an app runner was stopped after 20 minutes, regardless of the configured execution time limit. Runs now follow the limit set on the Enterprise service, and the step limit follows WORKFLOW_MAX_EXECUTION_STEPS (default 500).
RBAC: Agent Permission Migration Fails with 409Fixed an issue where flask rbac-migrate-agent-permissions --apply stopped with 409 RBAC_ACCESS_POLICY_BINDING_LOCKED when upgrading to 3.13.0. The migration now skips workspace owners and admins, whose permissions are locked and need no migration.
Annotation Reply with QdrantFixed an issue where enabling Annotation Reply failed with "Dataset Collection Bindings does not exist!" on deployments using the Qdrant vector store, so annotation replies could not be turned on.
Explore: Installed Apps List on MySQLFixed an issue where the installed apps list in Explore failed with an internal error on deployments using an external MySQL database.
Plugins: Marketplace Details Refused to ConnectFixed an issue where opening plugin or template details from the Marketplace showed "marketplace.dify.ai refused to connect". Details now open in a new browser tab.
Plugins: Plugin Install Fails with IAM Role on S3Fixed an issue where installing a plugin failed on AWS deployments that use an IAM role for S3 when persistence.s3.endpoint was set. The plugin build job sent its credential request to the S3 endpoint instead of AWS STS. The custom endpoint now applies only to S3.
Plugins: Plugin Manager Ignores a Changed PLUGIN_DAEMON_KEY (Docker Compose)Fixed an issue where changing PLUGIN_DAEMON_KEY in .env broke calls from the plugin manager to the plugin daemon. The plugin manager now uses the same key as the daemon.
Integrations: Notion Internal Integration Fails to Connect (Helm)Fixed an issue where connecting Notion failed on Helm deployments using the default internal integration type. The chart now passes global.integrations.notion.integrationType to the API and worker, so the configured type takes effect.
Plugins: OAuth Client Configuration Form LayoutFixed a layout issue where the OAuth client information card in the plugin OAuth configuration form did not span the full width of the form.
Agent: Custom Icon on the Configuration PageFixed an issue where a custom uploaded Agent icon showed on the Agent list but did not load on the Agent configuration page.
Security: Next.js and sharp UpgradesUpgraded Next.js to 16.4.1 in the Dify web app and to 16.3.8 in the enterprise dashboard, and sharp to 0.35.5 in the enterprise dashboard. This addresses advisories including remote code execution in Open Graph image rendering, SSRF in image optimization, cache poisoning, and a heap overflow in image decoding. See the Security & CVE section below.
Security: Go Toolchain and Dependency UpgradesRebuilt all Go services with Go 1.26.9 and upgraded golang.org/x/net to 0.60.0, which fixes critical and high-severity Go standard library and HTTP/2 vulnerabilities. Upgraded PyJWT to 2.15.0 (fixes a critical vulnerability), along with pypdf, urllib3, Werkzeug, LiteLLM, Mako, oauthlib, multidict, fsspec and soupsieve in the API, and fflate in the web app. See the Security & CVE section below.

Upgrade Guide

Pre-Upgrade Checklist
Back up PostgreSQL database and Redis data
Confirm Kubernetes cluster has sufficient resources for rolling update
If your deployment uses ChromaDB, review the known vulnerabilities before selecting the dify-ee-api-insecure:3.13.1 image
If upgrading from a version earlier than 3.13.0, upgrade directly to 3.13.1 (do not stop at 3.13.0)
If you use global.customCA, create the CA Secret in the plugin runtime namespace too. If plugin_controller.installCrd is false, apply the updated DifyPlugin CRD before upgrading
Schedule a maintenance window; after upgrading, run flask rbac-migrate-agent-permissions (dry run by default), then rerun with --apply. Follow the steps in the 3.13.0 release notes. If you are on 3.13.0, run it again here; skip it if it already completed on a 3.13.0 hotfix image
Review the manifest changes before applying: helm diff upgrade dify dify-ee/dify --version 3.13.1 -f values.yaml (helm-diff plugin), or render with helm template dify dify-ee/dify --version 3.13.1 -f values.yaml and compare it against helm get manifest dify
Upgrade Command

# Back up the database and review the manifest diff first, then:

$ helm upgrade -i dify -f values.yaml dify-ee/dify --version 3.13.1

Rollback

$ helm rollback dify 0

Security & CVE

Full CVE report →
Security vulnerabilities found in this release.24 Critical · 73 High CVE across all container images
CVEs for the opt-in api-insecure image is excluded from the CVE table above.
TTFE – Time To First Event (ms)
AVG
186.58
MIN
163
MAX
210
P50
186.5
P90
201.8
P95
206.15
Connections
Max Concurrent
1
Avg Active
1
Empty Workflow QPS
Max QPS
12.6
Avg QPS
11.97
Avg Duration (ms)
198.09

License Compliance

Full license report →
All dependencies compliant - no copyleft issues detected
Apache-2.0MITBSD-3-ClauseMPL-2.0BSD-2-ClauseISCCC0-1.0
© 2026 Dify All rights reserved.Enterprise release information is confidential. Do not distribute externally.