Skip to content

Releases: langgenius/dify

1.13.0 - Human-in-the-Loop and Workflow Execution Upgrades

11 Feb 09:24
c730fec

Choose a tag to compare

🚀 New Features

Human-in-the-Loop (HITL)

We are introducing the Human Input node, a major update that transforms how AI and humans
collaborate within Dify workflows.

Background

Previously, workflows were binary: either fully automated or fully manual. This created a "trust gap" in
high-stakes scenarios where AI speed is needed but human judgment is essential. With HITL, we are making h
uman oversight a native part of the workflow architecture, allowing you to embed
review steps directly into the execution graph.

Key Capabilities

  • Native Workflow Pausing: Insert a "Human Input" node to suspend workflow execution at critical decision points.
  • Review & Edit: The node generates a UI where humans can review AI outputs and modify variables (e.g., editing a draft or correcting data) before the process continues.
  • Action-Based Routing: Configure custom buttons (like "Approve," "Reject," or "Escalate") that determine
    the subsequent path of the workflow.
  • Flexible Delivery Methods: Human input forms can be delivered via Webapp or Email. In cloud environments, Email delivery availability may depend on plan/feature settings.

🛠 Architecture Updates

To support the stateful pause/resume mechanism required by HITL and provide event‑subscription APIs, we refactored the execution engine: Workflow‑based streaming executions and Advanced Chat executions now run in Celery workers, while non‑streaming WORKFLOW runs still execute in the API process.
All pause/resume paths (e.g., HITL) are resumed via Celery, and events are streamed back through Redis Pub/Sub.

For Large Deployments & Self-Hosted Users:

We have introduced a new Celery queue named workflow_based_app_execution. While standard setups will work out of the box, high-throughput environments should consider the following optimizations to ensure stability and performance:

  1. Scale Workers: Adjust the number of workers consuming the workflow_based_app_execution queue based on your specific workload.
  2. Dedicated Redis (Optional): For large-scale deployments, we recommend configuring the new PUBSUB_REDIS_URL environment variable to point to a dedicated Redis instance. Using Redis Cluster mode with Sharded PubSub is strongly advised to ensure horizontal scalability.

⚠️ Important Upgrade Note

New Celery Queue Required: workflow_based_app_execution

Please ensure your deployment configuration (Docker Compose, Helm Chart, etc.) includes workers listening to the new workflow_based_app_execution queue.
This queue is required for workflow‑based streaming executions and all resume flows (e.g., HITL); otherwise, streaming executions and resume tasks will not be processed.

🔧 Operational Note

Additional Celery Queue: api_token

If ENABLE_API_TOKEN_LAST_USED_UPDATE_TASK=true, ensure your deployment also has workers listening to api_token.
This queue is used by the scheduled batch update task for API token last_used_at timestamps.

⚙️ Configuration Changes

We have introduced several new environment variables to support the architectural changes. Large deployments should pay special attention to the PubSub Redis configurations to ensure scalability.

  • PUBSUB_REDIS_URL (Critical): Specifies the Redis URL used for PubSub communication between the API and Celery workers. If left empty, it defaults to the standard REDIS_* configuration.
  • PUBSUB_REDIS_CHANNEL_TYPE (Critical): Defines the channel type for streaming events. Options are pubsub (default) or sharded. We highly recommend using sharded for high-throughput environments.
  • PUBSUB_REDIS_USE_CLUSTERS (Critical): Set to true to enable Redis cluster mode for PubSub. Combined with sharded PubSub, this is essential for horizontal scaling.

Other Additions:

  • WEB_FORM_SUBMIT_RATE_LIMIT_MAX_ATTEMPTS: Maximum number of web form submissions allowed per IP within the rate limit window (Default: 30).
  • WEB_FORM_SUBMIT_RATE_LIMIT_WINDOW_SECONDS: Time window in seconds for web form submission rate limiting (Default: 60).
  • HUMAN_INPUT_GLOBAL_TIMEOUT_SECONDS: Maximum seconds a workflow run can stay paused waiting for human input before global timeout (Default: 604800, 7 days).
  • ENABLE_HUMAN_INPUT_TIMEOUT_TASK: Enables the background task that checks for expired human input requests (Default: true).
  • HUMAN_INPUT_TIMEOUT_TASK_INTERVAL: Sets the interval (in minutes) for the timeout check task (Default: 1).
  • ENABLE_API_TOKEN_LAST_USED_UPDATE_TASK: Enables the periodic background task that batch-updates API token last_used_at timestamps (Default: true).
  • API_TOKEN_LAST_USED_UPDATE_INTERVAL: Sets the interval (in minutes) for batch-updating API token last_used_at timestamps (Default: 30).
  • SANDBOX_EXPIRED_RECORDS_CLEAN_BATCH_MAX_INTERVAL: Maximum random delay (in milliseconds) between retention cleanup batches to reduce DB pressure spikes (Default: 200).

