github langgenius/dify 1.7.0
v1.7.0 - Tool OAuth & Plugin Auto-Upgrade Enhanced

latest releases: 2.0.0-beta.1, 1.8.1, 1.8.0...
one month ago

🌟 What’s New in v1.7.0? 🌟

Version 1.7.0 is packed with features that expand our app's flexibility and enhance performance. Here's what we're bringing to the table:

🏗️ Major Feature: OAuth Support in Tool Plugins

Tool plugins now support OAuth 2.0 authentication, allowing users to securely connect with third-party services without manually managing API keys. This includes refresh token support for maintaining long-term authentication sessions.
(#22550 thanks @Mairuis @zxhlyh )
image

🏗️ Major Feature: Plugin auto upgrade strategy

Plugins can now be automatically updated with configurable upgrade policies and rollback mechanisms. The system monitors plugin repositories and performs seamless upgrades while ensuring compatibility with your Dify version.
(#19758 thanks @RockChinQ @iamjoel )
image

⚡ Enhancements

  • Citations and Attributions: Agent Nodes now support features for citing and attributing sources, care of @chiehw. #18558
  • Plugin Deprecation Notice: Stay ahead of the curve with deprecation notices for obsolete plugins, introduced by @RockChinQ. #22685
  • API Key Authentication with Query Parameter: Now supports even more streamlined security methods with an API key in query parameters, courtesy of @ACAne0320. #21656
  • Audio Configuration UI: Customize your app's audio settings right from the interface, introduced by @marcelodiaz558. #21957
  • Variable Suggestions: Suggested questions can now utilize variables by @le0zh. This brings contextual awareness to another level. #17340
  • Drag-and-Drop for Workflows: Start node variables and code node variables are now drag-and-drop enabled, simplifying workflow creation as seen in @Minamiyama's contributions. #22150 #22127
  • Custom Max Active Requests per App: Manage traffic with custom settings for your app, brought by @qiaofenlin. #22073
  • Optional OpenTelemetry (OTel) Endpoint Configuration: Ensure the best observability practices with this addition from @hieheihei. #22492
  • RFC 5322 Email Validation: Ensure compliance and smarter email validation by @NeatGuyCoding. #22540
  • Dynamic Imports for Performance: Boost your app's performance with dynamic component imports, an intelligent improvement by @WTW0313. #22614
  • External Trace ID: Maintain traceability across systems with @qiaofenlin's external trace ID propagation. #22623

🐛 Bug Fixes

  • Omitting Optional Parameters: Clean out unnecessary None settings thanks to @ACAne0320. #22171
  • Docker Networking Fix: Fix Docker file URL networking issues for plugins, resolved by @krikera. #21382
  • Plugin Installation: A persistent install hitch was ironed out by @Garden12138. #22156
  • Model Selector and App Selector: Problems with selectors were eliminated by @hjlarry. #22291
  • Session Management: Fast and reliable infrastructure with open session management by @Colstuwjx. #22306
  • Metadata and File Processing: Smarter document filtering and error handling fixed by @helojo and others. #19305

⚙️ Improvements


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

  • fix(custom_tool): omit optional parameters instead of setting them to None by @ACAne0320 in #22171
  • minor fix: remove duplicates, fix typo, and add restriction for get mcp server by @NeatGuyCoding in #22170
  • feat(tool): add support for API key authentication via query parameter by @ACAne0320 in #21656
  • fix: adjust layout styles for header and dataset update by @WTW0313 in #22182
  • fix: resolve Docker file URL networking issue for plugins (#21334) by @krikera in #21382
  • feat: Add Audio configuration setting to app configuration UI by @marcelodiaz558 in #21957
  • feat: support var in suggested questions by @le0zh in #17340
  • fix:Fixed the problem of plugin installation failure caused by incons… by @Garden12138 in #22156
  • chore:extract last run common logic by @iamjoel in #22214
  • fix(emoji-picker): Adjust the style of the emoji picker (#22161) by @HyaCiovo in #22231
  • fix(web): Optimize AppInfo Component Layout (#22212) by @HyaCiovo in #22218
  • feat(workflow): add drag-and-drop support for variable list items for start node by @Minamiyama in #22150
  • fix: Optimize the workspace panel width calculation by @ZeroZ-lab in #22195
  • fix: iteration itemType support conversation var (#22220) by @yolofit in #22236
  • reject whitespace characters in password regexp by @JunIce in #22232
  • test: add comprehensive unit tests for PassportService with exception handling optimization by @farion1231 in #22268
  • Add unit test for account service by @NeatGuyCoding in #22278
  • minor fix: wrong and by @NeatGuyCoding in #22242
  • chore: bump ruff to 0.12.x by @bowenliang123 in #22259
  • fix: tool's model selector and app selector not work by @hjlarry in #22291
  • fix(ui): prevent var icon hidden when only one var in list of start node by @Minamiyama in #22290
  • test(web): add password regexp test case by @JunIce in #22308
  • fixing Enum part in backend and making it same as front end by @jubinsoni in #22296
  • test: add comprehensive unit tests for login decorator by @farion1231 in #22294
  • Update README.md by @kr1shnasomani in #22305
  • fix: prevent trigger form submit action when press 'enter' by @douxc in #22313
  • fix: error parsing object type parameters for code node by @Nov1c444 in #22230
  • Chore: Replace lodash/noop with lodash-es/noop by @HyaCiovo in #22331
  • Fix: Remove height and overflow style settings by @ZeroZ-lab in #22327
  • feat(api/repo): Allow to config repository implementation by @laipz8200 in #21458
  • fix: close session before doing long latency operation by @Colstuwjx in #22306
  • Update README.md by @kr1shnasomani in #22351
  • fix: aliyun trace title&description by @hieheihei in #22347
  • improve opik workflow_trace span name to node name by @quicksandznzn in #22356
  • Provides a set of Kubernetes manifests supporting version 1.6.0 by @Zhoneym in #22287
  • chore: bump nextjs to 15.3 by @bowenliang123 in #22262
  • tablestore vector support more method by @wanttobeamaster in #22225
  • feat(config-modal): add space to underscore conversion in variable name input of start node by @Minamiyama in #22284
  • fix(plugin): introduce response_type parameter in plugin list API to enable paginated response support by @homejim in #22251
  • fix: Metadata filtering with Manual option in Agent mode does not take effect when specifying input variables. by @suntp in #20362
  • fix workflow node iterator . by @zhanluxianshen in #21008
  • fix: code result included "error" field by @quicksandznzn in #22392
  • fix(prompt-editor): show error warning for destructive env and conv var by @Minamiyama in #21802
  • fix: generate deterministic operationId for root endpoints without one by @haocheng6 in #19888
  • fix: remove PickerPanel padding by @ZeroZ-lab in #22419
  • fix: conversatino statistic including data from debugger by @laipz8200 in #22412
  • fix: create api workflow run repository error by @quicksandznzn in #22422
  • fix: Update condition items to support variable type acquisition by @ZeroZ-lab in #22414
  • fix: Disable question editing in chat history by @ZeroZ-lab in #22438
  • chore: add SQLALCHEMY_POOL_USE_LIFO option and missing SQLALCHEMY_POOL_PRE_PING env default value. by @Colstuwjx in #22371
  • Fix potential leak by @NeatGuyCoding in #22169
  • adding tooltip for bindingCount by @jubinsoni in #22450
  • test: add comprehensive unit tests for console authentication and authorization decorators by @farion1231 in #22439
  • minor fix: using Pydantic model_validate instead of deprecated parse_obj by @NeatGuyCoding in #22239
  • fix: When var value changed, PromptEditor should be reset by @yolofit in #22219
  • Improve Tooltip UX by enabling delay by default by @kerwin612 in #21383
  • refactor(api): Improve SegmentType for Accurate Serialization/Deserialization by @QuantumGhost in #22025
  • feat(api): add UUIDv7 implementation in SQL and Python by @QuantumGhost in #22058
  • fix: add background color for chat bubble in light and dark themes by @WTW0313 in #22472
  • fix aliyun trace session_id by @hieheihei in #22468
  • Chore/update gh template by @crazywoola in #22480
  • feat: auto-fill MCP server description with app description #22443 by @baonudesifeizhai in #22477
  • feat(variable-list): add drag-and-drop functionality for variables in code node by @Minamiyama in #22127
  • feat(app): support custom max_active_requests per app by @qiaofenlin in #22073
  • feat: Add Citations and Attributions to Agent Node by @chiehw in #18558
  • feat: add otel endpoint config by @hieheihei in #22492
  • Update bug_report.yml by @crazywoola in #22502
  • fix mcp error not input by @kenwoodjw in #22505
  • fix: drop dead code phase2 unused class by @yihong0618 in #22042
  • chore: remove unused code by @jiangbo721 in #22501
  • fix(signin): Improve login button UI (#22433) by @HyaCiovo in #22514
  • Perf/web app authrozation by @douxc in #22524
  • Feat/change user email by @zyssyz123 in #22213
  • fix (ci) : remove test_url_signer by @quicksandznzn in #22525
  • minor code fix: remove duplicate type check branch by @NeatGuyCoding in #22536
  • fix: code node check decimal precision by @quicksandznzn in #22522
  • chore: translate i18n files by @github-actions[bot] in #22526
  • fix: Japanese dateTimeFormat by @yasu89 in #22516
  • minor bug fix: wrong default metrics endpoint by @NeatGuyCoding in #22535
  • minor typo fix: remove debug code and fix typo by @NeatGuyCoding in #22539
  • fix: use model provided by user in prompt generator (#22541) by @Stream29 in #22542
  • feat: validate email according to RFC 5322 by @NeatGuyCoding in #22540
  • test: add comprehensive OAuth authentication unit tests by @farion1231 in #22528
  • fix: Python SDK WorkflowClient and KnowledgeBase client imports fixed. Added documentation for WorkflowClient. by @omavashia2005 in #22476
  • updating icon by @jubinsoni in #22485
  • minor translation fix: fix translation duplicate and typo, fix date format by @NeatGuyCoding in #22548
  • feat: support oauth for tool plugins by @Mairuis in #22550
  • remove overrides by @asukaminato0721 in #22575
  • Fix jinja2 variable naming inconsistencies by @fdb02983rhy in #22578
  • Fix: the pict type picture was not processed in the docx by @helojo in #19305
  • fix: remove redundant partial member list retrieval in dataset API by @hato-taka in #15492
  • remove node-info for non mcp by @jubinsoni in #22595
  • feat(workflow_cycle_manager): Removes redundant repository methods and adds caching by @laipz8200 in #22597
  • use nolyfill to reduce download size by @asukaminato0721 in #22589
  • refactor: Fix some type error by @laipz8200 in #22594
  • fix(docs): correct workflow API parameter name from workflow_id to workflow_run_id by @kawabata-mcl in #22587
  • Fix valid check of mcp server address by @JzoNgKVO in #22510
  • fix celery config by @kenwoodjw in #22566
  • chore: translate i18n files by @github-actions[bot] in #22563
  • refactor: decouple Node and NodeData by @laipz8200 in #22581
  • fix: admin feedback uses the same method create_feedback by @jiangbo721 in #22580
  • refactor: elegant event dispatch patterns (92% complexity reduction) by @laipz8200 in #22600
  • feat: convert components to dynamic imports for improved performance by @WTW0313 in #22614
  • Fix #22508 by @mudiko in #22590
  • fix text splitter by @jubinsoni in #22596
  • test: add comprehensive API key authentication service tests by @farion1231 in #22572
  • fix: correct tracing for workflows and chatflows for phoenix by @kurokobo in #22547
  • feat: update VECTOR_STORE supported types in api/.env.example by @lostingz in #22617
  • fix: restore globals dependency in package.json and pnpm-lock.yaml by @WTW0313 in #22625
  • fix(docs): unify workflow_run_id style with other languages by @jiangbo721 in #22642
  • chore: skip SuperLinter check on .editorconfig when no changes by @bowenliang123 in #22649
  • Fix: Remove ${basePath} from the tag's href attribute. by @BXbing in #22636
  • Fix/replace datetime patterns with naive utc now by @aryanraj2713 in #22654
  • test: add comprehensive unit tests for auth service module by @farion1231 in #22662
  • fix: resolve Redis mock import error in test configuration by @farion1231 in #22663
  • enabling vector index prefix name via configuration files by @jubinsoni in #22661
  • chore: update pnpm version to 10.13.1 by @ZeroZ-lab in #22660
  • fix(i18n): improve Japanese translations for technical terms "dupulicate" by @t-daisuke in #22669
  • fix(i18n): standardize template variable names across all languages {{count}} by @t-daisuke in #22670
  • fix(i18n): "道具" into "ツール" by @t-daisuke in #22666
  • fix(i18n) update Japanese translation for "optional" by @t-daisuke in #22667
  • fix: avoid using node_data.version for judgement tool node version by @Nov1c444 in #22462
  • chore: code improvement for mcp_client and mcp_tools_manage_service by @bowenliang123 in #22645
  • oxlint by @asukaminato0721 in #22584
  • Increased the character limitation by @kushagra21-afk in #22679
  • minor fix: fix dissolve tenant check permission always failed by @NeatGuyCoding in #22292
  • fix: knowledge retrieval validation error by @quicksandznzn in #22682
  • refactor: remove unused dissolve_tenant static method by @zhangx1n in #22690
  • fix: Correct and enhance the doc on CELERY_BROKER_URL in .env.example by @JianhengHou in #22693
  • fix: update analyticdb vector to do filter by metadata by @lpdink in #22698
  • fix: Adjust tool selector popup styles (#22622) by @HyaCiovo in #22697
  • test: add comprehensive unit tests for Firecrawl and Watercrawl auth providers by @farion1231 in #22705
  • fix: improve document filtering in full text search(elasticsearch) by @uply23333 in #22683
  • Perf: remove user profile loading by @JzoNgKVO in #22710
  • fix: prevent app type description from overflowing the card by @nite-knite in #22711
  • feat: update file manager and file factory implementations by @laipz8200 in #22704
  • fix: Update the style of the batch operation component by @ZeroZ-lab in #22716
  • fix: complete file_upload schema in OpenAPI templates (#22700) by @lyzno1 in #22719
  • fix: the text/icon shows wrong color in darkmode by @douxc in #22724
  • fix: migrations circle dependency by @Mairuis in #22731
  • Fix incorrect mcp method_name by @IthacaDream in #22736
  • chore: use 'json_list' instead of 'json' to prevent ambiguity by @jiangbo721 in #22739
  • chore: Add fonts-noto-cjk dependency for pypdfium2 by @kentaka347 in #22359
  • fix: prevent panel width localStorage pollution during viewport compression (#22745) by @lyzno1 in #22747
  • test: add comprehensive unit tests for AuthType by @farion1231 in #22742
  • Optimize tencent_vector knowledge base deletion error handling with batch processing support by @issac2e in #22726
  • refactor: Modify the triggering method of the variable selector in the modification object subtree panel(#22237) by @yijiaquan in #22238
  • feat: plugin deprecation notice by @RockChinQ in #22685
  • fix import error in marketplace by @JzoNgKVO in #22759
  • fix: single step node execution init error by @Nov1c444 in #22764
  • fix: add missing translation function to deprecation notice component by @WTW0313 in #22767
  • feat(trace): support external trace id propagation by @qiaofenlin in #22623
  • feat: custom components in markdown comp by @WTW0313 in #22776
  • fix(web): add dayjs relativeTime plugin by @quicksandznzn in #22761
  • chore: translate i18n files by @github-actions[bot] in #22756
  • fix: tablestore vdb support metadata filter by @wanttobeamaster in #22774
  • Fix invite member template by @JzoNgKVO in #22782
  • fix: Invalid expected metadata value type error by @IthacaDream in #22793
  • fix: #22784 by @leslie2046 in #22795
  • refactor: centralize email internationalization handling by @laipz8200 in #22752
  • Mapped column by @asukaminato0721 in #22644
  • feat: oauth refresh token by @Mairuis in #22744
  • chore(tests): Remove outdated tests by @laipz8200 in #22816
  • Added a check to ensure the input text is a string before proceeding with parsing by @crazywoola in #22809
  • feat: decouple WorkflowAppRunner from AppRunner by @laipz8200 in #21739
  • fix: database lock timeout by separating external MCP calls from transactions by @Nov1c444 in #22821
  • feat: plugin auto upgrade strategy by @RockChinQ in #19758
  • FEAT: Tencent Vector search supports backward compatibility with the previous score calculation approach. by @wlleiiwang in #22820
  • chore: translate i18n files by @github-actions[bot] in #22824
  • feat: performance optimization by @WTW0313 in #22810
  • fix: update @headlessui/react to version 2.2.1 by @WTW0313 in #22839

New Contributors

Full Changelog: 1.6.0...1.7.0

Don't miss a new dify release

NewReleases is sending notifications on new releases.