Dify

AI

A platform for building LLM applications from visual workflows and RAG pipelines.

Latest 1.16.1 · by LangGeniusWebsitelanggenius/dify

Release activity

Release activity — 10 releases across 10 days since Mar 17, 2026. Each cell is one day; darker means more releases that day. Nothing is recorded before Mar 17, 2026. Older weeks are hidden at this screen width.
MayJunJulAug
SundayNo releases on Apr 26, 2026No releases on May 3, 2026No releases on May 10, 2026No releases on May 17, 2026No releases on May 24, 2026No releases on May 31, 2026No releases on Jun 7, 2026No releases on Jun 14, 2026No releases on Jun 21, 2026No releases on Jun 28, 2026No releases on Jul 5, 2026No releases on Jul 12, 2026No releases on Jul 19, 2026No releases on Jul 26, 2026No releases on Aug 2, 2026No releases on Aug 9, 2026
MondayNo releases on Apr 27, 2026No releases on May 4, 2026No releases on May 11, 2026No releases on May 18, 2026No releases on May 25, 2026No releases on Jun 1, 2026No releases on Jun 8, 2026No releases on Jun 15, 2026No releases on Jun 22, 2026No releases on Jun 29, 2026No releases on Jul 6, 2026No releases on Jul 13, 2026No releases on Jul 20, 2026No releases on Jul 27, 2026No releases on Aug 3, 2026No releases on Aug 10, 2026
TuesdayNo releases on Apr 28, 2026No releases on May 5, 20261 release on May 12, 20261 release on May 19, 2026No releases on May 26, 2026No releases on Jun 2, 2026No releases on Jun 9, 2026No releases on Jun 16, 2026No releases on Jun 23, 2026No releases on Jun 30, 2026No releases on Jul 7, 2026No releases on Jul 14, 2026No releases on Jul 21, 20261 release on Jul 28, 2026No releases on Aug 4, 2026No releases on Aug 11, 2026
Wednesday1 release on Apr 29, 2026No releases on May 6, 2026No releases on May 13, 2026No releases on May 20, 2026No releases on May 27, 2026No releases on Jun 3, 2026No releases on Jun 10, 2026No releases on Jun 17, 2026No releases on Jun 24, 2026No releases on Jul 1, 2026No releases on Jul 8, 2026No releases on Jul 15, 2026No releases on Jul 22, 2026No releases on Jul 29, 2026No releases on Aug 5, 2026No releases on Aug 12, 2026
ThursdayNo releases on Apr 30, 2026No releases on May 7, 2026No releases on May 14, 2026No releases on May 21, 2026No releases on May 28, 2026No releases on Jun 4, 2026No releases on Jun 11, 2026No releases on Jun 18, 20261 release on Jun 25, 2026No releases on Jul 2, 20261 release on Jul 9, 2026No releases on Jul 16, 2026No releases on Jul 23, 2026No releases on Jul 30, 2026No releases on Aug 6, 2026
FridayNo releases on May 1, 2026No releases on May 8, 2026No releases on May 15, 2026No releases on May 22, 2026No releases on May 29, 2026No releases on Jun 5, 2026No releases on Jun 12, 2026No releases on Jun 19, 2026No releases on Jun 26, 2026No releases on Jul 3, 2026No releases on Jul 10, 20261 release on Jul 17, 2026No releases on Jul 24, 2026No releases on Jul 31, 2026No releases on Aug 7, 2026
SaturdayNo releases on May 2, 2026No releases on May 9, 2026No releases on May 16, 2026No releases on May 23, 2026No releases on May 30, 2026No releases on Jun 6, 2026No releases on Jun 13, 2026No releases on Jun 20, 2026No releases on Jun 27, 2026No releases on Jul 4, 2026No releases on Jul 11, 2026No releases on Jul 18, 2026No releases on Jul 25, 2026No releases on Aug 1, 2026No releases on Aug 8, 2026

10 releases since Mar 17, 2026

Changelog

1.16.1

Release v1.16.1 - Bug Fixes and Security Enhancements

Added 5
  • Workflow tool nodes now support multi-select dropdown inputs for choosing multiple values from a predefined list when configuring tool parameters
  • Click a node_id in workflow run logs or error messages to locate and highlight the corresponding node in the workflow editor canvas
  • Block selector panel now features improved keyboard navigation, category previews, and a more intuitive search experience when adding nodes to workflows
  • Agent apps can now be exported as DSL YAML directly from the app sidebar menu
  • Added more observability traces to knowledge/RAG document processing operations
Fixed 15
  • Fixed hidden-tab collaboration leader saving stale drafts when the tab is inactive
  • Fixed unsaved edits being dropped when collaboration never connects
  • Preserved latest collaboration session after reconnection
  • Fixed false draft save error during Strict Mode initialization
  • Show persistent error notification when workflow draft save fails
  • Wait for workflow worker threads to finish before Celery tasks complete, preventing orphaned executions
What's Changed
New Features