📌 Additional Changelog Highlights

Reliability & Correctness

  • Added migration-time deduplication and a unique constraint for tenant default models to prevent duplicate default model records.
  • Fixed a tools-deletion edge case caused by provider ID type mismatch.
  • Fixed a FastOpenAPI integration regression where authenticated users could be resolved as anonymous in remote file APIs.
  • Fixed message event type detection for file-related responses, and hid the workspace invite action for non-manager users.

Performance & Scalability

  • Reduced backend load and console latency with plugin manifest pre-caching and AppListApi query optimizations.
  • Improved large-data task stability with split DB sessions, batched cleanup execution, index tuning, and configurable inter-batch throttling for retention cleanup jobs.

API & Platform Capabilities

  • Added a Service API endpoint for end-user lookup with tenant/app scope enforcement.
  • Improved workflow run history refresh behavior during run state transitions.
  • Enhanced MCP Tool integration by extracting and reporting usage metadata (for example, token/cost fields) from MCP responses.

Security

  • Removed dynamic new Function evaluation from ECharts parsing and now return explicit parsing errors for unsupported chart code.

Localization

  • Added Dutch (nl-NL) language support across backend language mapping and web localization resources.

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 #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.0
  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

Read more

v1.12.1 - Fix base URL in client and other bugs

04 Feb 12:15

Choose a tag to compare

What's Changed

v1.12.0 - Introducing Summary Index: Smarter Retrieval with AI Summarization

03 Feb 14:38
f5d6c25

Choose a tag to compare

🚀 New Features: Summary Index

We are introducing Summary Index, a powerful enhancement to our knowledge base retrieval system that significantly improves search accuracy by generating AI-powered summaries for document chunks.

Background

Traditional vector search relies on raw chunk embeddings, which can miss semantic nuances and context when matching user queries. This is especially challenging for long documents or complex content where key information might be scattered across multiple chunks. Summary Index addresses this by creating concise, semantically-rich summaries for each document chunk, which are then vectorized and used as an additional retrieval layer.

Key Capabilities

  • AI-Powered Summarization: Automatically generates concise summaries for document chunks using configurable LLM models, capturing essential semantic information in a compact format.
  • Multimodal Support: When using vision-capable LLMs (e.g., GPT-4V, Claude-3), the system can generate summaries that incorporate both text and images from document chunks, providing richer context understanding.
  • Enhanced Retrieval Accuracy: Summary vectors serve as an additional retrieval layer, improving the precision of knowledge base searches by matching queries against both original content and AI-generated summaries.
  • Flexible Configuration: Supports default summary prompts, allowing you to tailor the summarization style to match your domain-specific requirements.
  • Asynchronous Processing: Summary generation runs asynchronously, ensuring that document indexing remains fast and non-blocking.
  • Manual Summary Editing: Allows you to manually edit and refine AI-generated summaries to better align with the original chunk content, ensuring summaries accurately reflect domain-specific terminology and context.
  • Index Structure Compatibility: Works with both general chunking and parent-child chunking modes, with intelligent handling of hierarchical document relationships.
  • High-Quality Index Integration: Available exclusively for datasets using the "high_quality" indexing technique, ensuring optimal performance for production knowledge bases.

Other Improvements

  • Agent App Multimodal Support: Agent App now natively supports multimodal inputs (images/files).
  • Qdrant Full-Text Search: Implemented full-text search with multi-keyword support for Qdrant vector database.
  • Workflow Enhancements:
    • Added support for registering and reading context in workflows.
    • Added OpenTelemetry support for single runs.
  • Plugin System: Added an option to delete or keep API keys when uninstalling a plugin.
  • Template Preview Before Creating: Added a detailed app template preview with workflow graphs or app configs by app type.

