1.10.1

langgenius/dify1.10.1Nov 26, 2025by laipz8200

Upgrading?

Release notes summary

Dify 1.10.1 introduces first-class MySQL support alongside PostgreSQL and OceanBase, and significantly improves Workflow Editor performance at larger node counts. It also switches the API image to run as a non-root user and includes numerous workflow, knowledge base, SDK, UI, and i18n fixes.

Key Highlights

  • MySQL adaptation adds DB_TYPE configuration and multi-database migration support.
  • Workflow Editor performance is improved from lagging around 50 nodes to remaining smooth near 200 nodes.
  • API and worker images now run as non-root UID 1001 for improved security.
  • Adds MLflow tracing, trigger billing, MCP OAuth discovery, and a stop-run button for published apps.
  • Includes fixes for advanced-chat workflow stopping, token overcounting, weightedScore retrieval, and Node.js SDK multipart handling.

Breaking Changes

  • The Dify API image now runs as non-root UID 1001; local filesystem storage deployments must chown ./volumes/app/storage to 1001:1001 before restarting api and worker services.

New Features

  • MySQL database support
  • Workflow Editor performance optimization
  • MLflow tracing
  • Trigger billing
  • MCP OAuth discovery with dynamic scope selection
  • Stop run button for published apps
  • Partial document metadata updates

Full Release Notes

