github langgenius/dify 1.11.3
v1.11.3

6 hours ago

🚀 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

  • perf: using pipeline to delete redis cache by @fatelei in #30159
  • fix: update permission in member list caused page crash by @iamjoel in #30164
  • feat(refactoring): introduce comprehensive guidelines and tools for component refactoring in Dify by @CodingOnStar in #30162
  • fix: validate first then save to db by @fatelei in #30107
  • fix: load i18n on server by @hyoban in #30171
  • chore: some test by @iamjoel in #30148
  • fix(web): correct deleted tools matching to use provider_id instead of id by @majiayu000 in #30138
  • fix: add transparent border to prevent button size flickering by @Pleasurecruise in #30128
  • refactor: part of remove all reqparser by @asukaminato0721 in #29847
  • fix: fix metadata filter not survive a rename by @fatelei in #30174
  • feat: add mcp tool display directly by @fatelei in #30019
  • feat: allow config NEXT_PUBLIC_BATCH_CONCURRENCY by @fatelei in #30086
  • fix(dataset): dataset tags service_api error "Dataset not found" by @zhaobingshuang in #30028
  • refactor: split changes for api/controllers/console/workspace/load_ba… by @asukaminato0721 in #29887
  • refactor: split changes for api/controllers/console/explore/saved_mes… by @asukaminato0721 in #29889
  • refactor: split changes for api/controllers/console/explore/message.py by @asukaminato0721 in #29890
  • chore: bypass InsufficientPrivilege on Azure PostgreSQL by @fatelei in #30191
  • chore: some tests for components by @iamjoel in #30194
  • fix: use query param for delete method by @GareArc in #30206
  • fix: fix DatasetRetrieval._process_metadata_filter_func miss in operator by @fatelei in #30199
  • fix: fix missing not in by @fatelei in #30207
  • fix: retrieval test and knowledge retrieval node failed in multimodal mode by @JohnJyong in #30210
  • test(web): add unit tests for Avatar component by @SherlockShemol in #30201
  • fix: remove unused CSS styles and fix HitTestingPage layout by @WTW0313 in #30235
  • chore(web): remove unused dev-preview page by @sarxxt in #30226
  • fix: Add JSON RPC request type guard by @Nov1c444 in #30216
  • fix: consolidate duplicate InvokeRateLimitError definitions by @Mairuis in #30229
  • fix: wrong usage of redis lock by @NeatGuyCoding in #28177
  • chore(claude-code): migrate from legacy MCP configuration to official plugin system by @lyzno1 in #30265
  • fix: fix custom tool content is not update by @fatelei in #30250
  • fix(api): fix credential type handling and rebuild subscription transaction safety by @NeatGuyCoding in #30242
  • chore(deps): bump scheduler from 0.26.0 to 0.27.0 in /web by @dependabot[bot] in #30284
  • chore(deps): bump json-repair from 0.54.1 to 0.54.3 in /api by @dependabot[bot] in #30285
  • refactor(web): Migrate to Unified TanStack Devtools by @lyzno1 in #30279
  • fix: Workflow Start node optional enum parameter is treated as required by @hjlarry in #30287
  • feat: document batch operation tool add re-index operation by @fatelei in #30275
  • chore(sdk/nodejs): update deps by @hyoban in #30291
  • feat: MCP tool adds support for embeddedResource by @IthacaDream in #30261
  • fix(web): handle null/undefined message in log list by @majiayu000 in #30253
  • fix: release graph_runtime_state reference to prevent memory leak under high load by @SherlockShemol in #30236
  • fix(web): rollback React Scan dynamic import by @lyzno1 in #30294
  • refactor(query-state): migrate query param state management to nuqs by @lyzno1 in #30184
  • build: update github actions by @bowenliang123 in #30106
  • fix(template-transform): use base64 encoding for Jinja2 templates to fix #26818 by @devbyteai in #30223
  • refactor(web): drop swr and migrate share/chat hooks to tanstack query by @lyzno1 in #30232
  • refactor(i18n): use JSON with flattened key and namespace by @hyoban in #30114
  • feat: support tencent cos custom domain by @fatelei in #30193
  • test: add comprehensive tests for plugin authentication components by @CodingOnStar in #30094
  • fix(api): remove tool provider list cache to fix cache inconsistency by @Mairuis in #30323
  • chore: refactor config var and add tests by @iamjoel in #30312
  • chore: i18n namespace refactor in package.json and add missing translations by @lyzno1 in #30324
  • test: add some tests for marketplace by @CodingOnStar in #30326
  • refactor(web): organize devtools components by @lyzno1 in #30318
  • fix: restore draft version correctly in version history panel by @majiayu000 in #30296
  • feat: allow fail fast by @fatelei in #30262
  • feat: get plan bulk with cache by @hj24 in #30339
  • fix: update Korean translations for various components and improve cl… by @sangyun-han in #30347
  • fix: missing i18n translation for Trans by @hyoban in #30353
  • refactor(i18n): about locales by @hyoban in #30336
  • fix(i18n): load server namespaces by kebab-case by @lyzno1 in #30368
  • chore: remove useless __esModule by @hyoban in #30366
  • fix: fix provider_id is empty by @fatelei in #30374
  • fix: fix markdown escape issue by @fatelei in #30299
  • feat: integrate Google Analytics event tracking and update CSP for script sources by @CodingOnStar in #30365
  • refactor: Replace direct process.env.NODE_ENV checks with IS_PROD and IS_DEV constants. by @lyzno1 in #30383
  • feat: add oauth_new_user flag for frontend when user oauth login by @zyssyz123 in #30370
  • fix(web): template creation permission for app templates by @quicksandznzn in #30367
  • refactor: split changes for api/services/tools/api_tools_manage_servi… by @asukaminato0721 in #29899
  • fix: Incorrect REDIS ssl variable used for Celery causing Celery unable to start by @jasonfish568 in #29605
  • fix: keyword search now matches both content and keywords fields by @majiayu000 in #29619
  • fix: xxx render as xxx](xxx) by @fatelei in #30392
  • fix: workflow incorrectly marked as completed while nodes are still executing by @Chenyl-Sai in #30251
  • feat(web): migrate from es-toolkit/compat to native es-toolkit (#30244) by @lyzno1 in #30246
  • chore(deps): bump qs from 6.14.0 to 6.14.1 in /web by @dependabot[bot] in #30409
  • fix: Ensure chat history refreshes when switching back to conversations by @devbyteai in #30389
  • fix(web): enable JSON_OBJECT type support in console UI by @QuantumGhost in #30412
  • fix: correct useEducationStatus query cache configuration by @lyzno1 in #30416
  • fix: fix create app xss issue by @fatelei in #30305
  • chore: lint for react compiler by @hyoban in #30417
  • chore: update knip config and include in CI by @hyoban in #30410
  • feat: support image extraction in PDF RAG extractor by @yangzq50 in #30399
  • test: unify i18next mocks into centralized helpers by @hyoban in #30376
  • feat: add archive storage client and env config by @hjlarry in #30422
  • build: bring back babel-loader, add build check by @hyoban in #30427
  • chore: add jotai store by @hyoban in #30432
  • fix(web): stop thinking timer when user clicks stop button by @majiayu000 in #30442
  • refactor: migrate some ns.model to BaseModel by @asukaminato0721 in #30388
  • fix: fix when vision is disabled delete the configs by @fatelei in #30420
  • feat: add AgentMaxIterationError exc by @fatelei in #30423
  • chore: Standardized the OpenAI icon by @hjlarry in #30471
  • chore: remove icon_large of models by @hjlarry in #30466
  • feat: optimize for migration versions by @longbingljw in #28787
  • chore: remove redundant web/app/page.module.css by @lyzno1 in #30482
  • chore: integrate @tanstack/eslint-plugin-query and fix service layer lint errors by @lyzno1 in #30444
  • feat(refactoring): Support Structured Logging (JSON) by @41tair in #30170
  • feat: model total credits by @CodingOnStar in #26942
  • fix(plugins): enhance search to match name, label and description by @zhsama in #30501
  • ci: fix translate, allow manual dispatch by @hyoban in #30505
  • chore(i18n): translate i18n files based on en-US changes by @github-actions[bot] in #30508
  • refactor: more ns.model to BaseModel by @asukaminato0721 in #30445
  • chore: upgrade fickling to 0.1.6 by @laipz8200 in #30495
  • test: add unit tests for RagPipeline components by @CodingOnStar in #30429
  • feat: revert model total credits by @CodingOnStar in #30518
  • feat: add Ralph Wiggum plugin support by @lyzno1 in #30525
  • feat: add frontend code review skills by @iamjoel in #30520
  • refactor(web): align signup mail submit and tests by @lyzno1 in #30456
  • feat: enhance squid config by @fatelei in #30146
  • feat: skip rerank if only one dataset is retrieved by @fatelei in #30075
  • fix: when first setup after auto login error by @sszaodian in #30523
  • refactor(code_node): implement DI for the code node by @laipz8200 in #30519
  • docs: update comments in docker/.env.example by @longbingljw in #30516
  • chore: Update PR template lint command by @laipz8200 in #30533
  • refactor(workflow): add Jinja2 renderer abstraction for template transform by @laipz8200 in #30535
  • chore(deps-dev): bump intersystems-irispython from 5.3.0 to 5.3.1 in /api by @dependabot[bot] in #30540
  • chore: Add a new rule for import lint by @laipz8200 in #30526
  • feat: add flask command file-usage by @fatelei in #30500
  • chore: update dockerignore by @hsiong in #30460
  • fix: fix WorkflowExecution.outputs containing non-JSON-serializable o… by @fatelei in #30464
  • fix(api): surface subscription deletion errors to users by @Mairuis in #30333
  • fix: support to change NEXT_PUBLIC_BASE_PATH env using --build-arg in docker build by @darkelf21cn in #29836
  • feat: return data_source_info and data_source_detail_dict by @fatelei in #29912
  • fix: INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH settings by @hsiong in #30463
  • fix: fix db env not work by @fatelei in #30541
  • chore(deps): bump @amplitude/analytics-browser from 2.31.4 to 2.33.1 in /web by @dependabot[bot] in #30538
  • fix: #30511 [Bug] knowledge_retrieval_node fails when using Rerank Model: "Working outside of application context" and add regression test by @hsiong in #30549
  • refactor: use contains_any instead of Chaining where = where | f by @fatelei in #30559
  • chore(web): add ESLint rules for i18n JSON validation by @hyoban in #30491
  • refactor(models): Add mapped type hints to MessageAnnotation by @laipz8200 in #27751
  • chore(docker): update nltk data download process to include unstructured download_nltk_packages by @lework in #28876
  • chore: fix lint in i18n by @hyoban in #30571
  • feat(logstore): make graph field optional via env variable LOGSTORE… by @scdeng in #30554
  • feat(graph-engine): make layer runtime state non-null and bound early by @laipz8200 in #30552
  • feat(graph-engine): add command to update variables at runtime by @laipz8200 in #30563
  • chore: Harden API image Node.js runtime install by @laipz8200 in #30497
  • fix(api): refactors the SQL LIKE pattern escaping logic to use a centralized utility function, ensuring consistent and secure handling of special characters across all database queries. by @NeatGuyCoding in #30450
  • refactor: split changes for api/controllers/web/saved_message.py by @asukaminato0721 in #30583
  • refactor: split changes for api/controllers/web/conversation.py by @asukaminato0721 in #30582
  • fix: system model selector loading state flash by @lyzno1 in #30572
  • refactor: split changes for api/controllers/console/datasets/hit_test… by @asukaminato0721 in #30581
  • chore: remove unused link icon type by @GKTOKWR in #30469
  • feat: unified management stop event by @fatelei in #30479
  • refactor: port controllers/console/app/app.py by @asukaminato0721 in #30522
  • fix: correct docx hyperlink extraction by @yangzq50 in #30360
  • fix: allow unauthenticated CORS preflight for embedded bots by @Thebinary110 in #30587
  • feat: init rsc support for translation by @hyoban in #30596
  • feat: Add conversation variable persistence layer by @laipz8200 in #30531
  • fix: _model_to_insertion_dict missing id by @fatelei in #30603
  • refactor: clean type: ignore comments in login.py and template_transformer.py by @majiayu000 in #30510
  • refactor(api): inject sessionmaker into conversation variable updater by @laipz8200 in #30609
  • refactor: generate_url to support scenario to build url by @fatelei in #30598
  • fix(db): parameterize sessionmaker with Session by @laipz8200 in #30612
  • chore: bump pnpm version in packageManager by @lyzno1 in #30605
  • feat: use more universal C.UTF-8 instead of en_US.UTF-8 by @fatelei in #30621
  • feat: implement dataset creation step one with preview functionality by @CodingOnStar in #30507
  • refactor(web): migrate legacy forms to TanStack Form by @lyzno1 in #30631
  • fix: prevent empty state flash and add skeleton loading for app list by @lyzno1 in #30616
  • fix: flask db check fails due to nullable mismatch between migrations and models by @ltoppyl in #30474
  • refactor: restructure DatasetCard component for improved readability and maintainability by @CodingOnStar in #30617
  • refactor(api): clarify published RAG pipeline invoke naming by @laipz8200 in #30644
  • refactor: port api/fields/file_fields.py by @asukaminato0721 in #30638
  • chore: use from future import annotations by @sarxxt in #30254
  • chore: add skill creator for create agent skills by @lyzno1 in #30652
  • fix: add DB_TYPE environment variable to unit tests by @fghpdf in #30660
  • fix: fix not record access token by @fatelei in #30654
  • chore: rename ralph-wiggum plugin to ralph-loop by @lyzno1 in #30664
  • refactor(web): remove useMixedTranslation, better resource loading by @hyoban in #30630
  • fix: signin page stuck on loading when refresh token valid but access token expired by @lyzno1 in #30675
  • refactor: remove unnecessary type: ignore from rag_pipeline_fields.py by @fghpdf in #30666
  • fix: fix assign value stand as default by @fatelei in #30651
  • refactor(web): remove unused type alias VoiceLanguageKey by @fghpdf in #30694
  • feat(i18n): Migrate translation workflow to Claude Code GitHub Actions by @lyzno1 in #30692
  • refactor: split changes for api/controllers/console/workspace/trigger… by @asukaminato0721 in #30627
  • fix(workflow): pass correct user_from/invoke_from into graph init by @laipz8200 in #30637
  • fix(i18n): resolve Claude Code sandbox path issues in workflow by @lyzno1 in #30710
  • fix(web): resolve key-value input box height inconsistency on focus/blur (#30715) by @JunIce in #30716
  • feat: add decryption decorators for password and code fields in webapp by @GareArc in #30704
  • fix: web app login code encrypt by @douxc in #30705
  • feat: credit pool by @zyssyz123 in #30720
  • feat: model total credits by @CodingOnStar in #30727
  • fix(web): restrict postMessage targetOrigin from wildcard to specific origins by @xuwei95 in #30690
  • fix(web): resolve chat message loading race conditions and infinite loops by @MkDev11 in #30695
  • fix(ci): use repository_dispatch for i18n sync workflow by @lyzno1 in #30744
  • chore(i18n): sync translations with en-US by @github-actions[bot] in #30750
  • feat: implement step two of dataset creation with comprehensive UI components and hooks by @CodingOnStar in #30681
  • feat(embedding-process): implement embedding process components and polling logic by @CodingOnStar in #30622
  • feat(workflows): add agent-dev deploy workflow by @Mairuis in #30774
  • fix: fix enhance app mode check by @fatelei in #30758
  • fix(web): invalidate app list cache after deleting app from detail page by @majiayu000 in #30751
  • refactor: marketplace state management by @hyoban in #30702
  • revert: "fix: fix assign value stand as default (#30651)" by @QuantumGhost in #30717
  • feat: enhance start node object value check by @fatelei in #30732
  • feat(web): migrate PWA to Serwist by @hyoban in #30808
  • refactor(models): Refine MessageAgentThought SQLAlchemy typing by @laipz8200 in #27749
  • fix: Broken import in .storybook/preview.tsx by @fatelei in #30812
  • fix: fix refresh token deadlock by @fatelei in #30828
  • fix: drop useless pyrefly in ci by @yihong0618 in #30826
  • chore(deps-dev): bump @storybook/react from 9.1.13 to 9.1.17 in /web by @dependabot[bot] in #30833
  • chore(deps-dev): bump tos from 2.7.2 to 2.9.0 in /api by @dependabot[bot] in #30834
  • docs(web): add corepack recommendation by @hyoban in #30837
  • feat: add block-no-verify hook for Claude Code by @Lemonadeccc in #30839
  • refactor(web): extract isServer/isClient utility & upgrade Node.js to 22.12.0 by @lyzno1 in #30803
  • ci: add HITL test env deployment action by @QuantumGhost in #30846
  • build: limit esbuild, glob, docker base version to avoid cve by @hyoban in #30848
  • feat: clear free plan workflow run logs by @hjlarry in #29494
  • fix(api): defer streaming response until referenced variables are updated by @QuantumGhost in #30832
  • fix: use node factory for single-step workflow nodes by @hjlarry in #30859
  • feat(ops): set root span kind for AliyunTrace to enable service-level metrics aggregation by @hieheihei in #30728
  • fix: entrypoint.sh overrides NEXT_PUBLIC_TEXT_GENERATION_TIMEOUT_MS when TEXT_GENERATION_TIMEOUT_MS is unset (#30864) by @hsiong in #30865
  • fix: fix formatNumber accuracy by @fatelei in #30877
  • fix(amplitude): update sessionReplaySampleRate default value to 0.5 by @CodingOnStar in #30880
  • fix: missing content if assistant message with tool_calls by @leslie2046 in #30083
  • fix: fix object value is optional should skip validate by @fatelei in #30894
  • chore: rename the migration file by @hjlarry in #30893
  • fix(web): add null check for SSE stream bufferObj to prevent TypeError by @majiayu000 in #30131
  • fix: In the LLM model in dify, when a message is added, the first cli… by @zhichenghouse in #29540
  • chore: case insensitive email by @hjlarry in #29978
  • refactor(web): setup status caching by @lyzno1 in #30798
  • chore: Bump Dify version to 1.11.3 by @laipz8200 in #30903

New Contributors

Full Changelog: 1.11.2...1.11.3

Don't miss a new dify release

NewReleases is sending notifications on new releases.