🐞 Bug Fixes & Security Updates

  • Security:
    • Logstore security fix: Addressed potential SQL injection, serialization issues, and optimized initialization.
    • Fixed an SSRF vulnerability in WordExtractor URL download.
    • Upgraded tanstack devtools to fix seroval RCE vulnerability.
    • Security updates for pdfminer.six, authlib, werkzeug, aiohttp, and pycryptodome.
  • Workflow & Graph Engine:
    • Fixed issues where single iteration or loop nodes could not run.
    • Fixed NextStep crash when the target node is missing.
    • Fixed ToolInvokeMessage Union type parsing issue.
  • API & Backend:
    • Fixed CORS resource pattern for /console/api routes.
    • Fixed IRIS hybrid search returning zero results.
    • Fixed billing account deletion issues.
    • Fixed vdb-migrate command for parent-child segment migration.
  • Frontend:
    • Fixed "Expand all chunks" button not working.
    • Fixed vertical scrolling support for floating elements.
    • Fixed validation error when uploading images with None URL values.

⚙️ Configuration Changes

  • SANDBOX_EXPIRED_RECORDS_CLEAN_TASK_LOCK_TTL: Sets the lock TTL for the sandbox expired records cleanup task (Default: 90000).
  • SMTP_LOCAL_HOSTNAME: Optional override for the local hostname used during SMTP HELO/EHLO.
  • PLUGIN_MODEL_SCHEMA_CACHE_TTL: Sets the cache TTL for plugin model schemas (Default: 3600).
  • ENABLE_TRIAL_APP: Enables trial app (Default: false).
  • ENABLE_EXPLORE_BANNER: Enables explore banner (Default: false).

Upgrade Guide

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

What's Changed

Read more

v1.11.4

15 Jan 07:15
1.11.4
acfd34e

Choose a tag to compare

🔒 Security

Dify now requires Node.js 24.13.0 to pick up the upstream fix for the AsyncLocalStorage/async_hooks DoS CVE that can crash apps with deeply nested input. All self-hosted deployments should upgrade Node.js. Thanks to @hyoban in #30945.

Related: #30935.

🛠️ Bug Fixes

  • Redirect After Login: We’ve sorted out the login redirects to bring you back to your intended destination smoothly after logging in. Shoutout to @hyoban for this fix in #30985.

  • Missing ID and Message ID: Missing the essentials? Not anymore! We’ve patched the missing id and message_id issue, thanks to @fatelei in #31008.

  • Destructuring Undefined Properties: Ever run into that annoying error where you can't destructure name from value because it's undefined? That’s been crushed too, all thanks to @fatelei in #30991.


Upgrade Guide

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 #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.11.4
  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

Full Changelog: 1.11.3...1.11.4

v1.11.3

13 Jan 10:10
a22cc5b

Choose a tag to compare

🚀 What's New in v1.11.3?

Our latest release, v1.11.3, brings to you a slew of bug fixes and features focused on performance, functionality, and user experience. Here's a look at what's changed:

🎬 New Features

  • MCP Tool Enhancements: Added support for embeddedResource and made MCP tools display directly for quicker access by @IthacaDream and @fatelei in #30261 and #30019.
  • Batch Operations: Introduced re-index operation in document batch operations by @fatelei in #30275.
  • Agent and Workflow Updates: New AgentMaxIterationError and enhancements in app mode checks make workflows and agents more robust by @fatelei.
  • OAuth Integration: Frontend login now supports oauth_new_user flag by @zyssyz123 in #30370.
  • PDF Extraction: Improved RAG extractor to support image extraction from PDFs by @yangzq50 in #30399.
  • Storage and Archive: Added archive storage client and config settings by @hjlarry in #30422.
  • Translation and Internationalization: Added initial RSC support for translations for a global audience by @hyoban in #30596.

