github langgenius/dify 1.11.2
v1.11.2

7 hours ago

🌟 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 @fatelei in #29621
  • chore: skip upload_file_id is missing by @fatelei in #29666
  • chore: add online drive metadata source enum by @quicksandznzn in #29674
  • fix: update chat wrapper components to use min-h instead of h for better responsiveness by @hangboss1761 in #29687
  • test: enhance DebugWithMultipleModel component test coverage by @lyzno1 in #29657
  • chore: some tests for configuration components by @iamjoel in #29653
  • test: enhance workflow-log component tests with comprehensive coverage by @lyzno1 in #29616
  • test: add comprehensive frontend tests for billing plan assets by @lyzno1 in #29615
  • test: try to use Anthropic Skills to add tests for web/app/components/apps/ by @lyzno1 in #29607
  • feat: VECTOR_STORE supports seekdb by @longbingljw in #29658
  • refactor: create shared react-i18next mock to reduce duplication by @lyzno1 in #29711
  • test: add comprehensive Jest test for CreateAppTemplateDialog component by @lyzno1 in #29713
  • test: add unit tests for DocumentPicker, PreviewDocumentPicker, and R… by @CodingOnStar in #29695
  • feat: add GraphEngine layer node execution hooks by @hieheihei in #28583
  • chore: webhook with bin file should guess mimetype by @hjlarry in #29704
  • test: add comprehensive Jest tests for CustomPage and WorkflowOnboardingModal components by @lyzno1 in #29714
  • revert: "security/fix-swagger-info-leak-m02" by @crazywoola in #29721
  • test: add comprehensive tests for CustomizeModal component by @lyzno1 in #29709
  • chore: Disable Swagger UI by default in docker samples by @laipz8200 in #29723
  • chore: tests for billings by @iamjoel in #29720
  • test: add comprehensive unit tests for APIKeyInfoPanel component by @lyzno1 in #29719
  • feat: Remove TLS 1.1 from default NGINX protocols by @laipz8200 in #29728
  • test: Add comprehensive Jest test for AppCard component by @lyzno1 in #29667
  • test: Stabilize sharded Redis broadcast multi-subscriber test by @laipz8200 in #29733
  • chore: tests for components in config by @iamjoel in #29739
  • Feat/update notion preview by @JohnJyong in #29345
  • fix: Login secret text transmission by @zyssyz123 in #29659
  • fix: oxlint no unused expressions by @Angel98518 in #29675
  • feat: _truncate_json_primitives support file by @fatelei in #29760
  • fix: add Slovenian and Tunisian Arabic translations across multiple language files by @ZeroZ-lab in #29759
  • ci: show missing lines in coverage report summary by @laipz8200 in #29717
  • chore: add tests for config string and dataset card item by @lyzno1 in #29743
  • chore(web): add some jest tests by @lyzno1 in #29754
  • feat: add automated tests for pipeline setting by @CodingOnStar in #29478
  • feat: add datasource_parameters handling for API requests by @r-hashi01 in #29757
  • feat: Add "type" field to PipelineRecommendedPlugin model; Add query param "type" to recommended-plugins api. by @FFXN in #29736
  • chore: tests form add annotation by @iamjoel in #29770
  • chore: tests for webapp run batch by @iamjoel in #29767
  • feat: Add Aliyun SLS (Simple Log Service) integration for workflow execution logging by @adongfan in #28986
  • feat: update RAG recommended plugins hook to accept type parameter by @WTW0313 in #29735
  • fix: detect_file_encodings TypeError: tuple indices must be integers or slices, not str by @zhaobingshuang in #29595
  • test(api): add a test for detect_file_encodings by @fatelei in #29778
  • chore: tests for app agent configures by @iamjoel in #29789
  • fix: Correct French grammar by @ttaylorr1 in #29793
  • fix(deps): restore charset_normalizer, revert accidental chardet reintroduction by @adongfan in #29782
  • chore: scope docs CODEOWNERS by @laipz8200 in #29813
  • chore: add some jest tests by @lyzno1 in #29800
  • chore: compatiable opendal modify by @fatelei in #29794
  • test: add comprehensive unit tests for JinaReader and WaterCrawl comp… by @CodingOnStar in #29768
  • chore(web): add some tests by @lyzno1 in #29772
  • test: add unit tests for DatasetConfig component with comprehensive coverage of rendering, dataset management, context variables, and metadata filtering by @lyzno1 in #29779
  • chore: add AppTypeSelector tests and improve clear button accessibility by @lyzno1 in #29791
  • fix: remove unnecessary min-width css style from AllTools and Blocks components by @wcc0077 in #29810
  • fix: mermaid graph xss problem by @laipz8200 in #29811
  • fix: drop some dead links by @yihong0618 in #29827
  • fix: TypeError: outputParameters is not iterable by @crazywoola in #29833
  • feat: add billing subscription plan api by @hj24 in #29829
  • chore: tests for goto anything by @iamjoel in #29831
  • feat: sandbox retention basic settings by @hj24 in #29842
  • fix: fix json object validate by @fatelei in #29840
  • fix(theme): make sticky headers opaque in dark mode (Monaco sticky sc… by @nourzakhama2003 in #29826
  • ci: add detailed test coverage report for web by @lyzno1 in #29803
  • fix: plugin execution timeout not respecting PLUGIN_MAX_EXECUTION_TIMEOUT by @hukurou0 in #29785
  • feat: show generate speed in chatbot by @leslie2046 in #29602
  • chore: tests for annotation by @iamjoel in #29851
  • perf: decrease db query by @fatelei in #29837
  • chore(codeowners): add migrations code owner by @laipz8200 in #29864
  • chore(web): enhance frontend tests by @lyzno1 in #29859
  • fix: fix fixed_separator by @fatelei in #29861
  • refactor: part of remove all reqparser by @asukaminato0721 in #29848
  • chore(web): enhance tests follow the testing.md and skills by @lyzno1 in #29841
  • fix(api): resolve errors when setting visibility to partial members by @quicksandznzn in #29830
  • refactor: implement SettingsModal with retrieval settings and add tests for RetrievalChangeTip component by @lyzno1 in #29786
  • chore: enhance Jest setup and add new tests for dataset creation components by @CodingOnStar in #29825
  • fix 29184 by @leslie2046 in #29188
  • chore: tests for configuration by @iamjoel in #29870
  • refactor: split changes for api/controllers/web/audio.py by @asukaminato0721 in #29856
  • chore(web): enhance frontend tests by @lyzno1 in #29869
  • chore(deps-dev): bump storybook from 9.1.13 to 9.1.17 in /web by @dependabot[bot] in #29906
  • refactor: split changes for api/libs/helper.py by @asukaminato0721 in #29875
  • perf: improve Jest caching and configuration in web tests by @lyzno1 in #29881
  • refactor: unified cn utils by @hyoban in #29916
  • refactor: split changes for api/controllers/web/completion.py by @asukaminato0721 in #29855
  • chore: update packageManager version in package.json to pnpm@10.26.1 by @lyzno1 in #29918
  • feat(tests): add comprehensive tests for Processing and EmbeddingProcess components by @CodingOnStar in #29873
  • fix: workflow log search input controlled state by @lyzno1 in #29930
  • chore: add some tests case code by @iamjoel in #29927
  • refactor: migrate common service toward TanStack Query by @lyzno1 in #29009
  • test: Adding missing tests or correcting existing tests by @CodingOnStar in #29937
  • refactor: split changes for api/tests/test_containers_integration_tes… by @asukaminato0721 in #29897
  • refactor: split changes for api/controllers/console/explore/completio… by @asukaminato0721 in #29894
  • chore: Add codeowner for web test, vdb and docker by @laipz8200 in #29948
  • chore: add symlink for skills directory and update autofix workflow exclusion pattern by @lyzno1 in #29953
  • fix: add RFC 9728 compliant well-known URL discovery with path insertion fallback by @Nov1c444 in #29960
  • fix: update Notion credential retrieval in document indexing sync task by @nht1206 in #29933
  • feat: first use INTERNAL_FILES_URL first, then FILES_URL by @fatelei in #29962
  • fix: validate API key is not empty in HTTPRequest node by @AziizBg in #29950
  • fix: clear uploaded files when clicking clear button in workflow by @GuangjingYan in #29884
  • refactor: split changes for api/controllers/console/explore/installed… by @asukaminato0721 in #29891
  • refactor: split changes for api/controllers/console/explore/conversat… by @asukaminato0721 in #29893
  • fix: invalidate tool provider cache after MCP authentication by @Nov1c444 in #29972
  • chore(deps): bump immer from 10.2.0 to 11.1.0 in /web by @dependabot[bot] in #29969
  • refactor(web): migrate to Vitest and esm by @hyoban in #29974
  • fix: CODEOWNERS web path scope by @laipz8200 in #29995
  • chore: bump plugin daemon image tag to 0.5.2-local by @laipz8200 in #29993
  • feat: Configure devcontainer with /tmp volume mount, vscode remote user, and post-start script updates. by @ZeroZ-lab in #29986
  • perf: optimize DatasetRetrieval.retrieve、RetrievalService._deduplicat… by @fatelei in #29981
  • refactor: split changes for api/controllers/web/app.py by @asukaminato0721 in #29857
  • fix: adjust padding in entry node container for better alignment by @ZeroZ-lab in #29999
  • fix: preserve empty list for FILE_LIST type in base_app_generator by @majiayu000 in #29618
  • chore(deps): bump pypdfium2 from 4.30.0 to 5.2.0 in /api by @dependabot[bot] in #29639
  • refactor: split changes for api/controllers/web/message.py by @asukaminato0721 in #29874
  • feat: support var filer in conversation service by @fatelei in #29245
  • feat: Add OSS-specific parameters for HW and ALI private deployment by @myg133 in #29705
  • chore: anchor CODEOWNERS paths to root by @laipz8200 in #29998
  • fix(chat): reset scroll state when switching conversations by @majiayu000 in #29984
  • fix: invite team member display issue by @hjlarry in #30011
  • chore: remove unused login call from activation flow by @hjlarry in #30017
  • chore: Translate stray Chinese comment to English by @hjlarry in #30024
  • chore(web): new lint setup by @hyoban in #30020
  • feat: Add polyfill for Array.prototype.toSpliced method by @CodingOnStar in #30031
  • chore: lint require and how to import react by @hyoban in #30041
  • fix: YAML URL import rewrite for GitHub attachments by @laipz8200 in #30003
  • chore: enable ts/no-explicit-any, remove no-unused-vars by @hyoban in #30042
  • feat: grace ful close the connection by @fatelei in #30039
  • fix(ops): correct LangSmith dotted_order timestamp format by @ericko-being in #30022
  • fix: when use forward proxy with httpx, httpx will overwrite the use … by @fatelei in #30029
  • feat: allow user close the tab to sync the draft by @fatelei in #30034
  • refactor: split changes for api/controllers/web/remote_files.py by @asukaminato0721 in #29853
  • refactor: nodejs sdk by @lyzno1 in #30036
  • fix: fix firecrawl url concat by @fatelei in #30008
  • refactor: split changes for api/controllers/console/extension.py by @asukaminato0721 in #29888
  • refactor: split changes for api/controllers/web/forgot_password.py by @asukaminato0721 in #29858
  • feat(docker): add environment variables synchronization tool by @sattosan in #29845
  • fix: handle missing credential_id by @nht1206 in #30051
  • fix: loop streaming by clearing stale subgraph variables by @Nov1c444 in #30059
  • chore: some tests by @iamjoel in #30078
  • refactor(web): migrate log service to TanStack Query by @lyzno1 in #30065
  • chore: some tests by @iamjoel in #30084
  • chore: fix type check for i18n by @hyoban in #30058
  • refactor(web): migrate explore app lists from useSWR to TanStack Query by @lyzno1 in #30076
  • chore: no template string in translation by @hyoban in #30101
  • fix: fix use build_request lead unexpect param by @fatelei in #30095
  • fix(web): remove incorrect placeholderData usage in useExploreAppList by @lyzno1 in #30102
  • refactor(web): migrate workflow run history from useSWR to TanStack Query by @lyzno1 in #30077
  • feat: add editing support for trigger subscriptions by @Mairuis in #29957
  • fix: trigger subscription delete not working for non-auto-created credentials by @Mairuis in #30122
  • chore(web): migrate lodash-es to es-toolkit compat by @lyzno1 in #30126
  • fix: handle list content type in Parameter Extraction node by @krap730 in #30070
  • fix: allow None values in VariableMessage validation by @krap730 in #30082
  • test: Add comprehensive test suite for Chip component by @SherlockShemol in #30119
  • ci: generate docker compose in autofix by @laipz8200 in #30105
  • feat(web): add unit tests for Badge component by @SherlockShemol in #30096
  • fix(api): force download for HTML previews by @laipz8200 in #30090
  • fix: workflow past version data sync by @zxhlyh in #30139
  • chore: some test by @iamjoel in #30144
  • feat: make the SegmentService.get_segments sort stable by @fatelei in #30152
  • chore: bump version to 1.11.2 by @laipz8200 in #30088
  • fix(api): move cache invalidation outside redis lock to prevent timeout by @Mairuis in #30150
  • fix: prioritize copying selected text by @JeeekXY in #30141
  • fix(web): disable cache for trigger dynamic select options by @Mairuis in #30161

New Contributors

Full Changelog: 1.11.1...1.11.2

Don't miss a new dify release

NewReleases is sending notifications on new releases.