Skip to main content

Release v3.9.0

· 8 min read

What Changed

22
New Features
Bug Fixes
Security: Access Token Invalidation on LogoutFixed a security vulnerability where user access tokens remained valid after signing out. Tokens are now properly revoked upon logout, preventing unauthorized API access with stale credentials.
CVE RemediationAddressed multiple CVEs across API, enterprise collector, enterprise frontend, sandbox, and web container images. See the Security CVE section below for the full scan report.
Plugin Version Upgrade/Downgrade Returns 404Fixed a 404 error that occurred when switching a custom plugin to a different version (upgrade or downgrade) from the Enterprise admin panel when the plugin was already assigned to workspaces. The system now correctly follows an upgrade path instead of treating the operation as a fresh install.
Plugin Management Page Misses Unassigned PluginsFixed a bug where the Enterprise admin plugin management page did not display installed plugins that had no active workspace assignments. All installed plugins are now visible, improving operational visibility and cost management.
Credential Policy API PerformanceOptimized the credential policy API with concurrent database reads, resolving high latency that was degrading the user experience when fetching or updating model credential policies.
Credential Policy API Accepts Invalid Plugin IDsFixed a bug where the credential policy PUT API would persist invalid plugin identifier values (e.g., a malformed three-segment ID), causing all subsequent credential policy read and write operations to fail with a 500 error that required manual database intervention to recover.
Credentials Unselectable After Plugin Version ChangeFixed an issue where credentials assigned to workspaces became unselectable in the workflow editor after an admin updated the plugin version via the management panel. Users no longer need to reassign credentials as a workaround.
Group Creation Returns False "Already Exists" ErrorFixed a bug where creating a new user group triggered a "group already exists" error and a 500 response even though no such group existed, preventing successful group creation.
OTel Endpoint URL Validation Rejects Valid PathsFixed the OpenTelemetry endpoint URL validator to accept URLs that include a path component (e.g., `https://api.smith.langchain.com/otel/v1/traces`), enabling compatibility with LangSmith and other observability platforms that require path-based endpoints.
OpenAI New Model Credential Validation ErrorFixed a credential validation error for newer OpenAI models (e.g., GPT-5.2 and above) that have deprecated the `max_tokens` parameter in favor of `max_completion_tokens`. The Dify SDK now sends the correct parameter, eliminating the 400 "unsupported parameter" error.
Workspace List Loads Slowly After Helm UpgradeFixed a performance regression introduced in prior Helm-deployed versions where refreshing the workspace list took significantly longer than expected. The underlying query has been optimized to restore fast workspace list rendering.
Helm Custom CA Certificate Not Applied to CollectorFixed a Helm configuration issue where custom CA certificates configured for the deployment were not propagated to the collector component, causing TLS verification failures for outbound connections from the collector.
Go Runtime Upgrade for Enterprise ComponentsEnterprise backend components have been updated to a newer version of Go, improving runtime performance and closing known security issues in the Go standard library.

Upgrade Guide

Pre-Upgrade Checklist
Back up PostgreSQL database and Redis data
Confirm Kubernetes cluster has sufficient resources for rolling update
Zero-downtime rolling upgrade supported
Upgrade Command

# Back up database first, then:

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

Rollback

$ helm rollback dify 0

Security & CVE

Full CVE report →
Security vulnerabilities found in this release.1 Critical · 30 High CVE across all container images
Image
api
enterprise
enterpriseAudit
enterpriseCollector
enterpriseFrontend
gateway
plugin_build_base_py312
plugin_build_base_py313
plugin_build_base_py314
plugin_connector
plugin_controller
plugin_daemon
plugin_daemon_local
plugin_manager
plugin_shader
sandbox
web
critical
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
high
1
0
0
1
1
0
7
7
7
0
0
0
4
0
0
1
1
medium
11
4
4
5
8
4
10
9
9
6
4
3
742
6
4
7
4
low
25
4
4
4
3
4
153
153
153
5
4
3
51
5
4
26
3
Status
FAIL
PASS
PASS
FAIL
FAIL
PASS
FAIL
FAIL
FAIL
PASS
PASS
PASS
FAIL
PASS
PASS
FAIL
FAIL
ScannerDocker Scout
Scanned
Mar 31, 2026
Data Source
Docker
TTFE – Time To First Event (ms)
AVG
94.55
MIN
41
MAX
2228
P50
51
P90
98.3
P95
169.45
Connections
Max Concurrent
22
Avg Active
13.6
Empty Workflow QPS
Max QPS
71
Avg QPS
36.37
Avg Duration (ms)
215.61

License Compliance

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