🛠️ Bug Fixes

  • Redis and Cache: Used pipelines to optimize Redis cache deletions, enhancing speed and reliability by @fatelei in #30159.
  • UI/UX Fixes: From preventing page crashes due to permission errors to fixing flicking button sizes, multiple UI-related issues have been addressed by various contributors.
  • Data Operations: Fixed dataset access errors and improved error handling in batch operations by @zhaobingshuang and others.
  • Performance: Released runtime state references under high load to prevent potential memory leaks by @SherlockShemol in #30236.
  • Security: Rectified CORS and SSL issues that could've affected bot integrations and Celery operations.
  • Internationalization: Korean translations and content were updated for accuracy by @sangyun-han in #30347.

🔧 Under the Hood

  • CI/CD and Build Enhancements: Enhanced GitHub actions and build processes for better reliability and less downtime by @bowenliang123 and @hyoban.
  • Code & Query Optimization: Addressed inefficiencies in SQL queries and data handling in workflows and the API, improving overall stability.

This release emphasizes streamlining backend operations, fortifying security, and enriching the user interface for a smoother, more productive experience. Thank you to all contributors for refining Dify and pushing our platform forward! 🛠️💡


Upgrade Guide

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 #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.11.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

Read more

v1.11.2

25 Dec 08:40
0c4233e

Choose a tag to compare

🌟 What’s New in v1.11.2 🌟

Welcome to version 1.11.2! This release sees a significant number of improvements, especially around testing, fixes, and new integrations to enhance the robustness and flexibility of the platform. Here's the lowdown:

🚀 New Features

  • InterSystems IRIS Vector Database: We've added support for this database to bolster data handling capabilities. Big ups to @TomoOkuyama! (#29480)
  • Aliyun SLS Integration: Workflow execution logging can now leverage Aliyun's Simple Log Service, courtesy of @adongfan. (#28986)
  • Tunisian Arabic Support: We've expanded our language support with Tunisian Arabic. Shukran @nourzakhama2003! (#29306)