Tool Multi-Select Input

  • Workflow tool nodes now support multi-select dropdown inputs, allowing users to choose multiple values from a predefined list when configuring tool parameters. (#39346)

Workflow Node Locator

  • You can now click a node_id in workflow run logs or error messages to locate and highlight the corresponding node in the workflow editor canvas. (#38187)

Workflow Block Selector Improvements

  • The block selector panel now features improved keyboard navigation, category previews, and a more intuitive search experience when adding nodes to workflows. (#39212)

Export Agent DSL from Sidebar

  • Agent apps can now be exported as DSL YAML directly from the app sidebar menu, making it easy to back up or version-control agent configurations. (#39299)

Knowledge Tracing

  • Added more observability traces to knowledge/RAG document processing operations, improving visibility into indexing pipelines. (#38959)

Bug Fixes

Workflow & Collaboration

  • Fixed hidden-tab collaboration leader saving stale drafts when the tab is inactive (#38997)
  • Fixed unsaved edits being dropped when collaboration never connects (#39579)
  • Preserved latest collaboration session after reconnection (#39646)
  • Fixed false draft save error during Strict Mode initialization (#39353)
  • Show persistent error notification when workflow draft save fails (#39293)
  • Wait for workflow worker threads to finish before Celery tasks complete, preventing orphaned executions (#39614)
  • Lazy-load Loro collaboration runtime to reduce initial bundle size (#39631)
  • Don't open node settings panel when clicking a node in comment mode (#39500)
  • Don't close active comment panel when a different comment is resolved (#39491)

RAG & Knowledge

  • Fixed document cleaner stripping valid characters ï (U+00EF), ¿ (U+00BF), ¾ (U+00BE) (#39215)
  • Preserved spaces during recursive text splitting (#39498)
  • Used flush() instead of commit() in dataset service to preserve caller transaction boundaries (#39223)
  • Sent valid body in external knowledge validation probe (#39410)

Agent

  • Fixed agent preview: start new Preview conversations without inheriting an old ID (#39463)
  • Fixed agent chat input being replaced when conversation history updates (#39289)
  • Preserved complete model usage pricing in agent logs (#39201)
  • Show workflow node runs in agent execution logs (#39471)
  • Include workflow runs in agent monitoring stats (#39354)
  • Block unpublished agents from being used in workflows (#39532)
  • Prevent agent preview actions from being clipped (#39510)
  • Prevent build reset from clearing preview chat history (#39490)
  • Fixed agent build draft UI flashing during apply (#39642)

Web App & UI

  • Fixed webapp JWT expiration time being incorrectly set (#39537)
  • Fixed TTS playback in Safari and Firefox (#39444)
  • Fixed clipboard writes failing in embedded apps (#39511)
  • Fixed text generation web app showing infinite loading after timeout (#39268)
  • Fixed chat not passing document if model doesn't support vision (#39461)
  • Stopped chunk length/overlap inputs collapsing to unusable width in narrow containers (#39600)
  • Fixed search hotkey hydration mismatch (#39574)
  • Improved DSL import/export dialog states (#39432, #39409)
  • Fixed basePath doubling in auth refresh redirects (#39273)
  • Show unavailable state for disabled Web Apps (#39392)
  • Fixed permission selector semantics (#39269)
  • Fixed customization page horizontal overflow (#39557)

API & Backend

  • Fixed MCP tool output_schema being treated as required when it's optional (#39453)
  • Honored array-element limit and byte budget for list[File] in VariableTruncator (#39220)
  • Prevented identity logging deadlock (#39449)
  • Rejected host:port-shaped PLUGIN_REMOTE_INSTALL_PORT values with an actionable hint (#39329)
  • Fixed PaginatedResult.pages returning 1 instead of 0 for empty result sets (#39229)
  • Used resource tenant for draft variable files (#39307)
  • Scoped HITL snapshot message lookup to utilize database index (#39351)
  • Returned 400 instead of 500 when file field is missing from audio-to-text endpoints (#39303, #39322)
  • Fixed tool_meta missing tool_provider_type during tool execution (#39513)
  • Applied configured timeout to enterprise inner API requests (#39335)
  • Returned disabled auto-upgrade settings when strategy is missing (#39494)
  • Enforced tool provider type contracts (#39380)
  • Fixed WaterCrawl website crawler handling non-JSON error responses (#37514)
  • Fixed can't create chat app when tenant default model schema errors (#39266)

Security Enhancements
  • The Agent local sandbox now runs behind a dedicated Squid forward proxy with strict ACL rules, preventing the sandbox from reaching internal services directly. Only the /files/ endpoint on the API and /agent-stub/ on agent_backend are permitted, both protected with short-lived access tokens. This significantly reduces the blast radius of arbitrary code execution in the agent sandbox. (#39544)
  • Communication between the Dify API and the agent backend now uses token-based authentication via DIFY_AGENT_API_TOKEN / AGENT_BACKEND_API_TOKEN, hardening the internal service boundary. (#39622)
  • Switched Jinja2 template rendering to use SandboxedEnvironment, preventing template injection attacks in workflow code nodes (#39609)
  • Patched React Server Components DoS vulnerability (#39539)
  • Used re.fullmatch in email validator to reject trailing newlines, preventing bypass attacks (#39320)
  • Validated account status before accepting workspace invitations (#39438)

Performance
  • Lightweight recent apps endpoint — New GET /console/api/apps/recent endpoint reduces the home page "Continue Work" section latency by ~69% (3.2× faster), cutting SQL queries from 19+ to 1 projection SELECT and response size by ~50% (#39625)
  • Lazy-load Home creation modals — Deferred loading of creation modal code until interaction, reducing initial JavaScript bundle (#39634)

Improvements
  • Made agent composer save and publish state consistent (#39637)
  • Simplified Dify logo theming (#39580)
  • Improved workflow block selector UI (#39377)
  • Improved web accessibility semantics (#39505)
  • Nodes are no longer draggable when previewing a workflow (#39131)
  • Display non-LLM settings in integration tool details (#39295)

Environment Variable Changes
New Variables
VariableDefaultDescription
DIFY_AGENT_API_TOKENdify-agent-run-token-for-dev-onlyShared bearer token for API → agent_backend authentication. Change this in production.
AGENT_BACKEND_API_TOKENdify-agent-run-token-for-dev-onlySame token on the agent backend side. Must match DIFY_AGENT_API_TOKEN.
PLUGIN_MODEL_PROVIDERS_CACHE_ENABLEDtrueSet to false if plugins are installed externally and the cache cannot be invalidated.

[!IMPORTANT] DIFY_AGENT_API_TOKEN is a new required variable for secure communication between the Dify API and agent backend. The default value (dify-agent-run-token-for-dev-only) is insecure and must be replaced in production. Generate one with:

python -c 'import secrets; print(secrets.token_urlsafe(32))'

Set the same value as AGENT_BACKEND_API_TOKEN on the agent backend side.

Docker Compose Changes
  • Agent sandbox network isolation: local_sandbox is moved off the default network to dedicated agent_sandbox_network + local_sandbox_proxy_network. A new agent_ssrf_proxy service (Squid) is added.
  • Bearer auth: AGENT_BACKEND_API_TOKEN / DIFY_AGENT_API_TOKEN are now passed to api, worker, and agent_backend services.
  • Image tags updated to 1.16.1.

Database Migrations

This release includes 4 new migrations:

  1. 2026_07_15_1600-3c9f8e2a1d7b_add_workflow_run_archive_bundle_cursor_indexes.py — Add indexes to workflow_run_archive_bundles (concurrent on PostgreSQL)
  2. 2026_06_29_1200-b8c9d0e1f2a3_add_step_by_step_tour_state.py — Create account_step_by_step_tour_states table
  3. 2026_07_22_1500-d2825e7b9c10_scope_agent_debug_conversations.py — Add draft_type column to agent_debug_conversations and update unique constraint
  4. 2026_07_23_1200-6f5a9c2d8e1b_add_telemetry_fields_to_dify_setups.py — Add telemetry fields (instance_id, install_reported_at, last_heartbeat_at) to dify_setups

All migrations are additive (new tables, columns, indexes) and are safe to run without downtime.


Upgrade Guide
Docker Compose (Recommended)
cd docker
docker compose down
git pull origin main
docker compose pull
docker compose up -d

The database migrations will run automatically on startup.

[!IMPORTANT] Review the new DIFY_AGENT_API_TOKEN variable in .env. The default value is insecure — generate a secure token for production:

python -c 'import secrets; print(secrets.token_urlsafe(32))'
Source Code
git pull origin main
cd api
flask db upgrade

What's Changed
New Contributors

Full Changelog: https://github.com/langgenius/dify/compare/1.16.0...1.16.1

View originalPermalink
How 1.16.1 went
1.16.0

v1.16.0

Added 9
  • Introduce Dify Agent in open beta with a builder for creating agents through the UI, a sandbox environment for code execution, a skill system for calling tools and APIs, and an agent roster for managing agents across a workspace
  • Add Dify Workflow integration for Dify Agent allowing existing agents to be used in workflows or temporary inline agents to be created
  • Add web app experience for publishing Dify Agents with familiar user interface powered by Dify Agent
  • Add configurable timeout for AI workflow generation using WORKFLOW_GENERATION_TIMEOUT_MS environment variable with default 180 seconds
  • Add support for injecting dynamic HTTP request headers at runtime in MCPClient connections using placeholders like {{request.headers.X-Custom-Auth}} for per-request authentication passthrough
  • Add customization of chat input placeholder text up to 64 characters for Chatbot, Agent, and Chatflow web apps
Changed 7
  • Enhance the ⌘K → /create and /refine AI workflow generator by removing the low-value Ideal output field, replacing static example chips with AI-generated suggestions grounded in workspace context, and parallelizing node config generation for faster results
  • Upgrade MCP protocol support to version 2025-06-18 with version negotiation and structured tool output while maintaining backward compatibility with older clients
  • Refine web app customization UI with clearer naming for Custom Frontend and Branding options and improved label handling
  • Properly abort active runs during Celery warm shutdown to prevent orphaned tasks
  • Improve Redis connection resilience with TCP keepalive support and expanded retry coverage
  • Improve OAuth and SSO login flows to preserve redirect URLs more reliably with a dedicated error view for failed SSO completions
  • Change default API type for new OpenAI configurations from Chat Completions to Responses to support GPT-5.6 and newer models
Fixed 3
  • Fix multiple workflow draft import issues losing references, node settlement after failures, and retry detail visibility
  • Fix SSE stream corruption with Unicode separators and agent final answer being cleared after stream completion
  • Fix open redirect vulnerabilities in post-login and auth redirect flows

Introducing Dify Agent (Beta): A New Agent Experience in Dify

[!WARNING] You should provide Dify Agent services ⚠️only to trusted, non-malicious users⚠️.

As many of you know, the shell-based LLM agent paradigm has brought a major leap in agent capabilities and changed how we think about agents. Meanwhile, Skills provide a standardized way to package and distribute capabilities, making it easier to build powerful agents.

Today, we are launching Dify Agent. Like other leading agents, it runs in a Linux sandbox. This release includes:

  • A builder for creating Dify Agents

    • You can build Dify Agents through the UI: set a base prompt, upload Skills and files, and connect tools and knowledge from the Dify ecosystem.
    • We also provide an agent that helps you build Dify Agents. Through conversation, it can configure the Linux sandbox environment, install required packages, and create new Skills and files that your Dify Agent can use later.
  • Dify Workflow integration for Dify Agent

    • You can use an existing Dify Agent in a Dify Workflow, or temporarily create an inline Dify Agent. It will execute the task defined by the workflow node, generate the required output, and pass it to the next node.
  • A new web app experience

    • The Dify Agent you build can be published and used as a web app. While the user experience remains familiar, it is now powered by Dify Agent.

Docs: https://docs.dify.ai/en/self-host/use-dify/build/new-agent/overview

⚠️ Action Required

OpenAI GPT-5.6 Compatibility Notice

The OpenAI plugin previously defaulted to using the Chat Completions API, which was deprecated by OpenAI earlier this year and has increasingly poor support for newer model series. The newly released GPT-5.6 family has many unusual and unique parameter combination restrictions when used with Chat Completions, because OpenAI now provides only minimal compatibility support for Chat Completions with new models. This is not a Dify system issue.

The default API type for new configurations has been changed from Chat Completions to Responses. However, users who previously saved a custom API key with the old default (Chat Completions) will retain that setting, which may cause unexpected errors that appear to originate from Dify.

If you have previously configured a custom OpenAI API key, please check your API type setting and switch to Responses if it is still set to Chat Completions, especially when using GPT-5.6 or later models.

New Features

Agent App (Open Beta)

  • Agent App enters open beta and is now enabled by default for all users. It introduces a built-in sandbox for code execution and shell commands, a skill system that lets agents call tools and APIs, an agent roster for managing and reusing agents across a workspace, and support for referencing new agents from workflow agent nodes.

Smarter AI Workflow Generation

  • The ⌘K → /create and /refine AI workflow generator has been enhanced end-to-end: the low-value "Ideal output" field was removed, static example chips replaced with AI-generated suggestions grounded in your workspace context, and node config generation is now parallelized for faster results. A configurable timeout (WORKFLOW_GENERATION_TIMEOUT_MS, default 180s) prevents long-running generations from hanging.

MCP Protocol Upgrade

  • The workflow-as-MCP server now supports MCP protocol 2025-06-18 with version negotiation and structured tool output, while remaining backward compatible with older clients. MCPClient connections can now inject dynamic HTTP request headers at runtime using placeholders (e.g. {{request.headers.X-Custom-Auth}}), enabling per-request authentication passthrough.

Web App Customization

  • App owners can now customize the chat input placeholder text (up to 64 chars) for Chatbot, Agent, and Chatflow web apps. The customization UI has been refined with clearer naming ("Custom Frontend" / "Branding") and better label handling. App descriptions are now displayed on chat and text-generation app screens with a collapsible view to avoid pushing the input form off screen.

Workflow Reliability & Operations

  • Workflow run archives can now be exported, and active runs are properly aborted during Celery warm shutdown to prevent orphaned tasks. Redis connections are more resilient with TCP keepalive support and expanded retry coverage. Model providers now receive app_id for provider-side cost attribution (e.g. Bedrock requestMetadata, OpenAI metadata, Vertex AI labels). OAuth and SSO login flows now preserve redirect URLs more reliably, with a dedicated error view for failed SSO completions.
Bug Fixes

Workflow & Agent

  • Fixed multiple issues with workflow draft imports losing references, node settlement after failures, retry detail visibility, and HITL resume state restoration
  • Fixed SSE stream corruption with Unicode separators, agent final answer clearing after stream completion, and conversation title being overwritten with empty values
  • Fixed workflow archive retry hardening, multi-worker collaboration support, and chat tree out-of-order parent nodes
  • Fixed knowledge retrieval failures not being surfaced to users, and End output variable name collisions in built-in templates

Authentication & Access Control

  • Fixed open redirect vulnerabilities in post-login and auth redirect flows
  • Fixed login redirects not staying on current deployment, auth prefix duplication, and change email not working
  • Fixed editor permission issues: editors can now view logs, no longer query billing subscriptions, and can no longer manage members
  • Fixed trace config changes not requiring edit access, and trial app access hardening for recommended apps

Models & Plugins

  • Fixed custom model cache not being cleared on deletion, model plugin debugging failures, and Xinference credential context handling
  • Fixed max token params not being disableable in follow-up model parameters
  • Fixed plugin provider cache stampedes, marketplace installation callbacks, and plugin permission settings

Web & UI

  • Fixed app creation from Learn Dify, node search field input, workspace avatar consistency, and navigation profile display
  • Fixed Streamdown fullscreen table actions, marketplace page header jitter, and install dialog accessibility
  • Fixed chat attachments scrolling out of view, HITL input save button visibility, and app card meta overflow
  • Fixed monitoring chart zero-value display, member invitation state handling, dark mode background, and Unicode characters in form field names
  • Fixed markdown file-preview link downloads, Notion sync empty state, and blog UTM attribution under CSP

Other

  • Fixed infinite loop in batch document deletion, invalid UTF-8 cache payloads, and swallowed document indexing errors
  • Fixed PostgreSQL 18 native uuidv7() support and ADB-PG 7.0 compatibility
  • Fixed CAN_REPLACE_LOGO defaulting to true, unsupported language errors in execute_code, and CLI --insecure flag not skipping TLS verification
Improvements

Performance

  • Eliminated N+1 queries in advanced-chat workflow run lists and TokenBufferMemory message file loading
  • Faster frontend startup via lazy-loaded Vite plugins and console contract shards
  • Reduced database load by caching setup status, compressing large plugin model objects in Redis with zstd, and retrieving published workflows via direct foreign key

Architecture & Code Quality

  • Migrated all console API endpoints to generated OpenAPI contracts with BaseModel, and frontend console contracts to generated routes and types
  • Propagated explicit database sessions across backend paths for consistency and testability
  • Replaced legacy app context providers with Jotai atoms across the frontend
  • Upgraded to TypeScript 7 and Vite+ toolchain, enforced strict ESLint rules, and disallowed new direct SQLAlchemy in controllers
Security Enhancements

This release includes several security hardening fixes, some of which were addressed after the 1.16.0-rc1 release:

  • SQL injection: Closed a SQL injection vulnerability and enhanced SQL query safety with metadata key validation
  • SSRF: Fixed an SSRF bypass via raw httpx.get in API tool schema fetch
  • Open redirects: Prevented open redirects in post-login and auth redirect flows
  • Sandbox enforcement: Chatflow API now checks workflow_id and sandbox plan; sandbox plan will not execute special workflows
  • Landlock protection: Agent HOME directory protected with Landlock; downgraded to v1 for broader kernel compatibility
  • CVE dependency upgrades: httplib2, setuptools, wandb; python-engineio, python-socketio; fickling, pillow, click

Environment Variable Changes
Added
VariableDefaultFileDescription
AGENT_BACKEND_BASE_URLhttp://localhost:5050api/.env.exampleBase URL for the Agent backend service
AGENT_BACKEND_STREAM_READ_TIMEOUT_SECONDS30api/.env.exampleStream read timeout for Agent backend
AGENT_BACKEND_STREAM_MAX_RECONNECTS3api/.env.exampleMax reconnection attempts for Agent backend streams
AGENT_BACKEND_RUN_TIMEOUT_SECONDS1200api/.env.exampleOverall run timeout for Agent backend
API_WEBSOCKET_WORKER_AMOUNT1docker/envs/core-services/shared.env.exampleNumber of WebSocket API workers
DIFY_AGENT_REDIS_URL(empty, derived from REDIS_PASSWORD)docker/envs/core-services/dify-agent.env.exampleRedis URL for Dify Agent
DIFY_AGENT_REDIS_PREFIXdify-agentdocker/envs/core-services/dify-agent.env.exampleRedis key prefix for Dify Agent
DIFY_AGENT_SHUTDOWN_GRACE_SECONDS30docker/envs/core-services/dify-agent.env.exampleGrace period before forced shutdown
DIFY_AGENT_RUN_RETENTION_SECONDS259200docker/envs/core-services/dify-agent.env.exampleRetention period for agent run records
DIFY_AGENT_PLUGIN_DAEMON_URL(empty, derived from PLUGIN_DAEMON_URL)docker/envs/core-services/dify-agent.env.examplePlugin daemon URL for Dify Agent
DIFY_AGENT_PLUGIN_DAEMON_API_KEY(empty, derived from PLUGIN_DAEMON_KEY)docker/envs/core-services/dify-agent.env.examplePlugin daemon API key for Dify Agent
DIFY_AGENT_INNER_API_URL(empty, derived from PLUGIN_DIFY_INNER_API_URL)docker/envs/core-services/dify-agent.env.exampleInner API URL for Dify Agent
DIFY_AGENT_INNER_API_KEY(empty)docker/envs/core-services/dify-agent.env.exampleInner API key (must match INNER_API_KEY_FOR_PLUGIN, not INNER_API_KEY)
DIFY_AGENT_SHELLCTL_ENTRYPOINThttp://local_sandbox:5004docker/envs/core-services/dify-agent.env.exampleShellctl entrypoint URL
DIFY_AGENT_SHELLCTL_AUTH_TOKEN(empty)docker/envs/core-services/dify-agent.env.exampleAuth token for shellctl
DIFY_AGENT_STUB_API_BASE_URLhttp://agent_backend:5050/agent-stubdocker/envs/core-services/dify-agent.env.exampleBase URL for Agent Stub API
DIFY_AGENT_SERVER_SECRET_KEY(dev default)docker/envs/core-services/dify-agent.env.exampleJWE encryption key for Agent Stub bearer tokens. Replace in production with python -c 'import secrets; print(secrets.token_urlsafe(32))'
DIFY_AGENT_SHELL_REDACT_PATTERNS(empty)docker/envs/core-services/dify-agent.env.examplePatterns for redacting shell output
SHELLCTL_ENABLE_PATH_ISOLATIONtruedocker/envs/core-services/local-sandbox.env.exampleEnable path isolation in shellctl
NEW_USER_DEFAULT_PLUGIN_IDS(empty)api/.env.exampleComma-separated plugin IDs to auto-install for new users
NEW_USER_DEFAULT_MODELS(empty)api/.env.exampleDefault models for new users
WORKFLOW_GENERATION_TIMEOUT_MS180000docker/envs/core-services/shared.env.exampleTimeout for AI workflow generation
WORKFLOW_GENERATOR_NODE_BUILDER_MAX_WORKERS6api/.env.exampleMax parallel workers for node config generation
REDIS_KEEPALIVEtrueapi/.env.exampleEnable Redis TCP keepalive
REDIS_KEEPALIVE_IDLE30api/.env.exampleRedis keepalive idle time (seconds)
REDIS_KEEPALIVE_INTERVAL10api/.env.exampleRedis keepalive interval (seconds)
REDIS_KEEPALIVE_COUNT10api/.env.exampleRedis keepalive probe count
NEXT_PUBLIC_ENABLE_AGENT_V2truedocker/envs/core-services/web.env.exampleEnable Agent App v2 (replaces ENABLE_AGENT_V2)
Removed
VariableOld DefaultFileNotes
ENABLE_AGENT_V2falsedocker/envs/core-services/web.env.exampleReplaced by NEXT_PUBLIC_ENABLE_AGENT_V2 (now defaults to true)
Modified
VariableOldNewFile
NEXT_PUBLIC_ENABLE_FEATURE_PREVIEWfalsetruedocker/envs/core-services/web.env.example
Docker Compose Changes
  • New services: agent_backend (langgenius/dify-agent-backend:1.16.0) and local_sandbox (langgenius/dify-agent-local-sandbox:1.16.0)
  • api and worker services now depend on agent_backend
  • API_WEBSOCKET_WORKER_AMOUNT is now configurable (was hardcoded to 1)
  • WORKFLOW_GENERATION_TIMEOUT_MS added to web service

Database Migrations

This release includes 9 new database migrations:

  • 2026_05_25_1143-97e2e1a644e8_add_workflow_version_to_workflow_agent_.py
  • 2026_06_12_1100-0b2f2c8a9d1e_add_agent_role.py
  • 2026_06_18_2300-b2515f9d4c2a_agent_drive_skill_metadata_refactor.py
  • 2026_06_24_1900-a6f1c9d2e8b4_add_input_placeholder_to_sites.py
  • 2026_06_24_2015-e4f5a6b7c8d9_add_agent_config_drafts.py
  • 2026_06_25_1100-a2b3c4d5e6f7_add_agent_backing_app_id.py
  • 2026_06_25_1500-7a1c2d9e4b60_add_workflow_run_archive_index_tables.py
  • 2026_06_26_1000-c3d4e5f6a7b8_add_agent_active_config_is_published.py

Run flask db upgrade after updating the code.


Upgrade Guide

[!IMPORTANT]

  • This release includes 8 new database migrations. Run database migrations as part of the upgrade.
  • 28 new environment variables, 1 removed, and 1 modified. Review the Environment Variable Changes section and update your .env accordingly.
  • Docker Compose configuration changed significantly: two new services (agent_backend, local_sandbox) were added. If you maintain a customized docker-compose.yaml, review the changes and re-apply local customizations carefully.
  • DIFY_AGENT_SERVER_SECRET_KEY ships with a development default. You must replace it in production with a securely generated key: python -c 'import secrets; print(secrets.token_urlsafe(32))'
  • ENABLE_AGENT_V2 has been renamed to NEXT_PUBLIC_ENABLE_AGENT_V2 and now defaults to true. Remove the old variable from your env files.
  • OpenAI GPT-5.6 users: If you have previously configured a custom OpenAI API key, verify your API type is set to Responses (not Chat Completions). See the Known Issues section above.
Docker Compose Deployments
  1. Back up your customized docker-compose YAML and env files.

    cd docker
    cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak
    cp .env .env.$(date +%s).bak 2>/dev/null || true
    
  2. Get the latest code from the release branch or tag.

    git fetch --tags
    git checkout 1.16.0
    
  3. Stop the service. Please execute in the docker directory.

    docker compose down
    
  4. Back up data.

    tar -cvf volumes-$(date +%s).tgz volumes
    
  5. Review the new environment variables (especially DIFY_AGENT_SERVER_SECRET_KEY) and update your .env file. Re-apply any local customizations.

  6. Upgrade services.

    docker compose up -d
    
Source Code Deployments
  1. Stop the API server, Worker, and Web frontend Server.

  2. Get the latest code from the release tag.

    git fetch --tags
    git checkout 1.16.0
    
  3. Update Python dependencies.

    cd api
    uv sync
    
  4. Run the migration script.

    uv run flask db upgrade
    
  5. Configure the new Agent backend service. Refer to the dify-agent section in docker/envs/core-services/dify-agent.env.example for required environment variables.

  6. Restart the API server, Worker, and Web frontend Server.


What's Changed
New Contributors

Full Changelog: https://github.com/langgenius/dify/compare/1.15.0...1.16.0

View originalPermalink
How 1.16.0 went
1.16.0-rc1Pre-release

v1.16.0-rc1

Added 5
  • Introduce Dify Agent (experimental) with a builder for creating agents through the UI by setting base prompts, uploading Skills and files, and connecting tools and knowledge
  • Provide an agent assistant that helps build Dify Agents by configuring Linux sandbox environments, installing packages, and creating new Skills and files through conversation
  • Add Dify Workflow integration for Dify Agent to use existing agents or create inline agents within workflows
  • Enable publishing Dify Agents as web apps with a familiar user experience powered by Dify Agent
  • Display app description on chat and text-generation app screens
Changed 3
  • Migrate response contract tooling to BaseModel
  • Simplify deployment access ownership
  • Align deployment detail state ownership
Fixed 5
  • Require edit access for trace config changes
  • Use correct article in difyctl prerelease warning
  • Decouple deployment access control dialog
  • Make marketplace URL builder SSR-safe
  • Isolate node selector keyboard events

Introducing Dify Agent (Experimental): A New Agent Experience in Dify

[!WARNING] You should provide Dify Agent services ⚠️only to trusted, non-malicious users⚠️.

As many of you know, the shell-based LLM agent paradigm has brought a major leap in agent capabilities and changed how we think about agents. Meanwhile, Skills provide a standardized way to package and distribute capabilities, making it easier to build powerful agents.

Today, we are experimentally launching Dify Agent. Like other leading agents, it runs in a Linux sandbox. This release includes:

  • A builder for creating Dify Agents

    • You can build Dify Agents through the UI: set a base prompt, upload Skills and files, and connect tools and knowledge from the Dify ecosystem.
    • We also provide an agent that helps you build Dify Agents. Through conversation, it can configure the Linux sandbox environment, install required packages, and create new Skills and files that your Dify Agent can use later.
  • Dify Workflow integration for Dify Agent

    • You can use an existing Dify Agent in a Dify Workflow, or temporarily create an inline Dify Agent. It will execute the task defined by the workflow node, generate the required output, and pass it to the next node.
  • A new web app experience

    • The Dify Agent you build can be published and used as a web app. While the user experience remains familiar, it is now powered by Dify Agent.

Docs: https://docs.dify.ai/en/self-host/use-dify/build/new-agent/overview

Limitations

Please note that in the current experimental release, all Dify Agents run in the same sandbox. This means:

  • Under normal circumstances, each Dify Agent configures its environment and executes tasks within its own workspace without interfering with others.
  • However, with simple instructions, any Dify Agent can read or interfere with the environments and data of other Dify Agents, including user data.

Strict isolation will be implemented in a future release. For now,

[!WARNING] You should provide Dify Agent services ⚠️only to trusted, non-malicious users⚠️.

Similarly, because Dify Agent is not fully ready yet, you may find that some features are not available for Dify Agent. For example, Dify Workflow DSL export is unavailable when the workflow contains nodes that reference Dify Agent.

Upgrade Guide

[!IMPORTANT]

  • This release includes new database migrations. Run them as part of the upgrade.
  • Environment variables changed. Review the Environment Variable Changes section and update your .env accordingly.
  • Docker Compose configuration files changed. If you maintain a customized docker-compose.yaml, review the changes and re-apply local customizations carefully.
Docker Compose Deployments
  1. Back up your customized docker-compose YAML and env files.
    cd docker
    cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak
    cp .env .env.$(date +%s).bak 2>/dev/null || true
    
  2. Get the latest code for the 1.16.0-rc1 release.
    git fetch --tags
    git checkout 1.16.0-rc1
    
  3. Stop the services (run inside the docker directory).
    docker compose down
    
  4. Back up data.
    tar -cvf volumes-$(date +%s).tgz volumes
    
  5. Review any env file changes and re-apply local customizations.
  6. Upgrade services.
    docker compose up -d
    
Source Code Deployments
  1. Stop the API server, Worker, and Web frontend server.
  2. Get the latest code for the 1.16.0-rc1 release.
    git fetch --tags
    git checkout 1.16.0-rc1
    
  3. Update Python dependencies.
    cd api
    uv sync
    
  4. Run database migrations.
    uv run flask db upgrade
    
  5. Restart the API server, Worker, and Web frontend server. To experiment with the new agent feature, you also need to start dify-agent and shellctl. Important: shellctl does not include built‑in authentication — for security, it is strongly recommended to run it inside a container.
What's Changed
New Contributors

Full Changelog: https://github.com/langgenius/dify/compare/1.15.0...1.16.0-rc1

View originalPermalink
How 1.16.0-rc1 went

1.15.0

Added 7
  • difyctl command-line client to run apps and workflows from the terminal without opening the web UI
  • Stream model reasoning into a dedicated live thinking panel in Chat Flow, Workflow, and CLI while keeping the final answer separate
  • Human-in-the-loop forms now support dropdown selects and file/multi-file uploads in addition to free text
  • Workflows can now use long-running generation models such as image or video generation via a polling mechanism
  • Extract images embedded inside Excel files during knowledge import
  • Set custom trace session id for Phoenix to align traces with your application's sessions
  • Plugin daemon auto-detects region at startup and automatically selects a nearby package mirror for faster installs
Changed 6
  • Redesigned landing and onboarding for an easier first-run experience
  • Improved go to anything palette with faster navigation and autofocused search inputs
  • Workflow editor now features collapsible panels for a cleaner interface
  • Notifications show consistent toasts that display long errors in full
  • Refreshed start node and smarter output node provide more control over workflow returns
  • Reduced workflow startup latency for Chatflow and lowered workflow termination latency
Fixed 6
  • One-click confirmation before removing an app prevents accidental deletes
  • Fixed Lindorm vector store errors caused by opensearch-py update
  • Fixed Tongyi credential compatibility
  • Invalidated credential cache after OAuth refresh
  • Improved workflow execution error handling and prevented legacy stop from interrupting GraphEngine runs
  • Fixed conversation variable description length validation to prevent varchar(255) truncation
Security 1
  • Fixed path traversal issue in plugin-daemon forwarding

Dify 1.15.0 Release Note

What's Changed
UX & UI Enhancements
  • Redesigned landing / onboarding for an easier first-run experience (#37433, #37844, #37800)
  • Faster navigation — improved "go to anything" palette and autofocused search inputs (#32130, #37175)
  • Safer deletes — one-click confirmation before removing an app (#37263)
  • Cleaner workflow editor with collapsible panels (#37276)
  • Clearer notifications — consistent toasts that show long errors in full (#37382, #37581)
  • More accessible — plugin permission hints, restored contact-us menu, skip-nav link, and keyboard focus polish (#37310, #37774, #37644)
New Features

difyctl — drive Dify from the command line (Docs)

  • difyctl is a command-line client for Dify: you can now run apps and workflows straight from your terminal, so personal agents, scripts, and CI pipelines can invoke Dify workflows without opening the web UI (#37036)
  • Install it on any platform (macOS, Linux, Windows) with a single command and no access token — binaries are published as public releases with checksum verification (#37036, #37454)
  • Pass scoped environment variables to CLI tool runs, and get clearer, consistent error messages (including friendly rate-limit handling) across both difyctl and the /openapi/v1 API (#37324, #37285, #37313, #36896)

See CoT in Workflow & Chatflow & CLI

  • Chat Flow / Workflow can now stream the model's reasoning into a dedicated live "thinking" panel while keeping the final answer clean and readable. The reasoning is preserved so it's still there after a page refresh, and the same reasoning is visible in CLI and workflow run previews (#37460, #37828)

Richer Human-in-the-Loop forms

  • When a workflow pauses to ask a person for input, the form can now include dropdown selects and file / multi-file uploads — not just free text — so people can answer with structured choices and attachments (#36322)

Support for slow, long-running models

  • Workflows can now use generation models that take a long time to respond (such as image or video generation) via a polling mechanism: the node patiently waits for the final result instead of timing out (#37462)

Knowledge from richer spreadsheets

  • Images embedded inside Excel files are now extracted during knowledge import, so spreadsheet content that relies on pictures (diagrams, screenshots, charts) is no longer lost (#37104)

Deeper observability

  • Set your own trace session id for Phoenix so traces line up with your application's sessions, and follow document-retrieval steps in traces to understand how RAG results were produced (#37056, #37283)

Workflow authoring polish

  • A refreshed start node makes it clearer how a workflow begins, and a smarter output node gives you more control over what a workflow returns (#37348, #35511)
  • Friendlier errors when an app or workspace ID is malformed, instead of confusing failures (#37212)

Faster plugin installs in certain regions

  • The plugin daemon now auto-detects your region at startup and, where network connectivity to PyPI is poor, automatically picks a nearby package mirror — so installing plugins is faster and more reliable without any manual setup. You can still pin a specific mirror if you prefer (dify-plugin-daemon#750)
Security Updates

This release fixes a path traversal issue in plugin-daemon forwarding (cve-2026-41948).

Bug Fixes
  • Hardened outbound HTTP with bounded timeouts for Firecrawl, Jina, Watercrawl, Nacos, and Marketplace requests, and hardened default SSRF proxy egress (#37638, #37637, #37515, #37444, #37424, #36332)
  • Fixed Lindorm vector store errors caused by the opensearch-py update (#37862) and Tongyi credential compatibility (#37942)
  • Invalidated credential cache after OAuth refresh (#37630)
  • Improved workflow execution error handling, eagerly validated conversations to prevent hanging, and prevented legacy stop from interrupting GraphEngine runs (#37919, #37224, #37129)
  • Resolved DetachedInstanceError via session management refactoring (#37847) and stabilized deployment state hydration (#37818)
  • Fixed conversation variable description length validation to prevent varchar(255) truncation (#33038) and stored Chinese as unicode so search works (#37446)
  • Numerous web UI and accessibility/focus-ring polish fixes
Improvements
  • Refactored session management across services to accept db.session explicitly via dependency injection for consistency (#37639, #37832, #37695, #37694, and related)
  • Modernized typing (removed redundant type: ignore/cast, converted ABCs to Protocol, replaced isinstance chains with match-case)
  • Reduced workflow startup latency for Chatflow (#36773) and lowered workflow termination latency so stopping a run takes effect faster (#37106, #37129)
  • Upgraded dependencies for CVE fixes (Bleach, PyJWT, starlette, storage group) (#37860, #37008, #37076, #37861)
Environment Variable Changes
Added
  • DEVICE_FLOW_APPROVE_RATE_LIMIT_PER_HOUR (docker/envs/core-services/shared.env.example)
  • DIFY_ENV_NACOS_CONNECT_TIMEOUT, DIFY_ENV_NACOS_REQUEST_TIMEOUT (api/.env.example)
  • ENABLE_LEARN_APP (api/.env.example)
  • ENABLE_OAUTH_BEARER (docker/envs/core-services/shared.env.example)
  • MILVUS_SECURE, MILVUS_SERVER_NAME, MILVUS_SERVER_PEM_PATH (docker/envs/vectorstores/milvus.env.example)
  • NEXT_PUBLIC_ENABLE_FEATURE_PREVIEW (docker/envs/core-services/web.env.example)
  • OPENAPI_CORS_ALLOW_ORIGINS, OPENAPI_ENABLED, OPENAPI_KNOWN_CLIENT_IDS, OPENAPI_RATE_LIMIT_PER_TOKEN (docker/envs/core-services/shared.env.example)
  • PLUGIN_MODEL_PROVIDERS_CACHE_TTL (api/.env.example)
  • SERVER_CONSOLE_API_URL (docker/.env.example)
  • SSRF_PROXY_ALLOW_PRIVATE_DOMAINS, SSRF_PROXY_ALLOW_PRIVATE_IPS, SSRF_SANDBOX_PROXY_HOST, SSRF_SANDBOX_PROXY_PORT (docker/envs/middleware.env.example)
  • PIP_MIRROR_AUTO_DETECT (plugin daemon; default true) — auto-select a nearby PyPI mirror at startup for regions with poor connectivity
  • PIP_MIRROR_URL (plugin daemon; default empty) — manually pin the PyPI mirror; takes precedence over auto-detection
Removed
  • SSRF_REVERSE_PROXY_PORT, SSRF_SANDBOX_HOST (docker/envs/middleware.env.example)
Modified
  • UV_CACHE_DIR: /tmp/.uv-cache/tmp/uv_cache
Docker Compose Files
  • docker/docker-compose.yaml (modified)
  • docker/docker-compose.middleware.yaml (modified)
  • docker/docker-compose.pytest.ports.yaml (added)
Database Migrations

This release includes new database migrations. Run flask db upgrade (or uv run --project api flask db upgrade) after updating the code. Notable schema additions:

  • OAuth access tokens (ENABLE_OAUTH_BEARER)
  • Credential visibility
  • Human Input upload tables and conversation linkage
  • Category-scoped plugin auto-upgrade strategy (add_plugin_auto_upgrade_category)
  • App stars, learn-dify / cloud-only flags on recommended apps
  • Normalized legacy end-user type
Upgrade Guide

[!IMPORTANT]

  • This release includes new database migrations. Run them as part of the upgrade.
  • Plugin auto-upgrade is now configured per plugin category. After running flask db upgrade, you MUST also run flask backfill-plugin-auto-upgrade to migrate existing tenants' auto-upgrade settings into the new category-scoped model. If you skip this step, plugin auto-upgrade settings users previously configured may stop taking effect.
  • Environment variables changed (19 added, 2 removed, 1 modified). Review the Environment Variable Changes section and update your .env accordingly.
  • Docker Compose configuration files changed. If you maintain a customized docker-compose.yaml, review the changes and re-apply local customizations carefully.
Docker Compose Deployments
  1. Back up your customized docker-compose YAML and env files.
    cd docker
    cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak
    cp .env .env.$(date +%s).bak 2>/dev/null || true
    
  2. Get the latest code for the 1.15.0 release.
    git fetch --tags
    git checkout 1.15.0
    
  3. Stop the services (run inside the docker directory).
    docker compose down
    
  4. Back up data.
    tar -cvf volumes-$(date +%s).tgz volumes
    
  5. Review any env file changes and re-apply local customizations.
  6. Upgrade services.
    docker compose up -d
    
  7. Backfill category-scoped plugin auto-upgrade strategies (required).
    docker compose exec api flask backfill-plugin-auto-upgrade
    
Source Code Deployments
  1. Stop the API server, Worker, and Web frontend server.
  2. Get the latest code for the 1.15.0 release.
    git fetch --tags
    git checkout 1.15.0
    
  3. Update Python dependencies.
    cd api
    uv sync
    
  4. Run database migrations.
    uv run flask db upgrade
    
  5. Backfill category-scoped plugin auto-upgrade strategies (required).
    uv run flask backfill-plugin-auto-upgrade
    
  6. Restart the API server, Worker, and Web frontend server.
Full Change List
New Contributors

Full Changelog: https://github.com/langgenius/dify/compare/1.14.2...1.15.0

View originalPermalink
How 1.15.0 went
1.14.2

v1.14.2 - Security fixes, agent groundwork, workflow reliability, and deployment updates

Changed 5
  • Filter model presets by supported parameters
  • Improve API extension dialog controls
  • Allow LLM nodes to access retrieved knowledge files
  • Handle credential fetch failures in RAG pipelines more gracefully
  • Track app creation source and template ID
Fixed 12
  • Restore tracing after HITL workflow resume
  • Improve workflow run callback tracking
  • Reduce message-update database roundtrips
  • Fix memory fetches outside Flask context
  • Close base64 file lookup sessions correctly
  • Fix loading behavior when no model is selected
Security 3
  • Strengthened tenant isolation for app trace-config endpoints and FilePreview text extraction
  • Restrict default builtin tool credential updates to workspace admins and owners
  • Clean stale tenant tool credentials during reset-encrypt-key-pair
🚀 What's New in v1.14.2?

v1.14.2 is a patch release focused on security hardening, workflow and knowledge reliability, observability fixes, agent groundwork, and deployment/runtime tuning after v1.14.1.

🔐 Security and administration
  • Tenant-scoped sensitive endpoints — strengthened tenant isolation for app trace-config endpoints and FilePreview text extraction. Thanks @xr843 in #35793 and #35797.
  • Tool credential safety — restricted default builtin tool credential updates to workspace admins and owners, and cleaned stale tenant tool credentials during reset-encrypt-key-pair. Thanks @NeatGuyCoding and @xr843 in #36264 and #35843.
🧩 Workflow, HITL, and app runtime
  • Workflow execution reliability — restored tracing after HITL workflow resume, improved workflow run callback tracking, reduced message-update database roundtrips, fixed memory fetches outside Flask context, and closed base64 file lookup sessions correctly. Thanks @Blackoutta, @CodingOnStar, @wylswz, @hjlarry, and @escape0707 in #36064, #36149, #36213, #36253, and #36308.
  • Workflow and model selection polish — fixed loading behavior when no model is selected, filtered model presets by supported parameters, and improved API extension dialog controls. Thanks @iamjoel and @lyzno1 in #36342, #36339, and #36323.
📚 Data, RAG, and knowledge
  • Knowledge-base stability — fixed knowledge hit-testing rendering, empty knowledge creation, recommended app category ordering, and null handling in recommended app detail retrieval. Thanks @FFXN, @laipz8200, @hjlarry, and @EvanYao826 in #36106, #36336, #36161, and #36153.
  • RAG and document processing — allowed LLM nodes to access retrieved knowledge files, regenerated document summaries after API updates, fixed pipeline template rendering, and handled credential fetch failures in RAG pipelines more gracefully. Thanks @laipz8200, @EvanYao826, @FFXN, and @linw1995 in #36175, #36035, #36168, and #36165.
🎨 Web UI and product experience
  • App creation and onboarding — tracked app creation source and template ID, initialized user timezone and language from the browser, and fixed WebApp icon and description display. Thanks @CodingOnStar, @lyzno1, and @JzoNgKVO in #36369, #36170, #36206, and #36209.
  • Annotation and datasets UI — allowed annotation reply score thresholds below 0.8, redirected unauthorized knowledge editors back to datasets, and fixed tag rename without type payload. Thanks @JzoNgKVO, @iamjoel, and @lyzno1 in #36337, #36073, and #36182.
  • UI platform migration and polish — added Checkbox and CheckboxGroup primitives, migrated more controls to @langgenius/dify-ui, improved dialog overflow layouts, and refined account avatar and install-flow interactions. Thanks @lyzno1 and @CodingOnStar in #36271, #36295, #36255, #36302, #36111, #36199, and #36210.
🔎 Observability and tracing
  • Tracing reliability — isolated Langfuse v3 SDK tracer providers to prevent cross-task interference and added Phoenix parent trace fallback behavior. Thanks @GareArc and @Blackoutta in #36136 and #36290.
⚙️ Deployment, dependencies, and developer experience
  • Deployment tuning — upgraded plugin-daemon to 0.6.1, increased the default GraphEngine minimum worker count, and refreshed Docker README references. Thanks @laipz8200, @kenwoodjw, and @RiskeyL in #36312, #35650, and #36303.
  • Backend and CI maintenance — moved static analysis toward Pyrefly, upgraded Graphon to 0.4.0, added hotfix cherry-pick provenance checks, and improved generated contract workflows. Thanks @cqjjjzr, @laipz8200, and @hyoban in #36154, #36124, #36340, and #36286.
  • Dependency updates — refreshed backend and agent dependencies including authlib, ujson, langsmith, and urllib3. Thanks @dependabot[bot] in #36112, #36121, #36142, and #36160.
Upgrade Guide

[!IMPORTANT]

  • This release includes a new database migration for configurable Explore app categories. Run database migrations as part of the upgrade.
  • Docker Compose environment variables are now split into categorized files under docker/envs/**. If you maintain a customized docker-compose.yaml or .env, review the new layout and re-apply local customizations carefully.
  • For self-hosted deployments, explicitly configured SECRET_KEY values continue to be respected. If SECRET_KEY is empty, Dify now generates and persists a runtime key automatically.
Docker Compose Deployments
  1. Back up your customized docker-compose YAML and env files.

    cd docker
    cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak
    cp .env .env.$(date +%s).bak 2>/dev/null || true
    
  2. Get the latest code from the release branch or tag.

    git fetch --tags
    git checkout 1.14.2
    
  3. Stop the service. Please execute in the docker directory.

    docker compose down
    
  4. Back up data.

    tar -cvf volumes-$(date +%s).tgz volumes
    
  5. Review the new docker/envs/** env file layout and re-apply any local customizations.

  6. Upgrade services.

    docker compose up -d
    
Source Code Deployments
  1. Stop the API server, Worker, and Web frontend Server.

  2. Get the latest code from the release tag.

    git fetch --tags
    git checkout 1.14.2
    
  3. Update Python dependencies.

    cd api
    uv sync
    
  4. Run the migration script.

    uv run flask db upgrade
    
  5. Restart the API server, Worker, and Web frontend Server.


What's Changed
New Contributors

Full Changelog: https://github.com/langgenius/dify/compare/1.14.1...1.14.2

View originalPermalink
How 1.14.2 went
1.14.1

v1.14.1 - Security hardening, workflow stability, and cleaner self-hosted deployments

Added 2
  • Expose selected action values for Human-in-the-loop flows
  • Add editable class labels to Question Classifier
Changed 1
  • Use doc_id as the deduplication key across all RAG providers, not only Dify-hosted providers
Fixed 15
  • Restore workflow-version loading through the backend API
  • Fix online-user polling for large app lists
  • Prevent preview resize observer loops
  • Avoid schema model collisions in trial workflows
  • Fix variable reference picker behavior for sub-variables
  • Fix workflow node title overflow
Security 4
  • Docker deployments no longer rely on a public default SECRET_KEY; when left empty, the API generates and persists a runtime key through the configured storage backend
  • Protect /threads and /db-pool-stat endpoints from unauthenticated access to internal runtime and database-pool details
  • Fix IDOR issue in GET /account/avatar endpoint and scope builtin-tool default-credential cleanup to the current tenant
  • Upgrade LiteLLM for CVE-2026-42208 and refresh backend dependencies including urllib3, gunicorn, gitpython, mako, Google SDK packages, storage libraries, and OpenTelemetry exporter packages
🚀 What's New in v1.14.1?

v1.14.1 is a patch release focused on security hardening, workflow and knowledge-base stability, deployment cleanup, and continued UI platform migration after v1.14.0.

🔐 Security
  • Self-hosted SECRET_KEY hardening — Docker deployments no longer rely on a public default key. When SECRET_KEY is left empty, the API generates and persists a runtime key through the configured storage backend, while explicitly configured keys continue to work as before. Thanks @laipz8200 in #36049.
  • Internal metrics endpoint protection/threads and /db-pool-stat are hardened to avoid unauthenticated exposure of internal runtime and database-pool details. Thanks @orbisai0security in #35665.
  • Account and tool isolation — fixed an IDOR issue in GET /account/avatar and scoped builtin-tool default-credential cleanup to the current tenant. Thanks @NeatGuyCoding and @GareArc in #35771 and #35887.
  • Dependency security — upgraded LiteLLM for CVE-2026-42208 and refreshed several backend dependencies, including urllib3, gunicorn, gitpython, mako, Google SDK packages, storage libraries, and OpenTelemetry exporter packages. Thanks @crazywoola in #35953, #35779, #35791, #35863, #35864, #35958, #36011, #36012, #36013, #36017, and #36050.
🧩 Workflow, HITL, and app runtime
  • Workflow stability — restored workflow-version loading through the backend API, fixed online-user polling for large app lists, prevented preview resize observer loops, and avoided schema model collisions in trial workflows. Thanks @hjlarry and @lyzno1 in #35817, #35786, #35936, and #36061.
  • Workflow authoring polish — fixed variable reference picker behavior for sub-variables, workflow node title overflow, condition operator popovers, workflow checklist semantics, and KB metadata filter field selection. Thanks @iamjoel, @hjlarry, @lyzno1, and @shawny011717 in #35732, #35740, #35828, #36006, and #34149.
  • Workflow execution correctness — preserved single-run input variable types, fixed structured_output_enabled validation, fixed file-preview URL handling in node output display, and unblocked plugin model selector tools on v1.14.0 workflows. Thanks @Jingyi-Dify, @fatelei, @shawny011717, and @sawyer-shi in #35710, #35747, #34150, and #35794.
  • Human input — exposed selected action values for Human-in-the-loop flows. Thanks @Blackoutta in #35451.
  • Question Classifier — added editable class labels. Thanks @Blackoutta in #35430.
📚 Data, RAG, and knowledge
  • Knowledge-base image rendering — fixed image rendering failures in the knowledge base. Thanks @FFXN in #35914.
  • Document indexing — skip empty documents before vector embedding and validate missing text indexing techniques. Thanks @princepal9120 and @juyua9 in #35763 and #35941.
  • RAG deduplication — use doc_id as the deduplication key across providers, not only Dify-hosted providers. Thanks @ki3nd in #35759.
  • Dataset metadata filters — preserve dataset metadata filters in API paths and fix KB metadata filter field selection. Thanks @princepal9120 and @shawny011717 in #35700 and #34149.
  • Upload filename handling — clean upload filenames parsed from URLs and avoid doubled dots when standardizing datasource file extensions. Thanks @jonathanchang31 and @Beandon13 in #35706 and #35808.
🎨 Web UI and design system
  • Dify UI migration — continued migration from legacy overlays, tooltips, drawers, selects, tags, and searchable pickers to @langgenius/dify-ui primitives, including new Drawer, Tabs, ToggleGroup, Autocomplete, and Combobox support. Thanks @lyzno1 and @CodingOnStar in #35675, #35715, #35720, #35721, #35774, #35785, #35787, #35792, #35825, #35868, #35881, #35892, #35896, #35917, #35961, #35962, #35963, #35965, #35976, #35982, and #36066.
  • Accessibility and semantics — improved web accessibility, removed unnecessary data-testid usage, normalized select value handling, improved help glyph semantics, and refined premium badge button semantics. Thanks @lyzno1 in #35999, #36007, #36008, and #36026.
  • Overlay and navigation reliability — restored app navigation create submenu interaction, fixed transfer workspace dropdown display, normalized overlay control, aligned Tailwind v4 CSS migration, forwarded CSP nonce to the theme script, and aligned tag filter dropdown icons. Thanks @hjlarry, @iamjoel, and @lyzno1 in #35681, #35876, #35832, #35829, #35960, and #36041.
  • Publisher and launch flows — improved publisher confirmation dialog handling and fixed mismatched copy in prefilled WebApp launch descriptions. Thanks @CodingOnStar and @iamjoel in #35701 and #35964.
  • Audio and transcript behavior — explicitly resume AudioContext and play audio on first TTS load, and pass end_user.external_user_id correctly to transcript ASR. Thanks @ki3nd in #35901 and #35898.
🔎 Observability and tracing
  • Phoenix tracing — improved Phoenix workflow tracing. Thanks @Blackoutta in #35605.
  • LangSmith tracing — fixed trace_id mismatch in chatflow workflow traces. Thanks @ki3nd in #35979.
⚙️ Deployment and operations
  • Docker env layout — split Docker Compose environment variables into organized docker/envs/** files and updated generation, cleanup, and middleware setup flows. Thanks @macatizm and @laipz8200 in #31586 and #35938.
  • Middleware setup — updated local setup and cleanup flows for the new middleware env template location. Thanks @laipz8200 in #35946.
  • Database pool behavior — added SQLALCHEMY_POOL_RESET_ON_RETURN configuration support. Thanks @fatelei in #31156.
  • WebSocket service — separated the WebSocket service for cleaner deployment boundaries. Thanks @hjlarry in #35981.
  • Explore categories — Explore recommended apps now support multiple configurable categories and adjustable category order. Thanks @hjlarry in #35723.
  • TiDB endpoint updates — fixed endpoint updates when TiDB status changes. Thanks @zyssyz123 in #35854.
Upgrade Guide
Important notes
  • This release includes a new database migration for configurable Explore app categories. Run database migrations as part of the upgrade.
  • Docker Compose environment variables are now split into categorized files under docker/envs/**. If you maintain a customized docker-compose.yaml or .env, review the new layout and re-apply local customizations carefully.
  • For self-hosted deployments, explicitly configured SECRET_KEY values continue to be respected. If SECRET_KEY is empty, Dify now generates and persists a runtime key automatically.
Docker Compose Deployments
  1. Back up your customized docker-compose YAML and env files.

    cd docker
    cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak
    cp .env .env.$(date +%s).bak 2>/dev/null || true
    
  2. Get the latest code from the release branch or tag.

    git fetch --tags
    git checkout 1.14.1
    
  3. Stop the service. Please execute in the docker directory.

    docker compose down
    
  4. Back up data.

    tar -cvf volumes-$(date +%s).tgz volumes
    
  5. Review the new docker/envs/** env file layout and re-apply any local customizations.

  6. Upgrade services.

    docker compose up -d
    
Source Code Deployments
  1. Stop the API server, Worker, and Web frontend Server.

  2. Get the latest code from the release tag.

    git fetch --tags
    git checkout 1.14.1
    
  3. Update Python dependencies.

    cd api
    uv sync
    
  4. Run the migration script.

    uv run flask db upgrade
    
  5. Restart the API server, Worker, and Web frontend Server.


What's Changed
New Contributors

Full Changelog: https://github.com/langgenius/dify/compare/1.14.0...1.14.1

View originalPermalink
How 1.14.1 went
1.14.0

v1.14.0

Added 10
  • Collaboration allows workspace members to edit the same workflow together with synced graph updates, online presence, and shared visibility into who is working where
  • Service API for human-in-the-loop (HITL) provides programmatic support for human-in-the-loop flows
  • MCP tool metadata refreshes after updates to keep the UI in sync
  • Goto Anything command includes recent items, /go command, and deeper app sub-sections
  • Prompt editor supports slash-triggered variable filtering and keyboard up/down navigation in variable lists
  • Langfuse integration includes optional time-to-first-token (TTFT) reporting
Changed 10
  • MCP server URL double /v1 path issue that could break OAuth and authorization fixed
  • MCP OAuth discovery now handles malformed JSON safely
  • MCP schema publishing maps checkbox and json_object types correctly
  • Plugin auto-upgrade strategy persistence, local installer and file-input behavior improved
  • Celery default worker concurrency raised to 4
  • PostgreSQL default max connections increased to 200
Fixed 1
  • Change-email flow implements stricter phase-bound token handling
Security 1
  • IDOR hardening through tenant validation on data-source binding and dataset and API ownership checks
🚀 What's New in v1.14.0?
Collaboration

Collaboration allows workspace members to edit the same workflow together, with synced graph updates, online presence, and shared visibility into who is working where.

On self-hosted deployments, collaboration is turned off by default. Enable it by setting:

ENABLE_COLLABORATION_MODE = true
SERVER_WORKER_CLASS = geventwebsocket.gunicorn.workers.GeventWebSocketWorker
NEXT_PUBLIC_SOCKET_URL = your deployment’s WebSocket URL (e.g., wss://dify.example.com)

For more details, see Full Documentation

Human-in-the-loop (HITL)
  • Service API for HITL — programmatic support for human-in-the-loop flows alongside existing console behavior.
MCP and plugins
  • MCP tool metadata — refresh after updates so the UI stays in sync.
  • MCP server URL — fix double /v1 that could break OAuth and authorization (404).
  • MCP OAuth discovery — handle malformed JSON safely.
  • MCP schema publishing — map checkbox and json_object types correctly.
  • Plugins — auto-upgrade strategy persistence, local installer and file-input behavior, tenant scoping for inner API end-user lookup.
Marketplace and OAuth
  • Marketplace and OAuth — targeted fixes for marketplace flows and OAuth sign-in (including edge cases such as null email on GitHub OAuth).
UI kit and front-end platform
  • @langgenius/dify-ui — shared primitives (for example PreviewCard, Meter), design tokens, and broad migration from ad-hoc web/base/ui toward the package.
  • Accessibility — date and time pickers, auto-update strategy picker, scrollbars in plugin and model selectors, and related polish.
  • Goto Anything — recent items, /go command, deeper app sub-sections; fix for Cmd+K (removed problematic dynamic import).
  • Prompt editor — slash-triggered variable filtering; keyboard up/down in variable lists.
  • Follow-up questions — improved settings and token limits for suggested questions.
  • Modals — ApiKey, provider config, and others refactored toward a shared Dialog pattern with tests.
Observability and analytics
  • Langfuse — optional time-to-first-token (TTFT) reporting.
  • Explore — banner impression tracking; app preview event tracking on cards.
Billing and quotas
  • Quota v3 integration in the product stack.
  • Billing UI — Meter-based usage presentation; more resilient cleanup when billing APIs fail.
  • File uploader — billing-aware behavior and copy updates.
Data, RAG, and knowledge
  • Summary index and Weaviate — compatibility fixes when using the summary index with Weaviate.
  • Vector projection — include is_summary and original_chunk_id in default projection where relevant.
  • External and bound datasets — stronger tenant checks on knowledge APIs.
Infrastructure and operations
  • Docker Composehealthchecks for api, worker, and worker_beat; template and env example updates (for example S3 address style).
  • Celery — default worker concurrency raised to 4; missing queue fix.
  • PostgreSQL — higher default max connections (200) for the updated app DB path.
  • Redisconfigurable key prefix; retry logic for Redis operations.
  • TiDB — endpoint support and related auth binding migration (Qdrant endpoint on TiDB auth bindings).
  • Markdown — optional ALLOW_INLINE_STYLES environment variable to allow inline CSS in rendered Markdown when needed.
Security
  • Change-email flow — stricter phase-bound token handling (GHSA-4q3w-q5mc-45rq).
  • IDOR hardening — tenant validation on data-source binding; dataset and API ownership checks where gaps were found.
Performance
  • Optimized performance of graph initialization.
API and platform internals
  • Graphon — upgrade to standalone Graphon 0.2.2 (replacing in-tree dify_graph naming and packaging).
  • OpenAPI — script to generate OpenAPI v2 JSON and documentation pointer.
  • Deprecation — some legacy console APIs marked deprecated in favor of newer patterns.
  • Large SQLAlchemy 2.0 select() migration, Pydantic BaseModel for many console and service responses, and testcontainers-based tests for stability.
What's Changed

View originalPermalink
How 1.14.0 went
1.13.3

v1.13.3

Added 1
  • Add variable-reference support for model parameters in LLM, Question Classifier, and Variable Extractor nodes
Fixed 9
  • Fix StreamsBroadcastChannel replay and concurrency issues to keep frontend/backend event delivery stable
  • Fix pasted nodes retaining Loop/Iteration metadata
  • Prevent HumanInput nodes from being pasted into invalid containers
  • Restore prompt message transformation logic
  • Correct max_retries=0 handling for executor-driven HTTP Request execution
  • Preserve citation metadata in web responses
🚀 What's New in v1.13.3?

Our latest patch release, v1.13.3, focuses on stability and correctness across workflow execution, streaming, and knowledge retrieval. Here's a quick look at the most important updates:

🎬 New Features
  • Workflow Configuration: Added variable-reference support for model parameters in LLM, Question Classifier, and Variable Extractor nodes by @scdeng in #33082.
🛠️ Bug Fixes
  • Streaming Reliability: Fixed StreamsBroadcastChannel replay and concurrency issues to keep frontend/backend event delivery stable by @QuantumGhost in #34030 and #34061.
  • Workflow Editor Behavior: Fixed pasted nodes retaining Loop/Iteration metadata and prevented HumanInput nodes from being pasted into invalid containers by @majiayu000 and @hjlarry in #29983 and #34077.
  • Runtime Execution: Restored prompt message transformation logic and corrected max_retries=0 handling for executor-driven HTTP Request execution by @QuantumGhost, @fatelei, and @kurokobo in #33666, #33619, and #33688.
  • Knowledge Retrieval: Preserved citation metadata in web responses, fixed crashes when dataset icon metadata is missing, corrected hit-count query filtering, and restored indexed document chunk previews by @Theysua, @copilot-swe-agent, and @fatelei in #33778, #33907, #33757, and #33942.
🔧 Under the Hood
  • Patch Stability: This release prioritizes targeted fixes for workflow runtime behavior, real-time streaming, and knowledge base usability for teams upgrading from v1.13.2.

Upgrade Guide

[!IMPORTANT] The Sandbox image used by Dify v1.13.3 expects the following Python and Node.js paths. If you upgraded from an older Docker Compose deployment and already have docker/volumes/sandbox/conf/config.yaml, update it on the host machine:

python_path: /opt/python/bin/python3
nodejs_path: /usr/local/bin/node

Do not edit the file inside the sandbox container. The directory docker/volumes/sandbox/conf is mounted into the container as /conf, so host changes persist after container restarts.

Docker Compose Deployments
  1. Back up your customized docker-compose YAML file (optional)

    cd docker
    cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak
    
  2. Get the latest code from the main branch

    git checkout main
    git pull origin main
    
  3. Stop the service. Please execute in the docker directory

    docker compose down
    
  4. Back up data

    tar -cvf volumes-$(date +%s).tgz volumes
    
  5. Upgrade services

    docker compose up -d
    
Source Code Deployments
  1. Stop the API server, Worker, and Web frontend Server.

  2. Get the latest code from the release branch:

    git checkout 1.13.3
    
  3. Update Python dependencies:

    cd api
    uv sync
    
  4. Then, let's run the migration script:

    uv run flask db upgrade
    
  5. Finally, run the API server, Worker, and Web frontend Server again.


What's Changed
New Contributors

Full Changelog: https://github.com/langgenius/dify/compare/1.13.2...1.13.3

View originalPermalink
How 1.13.3 went
1.13.2

v1.13.2

Fixed 5
  • Fix severe regression in prompt message transformation that caused multiple LLM-plugin invocation failures across LLM-related nodes
  • Fix Knowledge Retrieval node execution failures caused by incompatible enum values
  • Fix improper Weaviate client cleanup by removing the __del__ method
  • Fix max_retries being hardcoded
  • Make CreatorUserRole accept both end-user and end_user formats

This patch release fixes several critical regressions and stability issues introduced in v1.13.1, including:

  • a severe regression in prompt message transformation that caused multiple LLM-plugin invocation failures across LLM-related nodes, including LLM and Question Classifier.
  • Knowledge Retrieval node execution failures caused by incompatible enum values
  • improper Weaviate client cleanup

Upgrade Guide

[!IMPORTANT] If you use custom CELERY_QUEUES, make sure workflow_based_app_execution is included.
If ENABLE_API_TOKEN_LAST_USED_UPDATE_TASK=true, also include api_token.

For background and details, see ⚠️ Important Upgrade Note and 🔧 Operational Note above.

Docker Compose Deployments
  1. Back up your customized docker-compose YAML file (optional)

    cd docker
    cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak
    
  2. Get the latest code from the main branch

    git checkout main
    git pull origin main
    
  3. Stop the service. Please execute in the docker directory

    docker compose down
    
  4. Back up data

    tar -cvf volumes-$(date +%s).tgz volumes
    
  5. Upgrade services

    docker compose up -d
    

[!NOTE]

If you encounter errors like below

2025/11/26 11:37:57 /app/internal/db/pg/pg.go:30
[error] failed to initialize database, got error failed to connect to `host=db_postgres user=postgres database=dify_plugin`: hostname resolving error (lookup db_postgres on 127.0.0.11:53: server misbehaving)

2025/11/26 11:37:57 /app/internal/db/pg/pg.go:34
[error] failed to initialize database, got error failed to connect to `host=db_postgres user=postgres database=postgres`: hostname > resolving error (lookup db_postgres on 127.0.0.11:53: server misbehaving)
2025/11/26 11:37:57 init.go:99: [PANIC]failed to init dify plugin db: failed to connect to `host=db_postgres user=postgres database=postgres`: hostname resolving error (lookup db_postgres on 127.0.0.11:53: server misbehaving)
panic: [PANIC]failed to init dify plugin db: failed to connect to `host=db_postgres user=postgres database=postgres`: hostname resolving error (lookup db_postgres on 127.0.0.11:53: server misbehaving)

Please use the following command instead. For details, please read this https://github.com/langgenius/dify/issues/28706

docker compose --profile postgresql up -d
Source Code Deployments
  1. Stop the API server, Worker, and Web frontend Server.

  2. Get the latest code from the release branch:

    git checkout 1.13.2
    
  3. Update Python dependencies:

    cd api
    uv sync
    
  4. Then, let's run the migration script:

    uv run flask db upgrade
    
  5. Finally, run the API server, Worker, and Web frontend Server again.


What's Changed
  • chore: bump version to 1.13.2 (#33681) by @QuantumGhost
  • fix: fix max_retries is hardcode (#33619) by #32715 @fatelei
  • fix(api): Preserving the content transform logic in fetch_prompt_messages (#33666) by @QuantumGhost
  • feat: remove weaviate client del method (#33593) by @fatelei
  • fix(api): make CreatorUserRole accept both end-user and end_user (#33638) by @fatelei

Full Changelog: https://github.com/langgenius/dify/compare/1.13.1...1.13.2

View originalPermalink
How 1.13.2 went
1.13.1

v1.13.1

Added 10
  • Add Hologres as a supported backend option for vector retrieval and full-text search
  • Add Service API endpoints for dataset document downloads including batch ZIP download and signed URL download
  • Add edge context menu support in workflow canvas including direct edge deletion
  • Add configurable send-key behavior for embedded chat input
  • Add file payloads in message-end stream responses
  • Add export-app-messages CLI command to export application messages and related feedback to JSONL.GZ
Changed 4
  • HITL email content now uses markdown rendering before delivery
  • Draft variables are now user-scoped instead of app-scoped
  • Preserve existing connections when changing node types in workflow editing
  • Upgrade OpenTelemetry dependencies to resolve context-detach errors
Fixed 7
  • Fix workflow_runs.started_at being overwritten on resume
  • Fix metadata batch-edit silent failures caused by split-transaction edge cases
  • Fix metadata filter extraction issues in knowledge retrieval
  • Restore citation visibility in advanced chat applications
  • Fix conversation variable reset behavior after HITL nodes
  • Fix page crash in knowledge-retrieval node configuration flow
  • Fix chat assistant blocking response-mode behavior
Removed 1
  • Remove GPT-4-specific hardcoded behavior from default model selection logic
Deprecated 1
  • Deprecate PUBSUB_* event-bus settings in favor of EVENT_BUS_* settings
Security 6
  • Prevent SQL injection risks in vector-store query paths by switching to parameterized SQL
  • Sanitize subject and body content in HITL email delivery
  • Strip CR/LF from email subjects to prevent SMTP header-injection vectors
  • Enforce ownership checks for conversation deletion APIs
  • Clear stale provider credentials during plugin uninstall
  • Improve enterprise API error handling and license-enforcement behavior for invalid or expired license states
🚀 Major Functional Changes
Data platform and dataset operations
  • Added Hologres as a supported backend option for both vector retrieval and full-text search.
  • Added Service API endpoints for dataset document downloads:
    • Batch ZIP download for selected documents.
    • Signed URL download for single-document original files.
Workflow and chat experience improvements
  • Breaking change: HITL email content now uses markdown rendering before delivery. Existing email templates that relied on raw/plain behavior may render differently after upgrade.
  • Draft variables are now user-scoped instead of app-scoped. Historical draft variables will not be available after upgrading.
  • Added edge context menu support in workflow canvas, including direct edge deletion.
  • Preserved existing connections when changing node types in workflow editing.
  • Added configurable send-key behavior (Enter vs Shift+Enter) for embedded chat input.
  • Added file payloads in message-end stream responses.
  • Removed GPT-4-specific hardcoded behavior from default model selection logic.
  • Added a new export-app-messages CLI command to export application messages and related feedback to JSONL.GZ (local or cloud storage).
🔐 Security Updates
  • Prevented SQL injection risks in vector-store query paths by switching to parameterized SQL in affected implementations.
  • Hardened HITL email delivery:
    • Sanitize subject and body content.
    • Strip CR/LF from subjects to prevent SMTP header-injection vectors.
  • Enforced ownership checks for conversation deletion APIs.
  • Cleared stale provider credentials during plugin uninstall to reduce residual credential risk.
  • Improved enterprise API error handling and license-enforcement behavior for invalid/expired license states.
🏗️ Configuration, Architecture, and Deployment Updates
Deployment and operations
  • Added a dedicated Celery queue: dataset_summary for LLM-heavy summary generation tasks.
    • Ensure workers subscribe to this queue to avoid summary-job backlog.
  • Added telemetry metrics for retention cleanup tasks (messages/workflow runs), plus flush behavior for short-lived command jobs.
Configuration changes
  • Added REDIS_MAX_CONNECTIONS.
  • Deprecated PUBSUB_* event-bus settings in favor of EVENT_BUS_* settings.
🛠 Other Noteworthy Changes
  • Fixed workflow_runs.started_at being overwritten on resume.
  • Fixed metadata batch-edit silent failures caused by split-transaction edge cases.
  • Fixed metadata filter extraction issues in knowledge retrieval ({{...}} conditions).
  • Restored citation visibility in advanced chat applications.
  • Fixed conversation variable reset behavior after HITL nodes.
  • Fixed a page crash in knowledge-retrieval node configuration flow.
  • Fixed chat assistant blocking response-mode behavior.
  • Added doc_type handling in Weaviate vector attributes for better compatibility.
  • Upgraded OpenTelemetry dependencies to resolve context-detach errors.

Upgrade Guide

[!IMPORTANT] If you use custom CELERY_QUEUES, make sure workflow_based_app_execution is included.
If ENABLE_API_TOKEN_LAST_USED_UPDATE_TASK=true, also include api_token.

For background and details, see ⚠️ Important Upgrade Note and 🔧 Operational Note above.

Docker Compose Deployments
  1. Back up your customized docker-compose YAML file (optional)

    cd docker
    cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak
    
  2. Get the latest code from the main branch

    git checkout main
    git pull origin main
    
  3. Stop the service. Please execute in the docker directory

    docker compose down
    
  4. Back up data

    tar -cvf volumes-$(date +%s).tgz volumes
    
  5. Upgrade services

    docker compose up -d
    

[!NOTE]

If you encounter errors like below

2025/11/26 11:37:57 /app/internal/db/pg/pg.go:30
[error] failed to initialize database, got error failed to connect to `host=db_postgres user=postgres database=dify_plugin`: hostname resolving error (lookup db_postgres on 127.0.0.11:53: server misbehaving)

2025/11/26 11:37:57 /app/internal/db/pg/pg.go:34
[error] failed to initialize database, got error failed to connect to `host=db_postgres user=postgres database=postgres`: hostname > resolving error (lookup db_postgres on 127.0.0.11:53: server misbehaving)
2025/11/26 11:37:57 init.go:99: [PANIC]failed to init dify plugin db: failed to connect to `host=db_postgres user=postgres database=postgres`: hostname resolving error (lookup db_postgres on 127.0.0.11:53: server misbehaving)
panic: [PANIC]failed to init dify plugin db: failed to connect to `host=db_postgres user=postgres database=postgres`: hostname resolving error (lookup db_postgres on 127.0.0.11:53: server misbehaving)

Please use the following command instead. For details, please read this https://github.com/langgenius/dify/issues/28706

docker compose --profile postgresql up -d
Source Code Deployments
  1. Stop the API server, Worker, and Web frontend Server.

  2. Get the latest code from the release branch:

    git checkout 1.13.1
    
  3. Update Python dependencies:

    cd api
    uv sync
    
  4. Then, let's run the migration script:

    uv run flask db upgrade
    
  5. Finally, run the API server, Worker, and Web frontend Server again.


What's Changed
New Contributors

Full Changelog: https://github.com/langgenius/dify/compare/1.13.0...1.13.1

View originalPermalink
How 1.13.1 went
View all

Discussion