github langgenius/dify 1.9.2
v1.9.2 - Sharper, Faster, and More Reliable

one day ago

This release focuses on improving stability, async performance, and developer experience. Expect cleaner internals, better workflow control, and improved observability across the stack.


Warning

A recent change has modernized the Dify integration for Weaviate (see PR #25447 and related update in PR #26964). The upgrade switches the Weaviate Python client from v3 to v4 and raises the minimum required Weaviate server version to 1.24.0 or newer. With this update:

  • If you are running an older Weaviate server (e.g., v1.19.0), you must upgrade your server to at least v1.24.0 before updating Dify.
  • The code now uses the new client API and supports gRPC for faster operations, which may require opening port 50051 in your Docker Compose files.
  • Data migration between server versions may require re-indexing using Weaviate’s Cursor API or standard backup/restore procedures.
  • The Dify documentation will be updated to provide migration steps and compatibility guidance.

Action required:

  • Upgrade your Weaviate server to v1.24.0 or higher.
  • Follow the migration guide to update your data and Docker configuration as described in the latest official Dify documentation.
  • Ensure your environment meets the new version requirements before deploying Dify updates.

✨ Highlights

Workflow & Agents

Integrations & SDK

Web & UI

  • Faster load times by splitting and lazy‑loading constant files (by @yangzheli in #26794)
  • Improved DataSources with marketplace plugin integration and filtering (by @WTW0313 in #26810)
  • Added tax tooltips to pricing footer (by @CodingOnStar in #26705)
  • Account creation now syncs interface language with display settings (by @feelshana in #27042)

⚙️ Core Improvements


🧩 Fixes


🧹 Cleanup & DevX


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

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.9.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/Refactor] Implement lazy initialization for useState calls to prevent re-computation by @Copilot in #26252
  • Refactor: Use @ns.route for tags API by @asukaminato0721 in #26357
  • chore: translate i18n files and update type definitions by @github-actions[bot] in #26440
  • Fix: Enable Pyright and Fix Typing Errors in Datasets Controller by @asukaminato0721 in #26425
  • minor fix: fix some translations: trunk should use native, and some translation typos by @NeatGuyCoding in #26469
  • Fix typing errors in core/model_runtime by @asukaminato0721 in #26462
  • fix single-step runs support user input as structured_output variable values by @goofy-z in #26430
  • Refactor: Enable type checking for core/ops and fix type errors by @asukaminato0721 in #26414
  • improve: Explicitly delete task Redis key on completion in AppQueueManager by @Blackoutta in #26406
  • chore: bump pnpm version by @lyzno1 in #26010
  • Fix a typo in prompt by @casio12r in #25583
  • fix: duplicate chunks by @kenwoodjw in #26360
  • support returning structured output when using LLM API non streaming invocation by @goofy-z in #26451
  • fix: duplicate data in datasets pagination list by @zlyszx in #25783
  • fix: document is not bound to a session by @quicksandznzn in #26480
  • feat(web): remove dead dependencies by @asukaminato0721 in #26484
  • fix: style with self-start by @crazywoola in #26492
  • add back babel/core by @asukaminato0721 in #26489
  • minor fix: improve check_upgradable_plugin_task.py by @NeatGuyCoding in #26468
  • Fix: Remove workflow/nodes from pyright exclusion by @asukaminato0721 in #26461
  • chore: remove pnpm build from dev-setup command by @laipz8200 in #26504
  • fix(datasets): Resolve issue where selected list is not updated when deleting a single file by @HyaCiovo in #26502
  • fix: add missing key prop to TabPanel and initialize useRef with null by @lyzno1 in #26517
  • chore(devcontainer): update Python base image from bullseye to bookworm in Dockerfile by @rluncasu in #26519
  • Feature add test containers enable segments to index task by @NeatGuyCoding in #26539
  • chore(web): update Next.js to 15.5.4 and unify Lexical to 0.36.2 by @lyzno1 in #26541
  • Revert "fix: sync FileUploader context with props to fix inconsistent file parameter state in “View cached variables”." by @crazywoola in #26548
  • Exclude tests directory from pyright type checking by @asukaminato0721 in #26496
  • fix: delete useless db session commit by @yihong0618 in #26572
  • Feature add test containers mail email code login task by @NeatGuyCoding in #26580
  • Feature add test containers mail account deletion task 1858 by @NeatGuyCoding in #26555
  • refactor(docs): Reorganize documentation with standard language codes by @lyzno1 in #26534
  • chore: update Dockerfile to use Python 3.12-bookworm and refactor layout logic to utilize ELK for improved node layout by @ZeroZ-lab in #26522
  • Removes the 'extensions' directory from pyrightconfig.json and fixes … by @asukaminato0721 in #26512
  • chore: fix basedwright style warning for opendal.layers imports by @bowenliang123 in #26596
  • chore: Raise default string length limits by @laipz8200 in #26592
  • chore: Avoid directly using OpenAI dependencies by @IthacaDream in #26590
  • chore: remove explicit dependency on the fastapi framework by @IthacaDream in #26609
  • chore(deps): bump react-easy-crop from 5.5.0 to 5.5.3 in /web by @dependabot[bot] in #26602
  • chore(deps): bump azure-storage-blob from 12.13.0 to 12.26.0 in /api by @dependabot[bot] in #26603
  • delete unnecessary db merge by @IthacaDream in #26588
  • Feature add test containers mail change mail task by @NeatGuyCoding in #26570
  • Feature add test containers mail inner task by @NeatGuyCoding in #26622
  • fix bug 26613: get wrong credentials with multiple authorizations plugin by @dickens88 in #26615
  • fix: two functions comments doc is not right by @yihong0618 in #26624
  • chore(deps-dev): bump babel-loader from 9.2.1 to 10.0.0 in /web by @dependabot[bot] in #26601
  • chore(deps): bump esdk-obs-python from 3.24.6.1 to 3.25.8 in /api by @dependabot[bot] in #26604
  • feat: optimize the page jump logic to prevent unnecessary jumps. by @ruanimal in #26481
  • perf(web): improve app workflow build performance. by @zhyd1997 in #26310
  • refactor: Enable type checking for dataset config manager by @asukaminato0721 in #26494
  • feat: remove unused python dependency by @asukaminato0721 in #26629
  • Feature add test containers mail invite task by @NeatGuyCoding in #26637
  • chore: improve bool input of start node by @hjlarry in #26647
  • fix: missing LLM node output var description by @hjlarry in #26648
  • fix oxlint warnings by @asukaminato0721 in #26634
  • fix: drop useless logger code by @yihong0618 in #26650
  • feat: add HTTPX client instrumentation for OpenTelemetry by @qiqizjl in #26651
  • fix: check allowed file extensions in rag transform pipeline and use set type instead of list for performance in file extensions by @bowenliang123 in #26593
  • Refactor: Remove reportUnnecessaryContains from pyrightconfig.json by @asukaminato0721 in #26626
  • fix: add missing toType to toolCredentialToFormSchemas by @jingfelix in #26681
  • refactor(types): remove any usages and strengthen typings across web and base by @ZeroZ-lab in #26677
  • Refactor: Remove unnecessary casts and tighten type checking by @asukaminato0721 in #26625
  • feat: update HTTP timeout configurations and enhance timeout input handling in UI by @linancn in #26685
  • fix: restore array flattening behavior in iteration node by @Nov1c444 in #26695
  • fix: drop useless logic by @yihong0618 in #26678
  • fix: issue w/ timepicker by @crazywoola in #26696
  • feat(billing): add tax information tooltips in pricing footer by @CodingOnStar in #26705
  • Fix/tool provider tag internationalization by @qiaofenlin in #26710
  • Update deploy-dev.yml by @JohnJyong in #26712
  • chore: translate i18n files and update type definitions by @github-actions[bot] in #26709
  • refactor(api): add new endpoints for workspace management and update routing by @liugddx in #26465
  • fix chunks 2 by @jubinsoni in #26623
  • Refactor account models to use SQLAlchemy 2.0 dataclass mapping by @asukaminato0721 in #26415
  • feat: Refactor api.add_resource to @console_ns.route decorator by @asukaminato0721 in #26386
  • Fix/token exp when exchange main by @GareArc in #26708
  • use model_validate by @asukaminato0721 in #26182
  • fix: restore None guards for _environment_variables/_conversation_variables getters by @ACAne0320 in #25633
  • removing horus eye and adding mcp icon by @jubinsoni in #25323
  • pan and zoom during workflow execution by @jubinsoni in #24254
  • chore: bump ruff to 0.14 by @bowenliang123 in #26063
  • fix: #26668 restore manual tool parameter values by @Zedk42 in #26733
  • chore: update packageManager version in package.json to pnpm@10.18.2 by @ZeroZ-lab in #26731
  • fix: sync aliyun icon SVG files by @hieheihei in #26719
  • fix: add z-index class to PortalToFollowElemContent for proper layering in dataset extra info component by @ZeroZ-lab in #26729
  • fix: Set ApiTool’s do_http_request to do not retry. by @jiangbo721 in #26721
  • part of add type to orm by @asukaminato0721 in #26262
  • change all to httpx by @asukaminato0721 in #26119
  • remove .value by @asukaminato0721 in #26633
  • Feature integrate alibabacloud mysql vector by @wangype in #25994
  • chore(workflows): update deployment configurations for trigger dev by @Mairuis in #26753
  • chore: remove unused dependencies for dagre from package.json and pnpm-lock.yaml by @ZeroZ-lab in #26755
  • feat: add tracking for updated_by and updated_at fields in app models by @liugddx in #26736
  • feat: add InlineDeleteConfirm base component by @lyzno1 in #26762
  • chore: translate i18n files and update type definitions by @github-actions[bot] in #26763
  • feat: migrate Python SDK to httpx with async/await support by @lyzno1 in #26726
  • fix enum and type by @NeatGuyCoding in #26756
  • refactor: simplify InlineDeleteConfirm component structure by @lyzno1 in #26771
  • fix: happy-dom version by @crazywoola in #26764
  • chore(deps): bump @lexical/utils from 0.36.2 to 0.37.0 in /web by @dependabot[bot] in #26801
  • chore(deps-dev): bump knip from 5.64.1 to 5.64.3 in /web by @dependabot[bot] in #26802
  • chore(deps): bump opik from 1.7.43 to 1.8.72 in /api by @dependabot[bot] in #26804
  • Fix typo: reponse to response by @opeco17 in #26792
  • Issue 23579 by @asukaminato0721 in #26777
  • perf(web): split constant files to improve web performance by @yangzheli in #26794
  • refactor: use dynamic max characters for chunking in extractors by @liugddx in #26782
  • fix RetrievalMethod StrEnum by @asukaminato0721 in #26768
  • refactor: use libs.login current_user in console controllers by @AsperforMias in #26745
  • feat: enhance DataSources component with marketplace plugin integration and search filtering by @WTW0313 in #26810
  • fix: update tooltip for chunk structure in knowledge base component by @WTW0313 in #26808
  • fix: invalid data source list in plugin refresh hook by @WTW0313 in #26813
  • fix: external knowledge url check ssrf by @mrdear in #26789
  • fix: use enum .value strings in retrieval-setting API to fix JSON serialization error by @qiaofenlin in #26785
  • Fix/web app permission check by @douxc in #26821
  • chore: Correct padding in embedded chatbot by @DavideDelbianco in #26832
  • fix: Don't hide chat streaming loader on '\n' content by @DavideDelbianco in #26829
  • fix: avoid closing shared session during embeddings by @minglu7 in #26830
  • chore: Fix chat-input-area resize by @DavideDelbianco in #26824
  • feat: Cache AppQueueManager.is_stopped() to reduce unnecessary Redis … by @ruanimal in #26778
  • chore: Don't show chat input area scrollbar overflow by @DavideDelbianco in #26828
  • chore: Fix 25795 by @DavideDelbianco in #26823
  • fix: files/support-type JSON serialization error by @hieheihei in #26842
  • Use hook to get userid by @asukaminato0721 in #26839
  • fix: Chat Opener visibility flickering by @DavideDelbianco in #26836
  • refactor: streamline database session usage in batch_create_segment_to_index_task by @liugddx in #26795
  • Add timeout so any plugin daemon call (including the SSE path) that legitimately takes longer than 5s would right. by @Eric-Guo in #26852
  • Feature add test containers mail owner transfer task by @NeatGuyCoding in #26854
  • fix: Validate transfer method in file mapping and improve file input handling by @liugddx in #26848
  • fix: Do not show the toggle button for chat input when all input hidden by @DavideDelbianco in #26826
  • feat: add Tencent Cloud APM tracing integration by @minimAluminiumalism in #25657
  • Weaviate update version by @DhruvGorasiya in #25447
  • chore: translate i18n files and update type definitions by @github-actions[bot] in #26859
  • fix: use account id in workflow app log filter by @hj24 in #26811
  • feat: add Knip configuration for dead code detection and remove unused icon components by @ZeroZ-lab in #26758
  • fix: correct indentation in JSON payloads by @ZeroZ-lab in #26871
  • fix: when create provider credential set the provider record to vaild by @hjlarry in #26868
  • example to auto rollback by @asukaminato0721 in #26200
  • Remove unused after_request hooks from console API keys by @laipz8200 in #26896
  • Fix/remove logo in withoutbrand template by @TonloOO in #26882
  • minor fix: test cases for alibabacloud mysql and chinese translations by @NeatGuyCoding in #26902
  • Normalize null metadata handling in tool entities by @laipz8200 in #26890
  • fix: replace CodeGroup's POST /meta with GET /site by @yamachu in #26886
  • chore: bump pnpm version by @lyzno1 in #26905
  • chore: remove redundant dependencies by @Nov1c444 in #26907
  • fix: workflow token usage by @kenwoodjw in #26723
  • refactor: Update Firecrawl to use v2 API by @ftonato in #24734
  • allow editing of hidden inputs in preview by @jubinsoni in #24370
  • feat(agent): similar to the start node of workflow, agent variables also support drag-and-drop by @yangzheli in #26899
  • chore: translate i18n files and update type definitions by @github-actions[bot] in #26916
  • chore: add type-check script to package.json for TypeScript validation by @ZeroZ-lab in #26929
  • fix: enhance dataset menu and add service API translations by @WTW0313 in #26931
  • Fix: check external commands after node completion by @laipz8200 in #26891
  • chore: remove unused icon components and related features from the co… by @ZeroZ-lab in #26933
  • add app mode for message by @zyssyz123 in #26876
  • fix plugin installation permissions when using a local pkg by @zhangx1n in #26822
  • feat: run with params from logs by @wellCh4n in #26787
  • fix: update load balancing configurations with new credential IDs and… by @GareArc in #26900
  • use deco to avoid current_user by @asukaminato0721 in #26077
  • refactor: update TypeScript definitions for custom JSX elements and clean up global declarations in emoji picker by @ZeroZ-lab in #26985
  • Fix: avoid duplicate response_chunk update in convert_stream_simple_response by @hyongtao-code in #26965
  • Update email templates to improve clarity and consistency in messagin… by @GareArc in #26970
  • Fix dispatcher idle hang and add pytest timeouts by @laipz8200 in #26998
  • refactor: improve TypeScript types for NodeCardProps and debug configuration context by @ZeroZ-lab in #27001
  • Fixed Weaviate no module found issue (issue #26938) by @DhruvGorasiya in #26964
  • fix: logical error in Weaviate distance calculation by @DhruvGorasiya in #27019
  • Chore: remove unused class-level variables in DatasourceManager by @hyongtao-code in #27011
  • Fix: User Context Loss When Invoking Workflow Tool Node in Knowledge … by @quicksandznzn in #26495
  • fix 27003 by @asukaminato0721 in #27005
  • fix: remove unnecessary properties from condition draft by @liugddx in #27009
  • Restore coverage for skipped workflow tests by @laipz8200 in #27018
  • Fix type error by @ZeroZ-lab in #27024
  • fix: happy-dom security issues by @iamjoel in #27037
  • fix: show 'Invalid email or password' error tip when web app login failed by @douxc in #27034
  • Feature: add test containers based tests for mail register tasks by @NeatGuyCoding in #27040
  • Fix type error by @ZeroZ-lab in #27044
  • fix: update TopK and Score Threshold components to use InputNumber and improve value handling by @WTW0313 in #27045
  • fix: improve URL validation logic in validateRedirectUrl function by @ZeroZ-lab in #27058
  • Chore: remove redundant tenant lookup in APIBasedExtensionAPI.post by @hyongtao-code in #27067
  • fix: allow optional config parameter and conditionally include message file ID by @liugddx in #26960
  • feat: implement strict type validation for remote file uploads by @liugddx in #27010
  • fix: #27063 by @fatelei in #27074
  • Sync same logic for datasets. by @Eric-Guo in #27056
  • Fix json in md when use quesion classifier node by @rouxiaomin in #26992
  • Fix type-check error by @ZeroZ-lab in #27051
  • Feat/add status filter to workflow runs by @twjackysu in #26850
  • fix(web): resolve TypeScript type errors in workflow components by @ZeroZ-lab in #27086
  • doc: add Grafana dashboard template link to docs by @bowenliang123 in #27079
  • fluent api by @asukaminato0721 in #27093
  • fix(api): ensure JSON responses are properly serialized in ApiTool by @QuantumGhost in #27097
  • refactor: replace localStorage with HTTP-only cookies for auth tokens by @laipz8200 in #24365
  • feat(graph_engine): Support pausing workflow graph executions by @laipz8200 in #26585
  • docs: mention backend lint gate in AGENTS by @laipz8200 in #27102
  • chore(deps): bump @lexical/selection from 0.36.2 to 0.37.0 in /web by @dependabot[bot] in #27108
  • chore(deps): bump html-to-image from 1.11.11 to 1.11.13 in /web by @dependabot[bot] in #27109
  • chore(deps): bump pydantic-settings from 2.9.1 to 2.11.0 in /api by @dependabot[bot] in #27114
  • chore(deps-dev): bump cross-env from 7.0.3 to 10.1.0 in /web by @dependabot[bot] in #27112
  • chore(deps): bump immer from 9.0.21 to 10.1.3 in /web by @dependabot[bot] in #27113
  • chore: improve storybook by @hjlarry in #27111
  • Fix frontend type error by @ZeroZ-lab in #27116
  • Revert "chore(deps): bump immer from 9.0.21 to 10.1.3 in /web" by @crazywoola in #27119
  • fix: handle None values in dataset and document deletion logic by @liugddx in #27083
  • fix: update attribute types to allow undefined values in icon utilities by @ZeroZ-lab in #27121
  • Ensure suggested questions parser returns typed sequence by @laipz8200 in #27104
  • fix: immer version and ref in code base by @crazywoola in #27130
  • fix variable-truncator max size comments by @hj24 in #27129
  • fix: support structured output in streaming mode for LLM node by @white-loub in #27089
  • fix: delete migrate sync data script by @zyssyz123 in #27061
  • fix(web): improve UI consistency and remove related unused icons by @yangzheli in #27004
  • fix: ensure document re-querying in indexing process for consistency by @liugddx in #27077
  • Fix type error 5 by @ZeroZ-lab in #27139
  • feat(web): Add parameter rendering to MCP tool item component by @croatialu in #27099
  • Allow custom app headers in CORS configuration by @laipz8200 in #27133
  • chore: translate i18n files and update type definitions by @github-actions[bot] in #27141
  • chore: use new api to check login status by @iamjoel in #27143
  • chore: add more stories by @hjlarry in #27142
  • fix: parameter extractor instructions placeholder not replaced (#26235) by @fengb3 in #27135
  • Fix type error by @ZeroZ-lab in #27152
  • fix: infinite reload by @iamjoel in #27150
  • rm type ignore by @asukaminato0721 in #25715
  • Add workflow graph validation checks by @laipz8200 in #27106
  • Fix vs code and using min version after bump @remixicon/react and @monaco-editor/loader by @Eric-Guo in #27008
  • fix: passport outdate caused webapp reload by @iamjoel in #27175
  • fix: remove login status api by @wylswz in #27177
  • fix: infinite jump to login url by @iamjoel in #27178
  • Fix: release WorkflowTool database sessions promptly by @laipz8200 in #26893
  • fix: handle exceptions during loop break condition evaluation by @liugddx in #26961
  • remove built-in pipeline template user field by @JohnJyong in #27184
  • chore: update support channels by @nite-knite in #27188
  • Feature:during account initialization, set the interface language to be consistent with the display language(#27029) by @feelshana in #27042
  • Fix: surface workflow container LLM usage by @laipz8200 in #27021
  • Fix variable truncator handling for UpdatedVariable by @laipz8200 in #27197
  • chore: switch support channels according to configuration by @nite-knite in #27195
  • fix: eagerly load EndUser attributes to prevent DetachedInstanceError by @liugddx in #27162
  • fix(storybook): add required handler props and fix TypeScript errors in component stories by @ZeroZ-lab in #27187
  • add billing enable check by @JohnJyong in #27213
  • Feat/add celery prefetch setting by @JohnJyong in #27218
  • chore: align version identifiers with 1.9.2 by @laipz8200 in #27212
  • knowledge-pipeline-for-enterprise by @GarfieldDai in #27240
  • feat: Enhance knowledge base node validation by adding checks for embedding and reranking models by @WTW0313 in #27241
  • chore: adjust the route scope for loading Zendesk scripts by @nite-knite in #27244
  • chore: hide useless error info in login page by @iamjoel in #27245
  • chore: translate i18n files and update type definitions by @github-actions[bot] in #27243
  • Fix type error by @ZeroZ-lab in #27217
  • fix: fix OpenAPI Schema Import Pydantic Validation Errors for Complex Default Values by @yinxulai in #27159
  • Fix type error by @ZeroZ-lab in #27250
  • fix:restore correct numeric values for ParamsAutoGenerated by @cuixiaojun001 in #27252
  • fix: preserve share code headers after login redirect by @laipz8200 in #27225

New Contributors

Full Changelog: 1.9.1...1.9.2

Don't miss a new dify release

NewReleases is sending notifications on new releases.