⚙️ Enhancements

  • Comprehensive Test Coverage: A slew of Jest tests have been added to various components, such as the ConfirmModal, AppCard, CustomizeModal, and more. Thanks to everyone involved, especially @lyzno1! These enhance our confidence in releasing robust changes. (#29627, #29667, etc.)
  • Amplitude Tracking: Enhanced user behavior tracking across the platform for deeper insights, thanks to @CodingOnStar. (#29662)
  • Pipeline Setting Tests: Automated testing has been added to ensure any future changes to pipeline settings won't break your optimizations. (#29478)
  • Responsive Chat Wrapper: We've optimized the chat interface for better usability across all device types. Props to @hangboss1761. (#29687)

🛠️ Bug Fixes

  • Unified Translation: Fixed various translation-related issues across multiple languages for a more coherent global experience. Thanks, @ZeroZ-lab! (#29759)
  • Security Enhancements: We've patched an XSS vulnerability with the Mermaid Graph and tackled SSRF and CSV injection issues. Kudos to @zyssyz123 and @laipz8200. (#29811, #29462)
  • Upload Fixes: If file uploads are disabled, they'll now be consistently so across the board. Big thanks to @iamjoel. (#29681)
  • API Key Validation: Ensures API keys in HTTPRequest nodes are never empty, thanks to @AziizBg. (#29950)
  • Miscellaneous Fixes: A whole host of tweaks ranging from workflow past version data synchronization to adjustment of padding for better alignment. Massive thanks to all who squashed these bugs! (#30139, #29999)

🎨 Code Quality & Maintenance

  • Refactor Marathon: We've massively refactored our API and web controllers to make future updates easier and more performant. Big thanks to @asukaminato0721 for spearheading this. (#29894, #29888, etc.)
  • Jest and Webpack Optimizations: Improved Jest caching, configuration, and migration to Vitest/ESM in the web components for quicker, more reliable tests. Hats off to @lyzno1 and @hyoban. (#29881, #29974)
  • Documentation Cleanup: The Swagger UI is now disabled by default in production releases, being more cautious about what information hangs out there. Thanks @laipz8200. (#29723)

That's the round-up for v1.11.2! As always, a huge shoutout to all contributors who make these improvements possible. You rock! Now, go try the new release, and hit us up with feedback. Happy coding! 🙌


Upgrade Guide

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 #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.11.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: add test case for download components by @iamjoel in #29569
  • chore: test for app card and no data by @iamjoel in #29570
  • test(web): add comprehensive tests for workflow-log component by @lyzno1 in #29562
  • fix: bump wandb to 0.23.1 urllib3 to 2.6.0 by @kenwoodjw in #29481
  • fix: remove unnecessary error log when trigger endpoint returns 404 by @Mairuis in #29587
  • feat(i18n): add Tunisian Arabic (ar-TN) translation by @nourzakhama2003 in #29306
  • fix: validate page_size limit in plugin list and tasks endpoints by @aplulu in #29611
  • fix(workflow): agent prompt editor canvas not covering full text height by @abesticode in #29623
  • chore: add anthropic skills for frontend testing by @lyzno1 in #29608
  • fix: fix mime type is none by @fatelei in #29579
  • fix(ci): use setup-python to avoid 504 errors and use project oxlint config by @lyzno1 in #29613
  • fix: show uninstalled plugin nodes in workflow checklist by @lyzno1 in #29630
  • fix: fix delete_account_task not check billing enabled by @fatelei in #29577
  • fix: add secondary text color to plugin task headers by @Pleasurecruise in #29529
  • fixes: #28300 Change the Citations banner in dark mode to fully opaque by @Rickon-dev in #28673
  • feat: Add InterSystems IRIS vector database support by @TomoOkuyama in #29480
  • chore(deps): bump @hookform/resolvers from 3.10.0 to 5.2.2 in /web by @dependabot[bot] in #29442
  • chore: add AGENTS.md for frontend by @lyzno1 in #29647
  • test: add comprehensive Jest tests for ConfirmModal component by @lyzno1 in #29627
  • fix(api): Populate Missing Attributes For Arize Phoenix Integration by @ialisaleh in #29526
  • fix(workflow): tool plugin output_schema array type not selectable in subsequent nodes by @importcjj in #29035
  • Add file upload enabled check and new i18n message by @halogen22 in #28946
  • chore: disable swagger doc in production by @lin-snow in #29283
  • fix(api): use json_repair for conversation title parsing by @quicksandznzn in #29649
  • perf: commit once by @fatelei in #29590
  • fix: delete knowledge pipeline but pipeline and workflow don't delete by @JohnJyong in #29591
  • refactor: admin api using session factory by @fatelei in #29628
  • chore(i18n): translate i18n files and update type definitions by @github-actions[bot] in #29651
  • fix: does not save segment vector when there is no attachment_ids by @Chenyl-Sai in #29520
  • test: Consolidate API CI test runner by @laipz8200 in #29440
  • fix: correct i18n SSO translations and fix validation/type issues by @NeatGuyCoding in #29564
  • fix: dos in annotation import by @zyssyz123 in #29470
  • feat: Enhance Amplitude tracking across various components by @CodingOnStar in #29662
  • chore: tests for annotation by @iamjoel in #29664
  • chore: some billing test by @iamjoel in #29648
  • fix: ssrf, add internal ip filter when parse tool schema by @zyssyz123 in #29548
  • fix: csv injection in annotations export by @zyssyz123 in #29462
  • fix: all upload files are disabled if upload file feature disabled by @iamjoel in #29681
  • fix: webhook node output file as file variable by ...
Read more

v1.11.1

12 Dec 06:44
1.11.1
2058186

Choose a tag to compare

Important

This version contains very important security updates, and we recommend that all users upgrade to this version as soon as possible.

This release is all about tightening up security, boosting performance, and squashing those pesky bugs. Let's dive into what's changed:

🛠️ Fixes and Improvements

  • React and Next.js Security Upgrades: We've bumped up react and react-dom to 19.2.3 to fix some CVE vulnerabilities. Next.js also got a security update, courtesy of @douxc (PRs #29532 and #29545).

  • Credential Management: If you've been seeing empty available_credentials, that's sorted out now (thanks to @fatelei in #29521).

  • Description Length Limitation: Autogenerated descriptions will now be truncated to avoid the 400-character limit error, ensuring smoother submissions by @shua-chen in #28681.

  • Content Type Charset: Response content types now include charsets to keep your data formats consistent, by @Pleasurecruise in #29534.

  • Flask-Restx Attribute Error: The pesky AttributeError caused by validate=True in flask-restx is no more (fixed by @Mairuis in #29552).

  • Document Handling: Optimized the save_document_with_dataset_id function for better performance by @fatelei in #29550. Plus, we fixed an issue where external images in DOCX files were causing extraction failures (@JohnJyong in #29558).

  • Token Retrieval: No more errors when access_token is empty; it now gracefully returns None by @kashira2339 in #29516.

  • Hit-Test Failures: Resolved the hit-test failure when an attachment ID doesn’t exist by @JohnJyong in #29563.

🚀 New Features

  • Amplitude Integration: We’ve integrated the Amplitude API key into our layout and provider components for enhanced analytics. Big thanks to @CodingOnStar in #29546.

🧪 Testing

  • Container Integration Tests: Added integration tests for triggers to make sure everything runs smoothly in container environments by @Stream29 in #29527.

⚡ Performance Enhancements

  • Excel Extractor: We've optimized the performance and memory usage of the Excel extractor, making it faster and more efficient, by @NieRonghua in #29551.

Thanks to everyone who contributed to this release! Your feedback and contributions make all the difference. As always, happy coding! 🌟


Upgrade Guide

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 #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.11.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: 1.11.0...1.11.1

v1.11.0 - Your knowledge base just went from mono to full HD

11 Dec 09:23
1.11.0
063b39a

Choose a tag to compare

multimodal-knowledge-base

🧠 Multimodal Knowledge Base

Dify can now understand both text and images in your knowledge base.

Before, embeddings only cared about words. But real docs? They’re full of screenshots, diagrams, memes (don’t lie), and markdown with embedded images. Now those visuals count too.

What’s Actually Happening

  1. Auto‑Image Extraction
    Drop a doc with Markdown images — like ![vibe](https://cats.png) — and Dify grabs them automatically (JPG, PNG, GIF ≤ 2 MB).
  2. Smart Attachment Handling
    Each image is linked to its matching text chunk, so context stays tight.
  3. Embedding Behavior
    • Using a multimodal embedding model? Then both text + image get vectorized. You can:
      • search text ↔ image,
      • image ↔ image,
      • or image ↔ text.
        Basically, everything ↔ everything.
    • Sticking with a regular text‑only model? Cool — the images still go along for the ride and will appear in prompts when you use a Vision‑enabled LLM.
  4. Developer Candy
    Knowledge Pipeline’s KnowledgeBase node speaks two new dialects —
    • multimodal‑Parent‑Child
    • multimodal‑General
      Perfect for plugin devs who want to feed Dify structured mixed‑modality data without headaches.
  5. Supported Multimodal Models (tips: update below plugin to the latest version)
    • AWS Bedrock: nova‑2‑multimodal‑embeddings‑v1:0
    • Google Vertex AI: multimodalembedding@001
    • Jina: jina‑embedding‑v4, jina‑clip‑v1, jina‑clip‑v2, jina‑reranker‑m0
    • Tongyi (Qwen): multimodal‑embedding‑v1

Once everything’s embedded, you’ll see a shiny new Multimodal tag in your knowledge base — because now your data’s two‑dimensional (and twice as cool).

Huge thanks to @JohnJyong (#29115) and @WTW0313 (#27793) for bringing visual intelligence to Dify. Absolute legends.

🧩 Other New Features

  • Zen Mode — disappear into your flow; fewer buttons, more focus. use cmd + k to enter.
    thanks @ZeroZ‑lab (#28794)
  • “Open Workflow” shortcut for WorkflowTool — hop straight into editing like a boss.
    props @CrabSAMA (#28898)
  • Start Node JSON Schema — keeps your workflows honest.
    thanks @fatelei (#29053)
  • Admin API Keys skip CSRF — automation now flows smoother than espresso.
    thanks @kenwoodjw (#29139)
  • Dark‑mode icons, ReactScan, and spicy color polish all landed too.
    shoutout @hjlarry (#28858) and @zhsama (#29086)

⚙️ Performance & Infrastructure

A whole lot of behind‑the‑curtain magic here:

  • GraphEngine got chill pause/resume handling — no more jumping gears mid‑flow.
    thanks @QuantumGhost (#28196)
  • Automatic Storage Permission Repair
    Introduced an init container that automatically fixes file system permissions on startup, removing the need for manual intervention when deploying with different storage backends.
    thanks to @kurokobo and @zhutong6688 (#29297).
  • Redis caching makes tool provider listings zoom.
    thanks @yangzheli (#29101)
  • Milvus 2.6.0 upgrade in Docker — fewer installation freak‑outs.
    cheers @majinghe (#26618)
  • Pydantic upgrade cleaned up node hydration code.
    thanks @asukaminato0721 (#28993)
  • Less UI lag — fewer unnecessary re‑renders across Workflow and Marketplace.
    props @iamjoel (#28776, #28783)
  • Massive test overhaul — embeddings, datasets, plugins, workflows… you name it.
    thanks @codomposer, @SmartDever02, @hsparks‑codes

🐞 Key Fixes

  • Webhook Node Conversion Error Resolved
    Fixed an issue where converting an existing node into a webhook node could cause a 404 error.
    thanks to @hjlarry (#28686).
  • Chat Auto‑Scroll Stability Restored
    Addressed a problem that caused the chat interface to stop auto‑scrolling during active conversations.
    thanks to @utsumi‑fj (#28690).
  • OceanBase Vector Search Accuracy Improved
    Implemented proper handling of the score_threshold parameter to ensure consistent and relevant retrieval results.
    thanks to @connermo (#28536).
  • Dark Theme Rendering Adjustments
    Corrected tooltip display and text color inconsistencies in dark mode for a more stable visual experience.
    thanks to @hjlarry (#29186).
  • MySQL Query Compatibility Fixes
    Resolved issues with UUID queries and unsupported returning statements when using MySQL drivers.
    thanks to @wangype (#28941) and @longbingljw (#29069).
  • Database Session Management
    Fixed errors that could occur when database sessions were initialized multiple times during workflow execution.
    thanks to @fatelei (#29160).
  • UI Consistency Enhancements
    Addressed several minor rendering and layout issues, including small‑screen text visibility and tooltip behavior.

🤘 A ton of folks touched this release — whether you built features, fixed a typo, or added a single test, thank you.
You made Dify 1.11.0 faster, funnier, and just plain better.


Upgrade Guide

Note

We have re-released the image of this version. If you pulled the image before the release time, you need to delete them and re-fetch.

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 #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.11.0
  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

Read more

v1.10.1-fix.1

05 Dec 04:59
1.10.1-fix.1
57dc7e0

Choose a tag to compare

Important

For users who upgraded to version 1.10.1-fix.1 before 2025-12-09 03:00:00 UTC, please verify your docker compose configuration to ensure the web service is using the correct image version langgenius/dify-web:1.10.1-fix.1. This verification is critical to address the GHSA-fv66-9v8q-g76r security vulnerability.

  • Security/deps: backend bumps pyarrow 17.0.0, werkzeug 3.1.4, urllib3 2.5.0 in api/uv.lock; frontend bumps React 19.2.1 (addresses CVE-2025-55182) and Next.js 15.5.7 in web/package.json + web/pnpm-lock.yaml.

Full Changelog: 1.10.1...1.10.1-fix.1

v1.10.1 – Multi-Database Era Begins: MySQL Joins the Family

26 Nov 10:40
1.10.1
b353a12

Choose a tag to compare

🎉 Major new capabilities, critical stability fixes
🧩 And the long-awaited MySQL support finally arrives!

🚀 New Features

Infrastructure & DevOps

MySQL adaptation (PostgreSQL / MySQL / OceanBase now fully supported)
Thanks @longbingljw from the OceanBase team!
PR: #28188

  • Adds DB_TYPE configuration option
  • Supports MySQL JSON / LONGTEXT / UUID / index differences
  • Updates Alembic migrations for multi-DB compatibility
  • Introduces cross-DB SQL helpers for statistics and date handling
  • Rewrites dataset metadata filters with SQLAlchemy JSON operators
  • Adds CI workflows for MySQL migration testing

This is a significant backend upgrade in Dify’s history — multi-database support is now first-class.

Performance & Workflow Editor Optimization

  • Implemented a major performance upgrade for the Workflow Editor, eliminating costly per-node validation scans, reducing unnecessary re-renders, and improving responsiveness from becoming laggy at ~50 nodes to remaining smooth even near ~200 nodes — #28591, by @iamjoel.

Pipelines & Workflow Engine

  • Introduced a broad set of workflow-editor improvements, including UI refinement, stability fixes, and quality-of-life enhancements across variable inspection, media components, and node interactions — #27981, by @Xiu-Lan, @crazywoola, @johnny0120, @Woo0ood.

🛠 Fixes & Improvements

Runtime Stability & Workflow Execution

  • Fixed an issue where advanced-chat workflows could fail to stop, preventing stuck or lingering processes — #27803, by @Kevin9703.
  • Fixed a 500 error triggered when running “any node” in draft mode, improving workflow debugging reliability — #28636, by @hjlarry.
  • Corrected token overcounting during loop/iteration evaluation (not related to billing tokens) — #28406, by @anobaka.
  • Fixed workflow-as-tool returning an empty files field, ensuring tool integrations receive correct file metadata — #27925, by @CrabSAMA.
  • Resolved a session-scope error in FileService that could cause inconsistent file deletion behavior#27911, by @ethanlee928.

Knowledge Base

  • Fixed a 500 error when using the weightedScore retrieval option, restoring stability for weighted ranking scenarios — #28586, by @Eric-Guo.

Developer Experience & SDKs

  • Fixed Node.js SDK route and multipart upload handling, ensuring robust file and data submission through JavaScript integrations — #28573, by @lyzno1.
  • Fixed OpenAPI/Swagger failing to load, restoring developer documentation access — #28509, by @changkeke, with contributions from @asukaminato0721.

Web UI & UX

  • Corrected dark-mode rendering for the ExternalDataToolModal, ensuring consistent appearance across themes — #28630, by @Nov1c444.
  • Fixed Marketplace search-trigger behavior and scroll position, improving discovery and navigation — #28645, by @lyzno1.
  • Fixed incorrect navigation when opening chatflow log details, providing more predictable UI behavior — #28626, by @hjlarry.
  • Fixed layout and rendering issues in the README display panel, ensuring cleaner content presentation — #28658, by @yangzheli.
  • Reduced unnecessary re-renders in the useNodes hook, improving overall front-end performance — #28682, by @iamjoel.

Plugins & Integrations

  • Updated plugin verification logic to use a unique identifier, improving correctness across plugin installations and updates — #28608, by @Mairuis.

System Robustness

  • Prevented nullable tags in TriggerProviderIdentity, avoiding potential runtime errors — #28646, by @Yeuoly.
  • Improved error messaging for invalid webhook requests, providing clearer diagnostics — #28671, by @hjlarry.

Feedback & Logging

  • Fixed like/dislike feedback not appearing in logs, ensuring end-user rating signals are correctly visualized — #28652, by @fatelei.

Internationalization (i18n)

  • Standardized terminology for trigger and billing events, improving translation consistency — #28543, by @NeatGuyCoding.
  • Fixed multiple issues in execution-related translations, correcting missing or malformed entries — #28610, by @NeatGuyCoding.
  • Removed incorrect “running” translation entries#28571, by @NeatGuyCoding.
  • Refactored i18n scripts and removed obsolete translation keys#28618, by @lyzno1.
  • Added missing translations across the UI, improving language coverage — #28631, by @lyzno1.

Maintenance & Developer Tooling

  • Added front-end automated testing rules to strengthen baseline reliability — #28679, by @CodingOnStar and contributors.
  • Upgraded system libraries and Python dependencies to maintain security and compatibility — #28624, by @laipz8200 and @GareArc.
  • Updated start-web development script to use pnpm dev, simplifying contributor workflows — #28684, by @laipz8200.

Upgrade Guide

Docker Compose Deployments

Important

Required Action Before Upgrading

Starting from 1.10.1, the Dify API image now runs as a non-root user (UID 1001) for improved security.
If you are using local filesystem storage (the default in community deployments), you must update the ownership of your mounted storage directories on the host machine, or the containers will fail to read/write files.

Affected services:

  • api
  • worker

Affected host directory:

  • ./volumes/app/storage → mounted to /app/api/storage

What you must do before restarting the new version:

# Stop existing containers
docker compose down

# Update directory ownership on the host
sudo chown -R 1001:1001 ./volumes/app/storage

# Restart normally
docker compose up -d

After this one-time migration, Dify will operate normally with the new non-root user model.

  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

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 #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.10.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

Read more