πŸŽ‰ 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:**
>
> ```bash
> # 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)

   ```bash
   cd docker
   cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak
   ```

2. Get the latest code from the main branch

   ```bash
   git checkout main
   git pull origin main
   ```

3. Stop the service. Please execute in the docker directory

   ```bash
   docker compose down
   ```

4. Back up data

   ```bash
   tar -cvf volumes-$(date +%s).tgz volumes
   ```

5. Upgrade services

   ```bash
   docker compose up -d
   ```
If you encounter errors like below

```bash
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
   ```bash
   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:

   ```bash
   git checkout 1.10.1
   ```

3. Update Python dependencies:

   ```bash
   cd api
   uv sync
   ```

4. Then, let's run the migration script:

   ```bash
   uv run flask db upgrade
   ```

5. Finally, run the API server, Worker, and Web frontend Server again.

---

## What's Changed
* Upgrade weave version to fix weave configuration failure by @xprilion in https://github.com/langgenius/dify/pull/28197
* fix: knowledge pipeline can not published by @hjlarry in https://github.com/langgenius/dify/pull/28203
* feat: add icon gallery stories by @lyzno1 in https://github.com/langgenius/dify/pull/28214
* fix: card view render by @lyzno1 in https://github.com/langgenius/dify/pull/28189
* add icon for forum by @crazywoola in https://github.com/langgenius/dify/pull/28164
* fix: click log panel of log page cause whole page crash by @hjlarry in https://github.com/langgenius/dify/pull/28218
* Perf/mutual node UI by @zhsama in https://github.com/langgenius/dify/pull/28282
* fix: update currentTriggerPlugin check in BasePanel component by @Yessenia-d in https://github.com/langgenius/dify/pull/28287
* chore: remove unused style.module.css from app-icon component by @lyzno1 in https://github.com/langgenius/dify/pull/28302
* fix: published webhook can't receive inputs by @hjlarry in https://github.com/langgenius/dify/pull/28205
* add cnt script and one more example by @asukaminato0721 in https://github.com/langgenius/dify/pull/28272
* add vdb-test workflow run filter by @JohnJyong in https://github.com/langgenius/dify/pull/28336
* doc: add doc for env config when site and backend are in different domains by @iamjoel in https://github.com/langgenius/dify/pull/28318
* fix: dataset metadata counts when documents are deleted by @kenwoodjw in https://github.com/langgenius/dify/pull/28305
* chore: translate i18n files and update type definitions by @github-actions[bot] in https://github.com/langgenius/dify/pull/28284
* refactor: consume events after pause/abort and improve API clarity by @laipz8200 in https://github.com/langgenius/dify/pull/28328
* fix(docker): start-up TiFlash by @Lloyd-Pottiger in https://github.com/langgenius/dify/pull/28376
* Revert "add vdb-test workflow run filter" by @JohnJyong in https://github.com/langgenius/dify/pull/28382
* fix: address user input preparation in workflow app generator by @Mairuis in https://github.com/langgenius/dify/pull/28410
* feat:mysql adaptation for metadb by @longbingljw in https://github.com/langgenius/dify/pull/28188
* feat: trigger billing by @Mairuis in https://github.com/langgenius/dify/pull/28335
* refactor: refactor python sdk by @fatelei in https://github.com/langgenius/dify/pull/28118
* style(web): fix vertical alignment of search button on apps page by @coding-ice in https://github.com/langgenius/dify/pull/28398
* fix(frontend): add missing vertical type to divider in provider config modal by @minimAluminiumalism in https://github.com/langgenius/dify/pull/28387
* make expand/collapse in question classifier node by @jubinsoni in https://github.com/langgenius/dify/pull/26772
* feat: implement RFC-compliant OAuth discovery with dynamic scope selection for MCP providers by @Nov1c444 in https://github.com/langgenius/dify/pull/28294
* fix: improve email code sign-in experience by @lyzno1 in https://github.com/langgenius/dify/pull/28307
* fix: change TenantApi endpoint from GET to POST by @laipz8200 in https://github.com/langgenius/dify/pull/27858
* chore: translate i18n files and update type definitions by @github-actions[bot] in https://github.com/langgenius/dify/pull/28425
* feat(workflow): optimize workflow canvas pan and scroll behavior by @yangzheli in https://github.com/langgenius/dify/pull/28250
* feat: add display status filtering to document list and API by @ZeroZ-lab in https://github.com/langgenius/dify/pull/28342
* fix(web): fix checkbox unselectable bug & optimize document-list/app-annotation styles by @yangzheli in https://github.com/langgenius/dify/pull/28244
* chore: remove redundant reimports by @IthacaDream in https://github.com/langgenius/dify/pull/28415
* chore: translate i18n files and update type definitions by @github-actions[bot] in https://github.com/langgenius/dify/pull/28429
* fix: add make test for short cut backend unittest by @yihong0618 in https://github.com/langgenius/dify/pull/28380
* refactor(web): remove redundant dataset card-item components and related code by @yangzheli in https://github.com/langgenius/dify/pull/28199
* Fix duration displayed for workflow steps on Weave dashboard by @xprilion in https://github.com/langgenius/dify/pull/28289
* fix(workflow): validate node compatibility when importing dsl between chatflows and workflows by @yangzheli in https://github.com/langgenius/dify/pull/28012
* fix: resolve CSRF token cookie name mismatch in browser (#28228) by @importcjj in https://github.com/langgenius/dify/pull/28378
* fix: update table alias in document service display status test asser… by @ZeroZ-lab in https://github.com/langgenius/dify/pull/28436
* fix: lazy init audioplayer to fix no tts message also switch audio source bug by @CrabSAMA in https://github.com/langgenius/dify/pull/28433
* Add Comprehensive Unit Tests for Console Auth Controllers by @codomposer in https://github.com/langgenius/dify/pull/28349
* fix(web): remove StatusPanel's internal useStore to fix context issues by @yangzheli in https://github.com/langgenius/dify/pull/28348
* fix: remove deprecated UnsafeUnwrappedHeaders usage by @17hz in https://github.com/langgenius/dify/pull/28219
* fix: add .ts and .mjs to EditorConfig indent rules by @17hz in https://github.com/langgenius/dify/pull/28397
* fix: add app_id to Redis cache keys for trigger nodes to ensure uniqueness by @17hz in https://github.com/langgenius/dify/pull/28243
* chore: update celery command for debugging trigger by @RockChinQ in https://github.com/langgenius/dify/pull/28443
* Feat integrate partner stack by @hj24 in https://github.com/langgenius/dify/pull/28353
* fix: add missing particle in Japanese trigger events translation by @lyzno1 in https://github.com/langgenius/dify/pull/28452
* refactor: remove TimeSliceLayer before the release of HITL  by @Yeuoly in https://github.com/langgenius/dify/pull/28441
* fix: correct monitor and fix trigger billing rate limit by @Mairuis in https://github.com/langgenius/dify/pull/28465
* fix: treat -1 as unlimited for API rate limit and trigger events by @lyzno1 in https://github.com/langgenius/dify/pull/28460
* fix: correct trigger events limit modal wording by @lyzno1 in https://github.com/langgenius/dify/pull/28463
* fix: adjust overflow styles in EditMetadataBatchModal for better layout by @ZeroZ-lab in https://github.com/langgenius/dify/pull/28445
* feat: support redis 7.0 shared pub and sub by @fatelei in https://github.com/langgenius/dify/pull/28333
* fix: allow API to access conversations created before upgrade to 1.10.0 by @zhangzhefang-github in https://github.com/langgenius/dify/pull/28462
* chore: translate i18n files and update type definitions by @github-actions[bot] in https://github.com/langgenius/dify/pull/28478
* add two test examples by @asukaminato0721 in https://github.com/langgenius/dify/pull/28236
* fix(api): add session_id validation for webapp JWT authentication by @yangzheli in https://github.com/langgenius/dify/pull/28297
* disable sticky scroll by @jubinsoni in https://github.com/langgenius/dify/pull/28248
* Feat/add test script for account models by @codomposer in https://github.com/langgenius/dify/pull/28479
* fix: fix numeric type conversion issue in if-else condition comparison by @qiqizjl in https://github.com/langgenius/dify/pull/28155
* feat: Implement partial update for document metadata, allowing merging of new values with existing ones. by @ZeroZ-lab in https://github.com/langgenius/dify/pull/28390
* more typed orm by @asukaminato0721 in https://github.com/langgenius/dify/pull/28331
* use deco by @asukaminato0721 in https://github.com/langgenius/dify/pull/28153
* Clean up legacy conditions data in if-else nodes to prevent misjudgments by @qiqizjl in https://github.com/langgenius/dify/pull/28148
* more typed orm by @asukaminato0721 in https://github.com/langgenius/dify/pull/28494
* fix(api): `SegmentType.is_valid()` raises `AssertionError` for `SegmentType.GROUP` by @fatelei in https://github.com/langgenius/dify/pull/28249
* fix: Code editor throws dozen of errors by @hjlarry in https://github.com/langgenius/dify/pull/28500
* Fix/24655 by @dickens88 in https://github.com/langgenius/dify/pull/26527
* Support node reference multiple structured_output variables in single-step run by @goofy-z in https://github.com/langgenius/dify/pull/26661
* feat: complete test script for dataset models by @codomposer in https://github.com/langgenius/dify/pull/28512
* more typed orm by @asukaminato0721 in https://github.com/langgenius/dify/pull/28507
* feat: add a stop run button to the published app UI by @55Kamiryo in https://github.com/langgenius/dify/pull/27509
* feat: add comprehensive unit tests for dataset service creation methods by @SmartDever02 in https://github.com/langgenius/dify/pull/28522
* feat: MLflow tracing by @B-Step62 in https://github.com/langgenius/dify/pull/26093
* chore: translate i18n files and update type definitions by @github-actions[bot] in https://github.com/langgenius/dify/pull/28518
* chore: translate i18n files and update type definitions by @github-actions[bot] in https://github.com/langgenius/dify/pull/28528
* api -> console_ns by @asukaminato0721 in https://github.com/langgenius/dify/pull/28246
* fix: use default values for optional workflow input variables (#28546) by @importcjj in https://github.com/langgenius/dify/pull/28527
* feat: add comprehensive unit tests for dataset service retrieval/list… by @SmartDever02 in https://github.com/langgenius/dify/pull/28539
* chore(deps): bump clickhouse-connect from 0.7.19 to 0.10.0 in /api by @dependabot[bot] in https://github.com/langgenius/dify/pull/28559
* chore: fix de-DE translations by @lyzno1 in https://github.com/langgenius/dify/pull/28552
* fix: add `COMPOSE_PROFILES` param to  middleware.env.example file by @ACAne0320 in https://github.com/langgenius/dify/pull/28541
* feat: complete app models test script by @codomposer in https://github.com/langgenius/dify/pull/28549
* more typed orm by @asukaminato0721 in https://github.com/langgenius/dify/pull/28519
* chore: not using db.session.get by @fatelei in https://github.com/langgenius/dify/pull/28555
* fix: plugin auto update display issues by @hjlarry in https://github.com/langgenius/dify/pull/28564
* feat(seo): add meaningful `<h1>` headings across all public pages by @coding-ice in https://github.com/langgenius/dify/pull/28569
* fix: i18n: stop running translation by @NeatGuyCoding in https://github.com/langgenius/dify/pull/28571
* pref: workflow by @iamjoel in https://github.com/langgenius/dify/pull/28591
* fix: Failed to load API definition by @changkeke in https://github.com/langgenius/dify/pull/28509
* Fix Node.js SDK routes and multipart handling by @lyzno1 in https://github.com/langgenius/dify/pull/28573
* fix: i18n: standardize trigger events terminology in billing translations by @NeatGuyCoding in https://github.com/langgenius/dify/pull/28543
* more typed orm by @asukaminato0721 in https://github.com/langgenius/dify/pull/28577
* fix: update plugin verification logic to use unique identifier instea… by @Mairuis in https://github.com/langgenius/dify/pull/28608
* Feat/test workflow models by @codomposer in https://github.com/langgenius/dify/pull/28604
* fix: i18n: executions translation by @NeatGuyCoding in https://github.com/langgenius/dify/pull/28610
* Fix(workflow): Prevent token overcount caused by loop/iteration by @anobaka in https://github.com/langgenius/dify/pull/28406
* chore: refactor i18n scripts and remove extra keys by @lyzno1 in https://github.com/langgenius/dify/pull/28618
* chore: add missing translations by @lyzno1 in https://github.com/langgenius/dify/pull/28631
* fix: chatflow log details always navigate to page first by @hjlarry in https://github.com/langgenius/dify/pull/28626
* fix(style): update ExternalDataToolModal to support dark mode using semantic tokens by @Nov1c444 in https://github.com/langgenius/dify/pull/28630
* Fix start tab marketplace trigger search and plugin list scroll by @lyzno1 in https://github.com/langgenius/dify/pull/28645
* fix: draft run any nodes raise 500 by @hjlarry in https://github.com/langgenius/dify/pull/28636
* fix(TriggerProviderIdentity): avoid nullable tags by @Yeuoly in https://github.com/langgenius/dify/pull/28646
* Feat/web workflow improvements by @Xiu-Lan in https://github.com/langgenius/dify/pull/27981
* use no-root user in docker image by default by @41tair in https://github.com/langgenius/dify/pull/26419
* fix [Chore/Refactor] Generate complete API documentation using Flask-RESTX #24421 by @asukaminato0721 in https://github.com/langgenius/dify/pull/28649
* Feat/add weaviate tokenization configurable by @lcedaw in https://github.com/langgenius/dify/pull/28159
* fix: ensure advanced-chat workflows stop correctly by @Kevin9703 in https://github.com/langgenius/dify/pull/27803
* fix(web): resolve readme-panel display and styling issues by @yangzheli in https://github.com/langgenius/dify/pull/28658
* feat(web): update marketplace description & icon by @yangzheli in https://github.com/langgenius/dify/pull/28662
* test: add comprehensive unit tests for SegmentService - Fix: #28656 by @SmartDever02 in https://github.com/langgenius/dify/pull/28568
* Feat/add test script for tool models by @codomposer in https://github.com/langgenius/dify/pull/28653
* fix: fix feedback like or dislike not display in logs by @fatelei in https://github.com/langgenius/dify/pull/28652
* chore: enhance the hint when the user triggers an invalid webhook request by @hjlarry in https://github.com/langgenius/dify/pull/28671
* fix: fixed workflow as tool files field return empty problem by @CrabSAMA in https://github.com/langgenius/dify/pull/27925
* frontend auto testing rules by @CodingOnStar in https://github.com/langgenius/dify/pull/28679
* chore: upgrade system libraries and Python dependencies by @laipz8200 in https://github.com/langgenius/dify/pull/28624
* Fixes session scope bug in FileService.delete_file by @ethanlee928 in https://github.com/langgenius/dify/pull/27911
* Use pnpm dev in dev/start-web by @laipz8200 in https://github.com/langgenius/dify/pull/28684
* Fix 500 error in knowledge base, select weightedScore and click retrieve. by @Eric-Guo in https://github.com/langgenius/dify/pull/28586
* pref: reduce the times of useNodes reRender by @iamjoel in https://github.com/langgenius/dify/pull/28682

## New Contributors
* @Lloyd-Pottiger made their first contribution in https://github.com/langgenius/dify/pull/28376
* @coding-ice made their first contribution in https://github.com/langgenius/dify/pull/28398
* @importcjj made their first contribution in https://github.com/langgenius/dify/pull/28378
* @zhangzhefang-github made their first contribution in https://github.com/langgenius/dify/pull/28462
* @55Kamiryo made their first contribution in https://github.com/langgenius/dify/pull/27509
* @B-Step62 made their first contribution in https://github.com/langgenius/dify/pull/26093
* @changkeke made their first contribution in https://github.com/langgenius/dify/pull/28509
* @anobaka made their first contribution in https://github.com/langgenius/dify/pull/28406
* @Xiu-Lan made their first contribution in https://github.com/langgenius/dify/pull/27981
* @ethanlee928 made their first contribution in https://github.com/langgenius/dify/pull/27911

**Full Changelog**: https://github.com/langgenius/dify/compare/1.10.0...1.10.1

Related Repositories