What's Changed
New Features
Tool Multi-Select Input
- Workflow tool nodes now support multi-select dropdown inputs, allowing users to choose multiple values from a predefined list when configuring tool parameters. (#39346)
Workflow Node Locator
- You can now click a node_id in workflow run logs or error messages to locate and highlight the corresponding node in the workflow editor canvas. (#38187)
Workflow Block Selector Improvements
- The block selector panel now features improved keyboard navigation, category previews, and a more intuitive search experience when adding nodes to workflows. (#39212)
Export Agent DSL from Sidebar
- Agent apps can now be exported as DSL YAML directly from the app sidebar menu, making it easy to back up or version-control agent configurations. (#39299)
Knowledge Tracing
- Added more observability traces to knowledge/RAG document processing operations, improving visibility into indexing pipelines. (#38959)
Bug Fixes
Workflow & Collaboration
- Fixed hidden-tab collaboration leader saving stale drafts when the tab is inactive (#38997)
- Fixed unsaved edits being dropped when collaboration never connects (#39579)
- Preserved latest collaboration session after reconnection (#39646)
- Fixed false draft save error during Strict Mode initialization (#39353)
- Show persistent error notification when workflow draft save fails (#39293)
- Wait for workflow worker threads to finish before Celery tasks complete, preventing orphaned executions (#39614)
- Lazy-load Loro collaboration runtime to reduce initial bundle size (#39631)
- Don't open node settings panel when clicking a node in comment mode (#39500)
- Don't close active comment panel when a different comment is resolved (#39491)
RAG & Knowledge
- Fixed document cleaner stripping valid characters ï (U+00EF), ¿ (U+00BF), ¾ (U+00BE) (#39215)
- Preserved spaces during recursive text splitting (#39498)
- Used
flush()instead ofcommit()in dataset service to preserve caller transaction boundaries (#39223) - Sent valid body in external knowledge validation probe (#39410)
Agent
- Fixed agent preview: start new Preview conversations without inheriting an old ID (#39463)
- Fixed agent chat input being replaced when conversation history updates (#39289)
- Preserved complete model usage pricing in agent logs (#39201)
- Show workflow node runs in agent execution logs (#39471)
- Include workflow runs in agent monitoring stats (#39354)
- Block unpublished agents from being used in workflows (#39532)
- Prevent agent preview actions from being clipped (#39510)
- Prevent build reset from clearing preview chat history (#39490)
- Fixed agent build draft UI flashing during apply (#39642)
Web App & UI
- Fixed webapp JWT expiration time being incorrectly set (#39537)
- Fixed TTS playback in Safari and Firefox (#39444)
- Fixed clipboard writes failing in embedded apps (#39511)
- Fixed text generation web app showing infinite loading after timeout (#39268)
- Fixed chat not passing document if model doesn't support vision (#39461)
- Stopped chunk length/overlap inputs collapsing to unusable width in narrow containers (#39600)
- Fixed search hotkey hydration mismatch (#39574)
- Improved DSL import/export dialog states (#39432, #39409)
- Fixed basePath doubling in auth refresh redirects (#39273)
- Show unavailable state for disabled Web Apps (#39392)
- Fixed permission selector semantics (#39269)
- Fixed customization page horizontal overflow (#39557)
API & Backend
- Fixed MCP tool
output_schemabeing treated as required when it's optional (#39453) - Honored array-element limit and byte budget for
list[File]in VariableTruncator (#39220) - Prevented identity logging deadlock (#39449)
- Rejected
host:port-shapedPLUGIN_REMOTE_INSTALL_PORTvalues with an actionable hint (#39329) - Fixed
PaginatedResult.pagesreturning 1 instead of 0 for empty result sets (#39229) - Used resource tenant for draft variable files (#39307)
- Scoped HITL snapshot message lookup to utilize database index (#39351)
- Returned 400 instead of 500 when
filefield is missing from audio-to-text endpoints (#39303, #39322) - Fixed tool_meta missing
tool_provider_typeduring tool execution (#39513) - Applied configured timeout to enterprise inner API requests (#39335)
- Returned disabled auto-upgrade settings when strategy is missing (#39494)
- Enforced tool provider type contracts (#39380)
- Fixed WaterCrawl website crawler handling non-JSON error responses (#37514)
- Fixed can't create chat app when tenant default model schema errors (#39266)
Security Enhancements
- The Agent local sandbox now runs behind a dedicated Squid forward proxy with strict ACL rules, preventing the sandbox from reaching internal services directly. Only the
/files/endpoint on the API and/agent-stub/on agent_backend are permitted, both protected with short-lived access tokens. This significantly reduces the blast radius of arbitrary code execution in the agent sandbox. (#39544) - Communication between the Dify API and the agent backend now uses token-based authentication via
DIFY_AGENT_API_TOKEN/AGENT_BACKEND_API_TOKEN, hardening the internal service boundary. (#39622) - Switched Jinja2 template rendering to use
SandboxedEnvironment, preventing template injection attacks in workflow code nodes (#39609) - Patched React Server Components DoS vulnerability (#39539)
- Used
re.fullmatchin email validator to reject trailing newlines, preventing bypass attacks (#39320) - Validated account status before accepting workspace invitations (#39438)
Performance
- Lightweight recent apps endpoint — New
GET /console/api/apps/recentendpoint reduces the home page "Continue Work" section latency by ~69% (3.2× faster), cutting SQL queries from 19+ to 1 projection SELECT and response size by ~50% (#39625) - Lazy-load Home creation modals — Deferred loading of creation modal code until interaction, reducing initial JavaScript bundle (#39634)
Improvements
- Made agent composer save and publish state consistent (#39637)
- Simplified Dify logo theming (#39580)
- Improved workflow block selector UI (#39377)
- Improved web accessibility semantics (#39505)
- Nodes are no longer draggable when previewing a workflow (#39131)
- Display non-LLM settings in integration tool details (#39295)
Environment Variable Changes
New Variables
| Variable | Default | Description |
|---|---|---|
DIFY_AGENT_API_TOKEN
| dify-agent-run-token-for-dev-only
| Shared bearer token for API → agent_backend authentication. Change this in production. |
AGENT_BACKEND_API_TOKEN
| dify-agent-run-token-for-dev-only
| Same token on the agent backend side. Must match DIFY_AGENT_API_TOKEN.
|
PLUGIN_MODEL_PROVIDERS_CACHE_ENABLED
| true
| Set to false if plugins are installed externally and the cache cannot be invalidated.
|
Important
DIFY_AGENT_API_TOKEN is a new required variable for secure communication between the Dify API and agent backend. The default value (dify-agent-run-token-for-dev-only) is insecure and must be replaced in production. Generate one with:
python -c 'import secrets; print(secrets.token_urlsafe(32))'Set the same value as AGENT_BACKEND_API_TOKEN on the agent backend side.
Docker Compose Changes
- Agent sandbox network isolation:
local_sandboxis moved off thedefaultnetwork to dedicatedagent_sandbox_network+local_sandbox_proxy_network. A newagent_ssrf_proxyservice (Squid) is added. - Bearer auth:
AGENT_BACKEND_API_TOKEN/DIFY_AGENT_API_TOKENare now passed toapi,worker, andagent_backendservices. - Image tags updated to
1.16.1.
Database Migrations
This release includes 4 new migrations:
2026_07_15_1600-3c9f8e2a1d7b_add_workflow_run_archive_bundle_cursor_indexes.py— Add indexes toworkflow_run_archive_bundles(concurrent on PostgreSQL)2026_06_29_1200-b8c9d0e1f2a3_add_step_by_step_tour_state.py— Createaccount_step_by_step_tour_statestable2026_07_22_1500-d2825e7b9c10_scope_agent_debug_conversations.py— Adddraft_typecolumn toagent_debug_conversationsand update unique constraint2026_07_23_1200-6f5a9c2d8e1b_add_telemetry_fields_to_dify_setups.py— Add telemetry fields (instance_id,install_reported_at,last_heartbeat_at) todify_setups
All migrations are additive (new tables, columns, indexes) and are safe to run without downtime.
Upgrade Guide
Docker Compose (Recommended)
cd docker
docker compose down
git pull origin main
docker compose pull
docker compose up -dThe database migrations will run automatically on startup.
Important
Review the new DIFY_AGENT_API_TOKEN variable in .env. The default value is insecure — generate a secure token for production:
python -c 'import secrets; print(secrets.token_urlsafe(32))'Source Code
git pull origin main
cd api
flask db upgradeWhat's Changed
- refactor(web): use generated dataset card queries by @lyzno1 in #39203
- refactor(web): use generated OAuth query options by @lyzno1 in #39204
- refactor(web): align integrations sidebar components by @lyzno1 in #39202
- feat(workflow): improve block selector navigation and previews by @lyzno1 in #39212
- fix(dataset_service): use flush() instead of commit() to preserve caller transaction by @sergioperezcheco in #39223
- ci: route default Depot jobs to 4-core runners by @lyzno1 in #39277
- chore: the node should not draggable when preview a workflow by @hjlarry in #39131
- test(web): align test state boundaries by @lyzno1 in #39239
- refactor(web): avoid setState in website crawler effects by @wanxiankai in #39237
- fix: text generation web app keeps loading after timeout by @iamjoel in #39268
- refactor(web): avoid direct setState in effect in jina reader crawler (#25194) by @pepepeboom in #39216
- fix(web): restore permission selector semantics by @lyzno1 in #39269
- chore: bump the github-actions-dependencies group with 5 updates by @dependabot[bot] in #39247
- fix: can't create chat app when get tenant default model schema error by @hjlarry in #39266
- fix: prevent hidden-tab collaboration leader from saving stale drafts by @Kevin9703 in #38997
- fix(api, web): scope trial app file uploads to the app tenant by @linw1995 in #39149
- refactor: use catalog for workflow archive maintenance by @zhaohao1004 in #39001
- fix(agent): preserve complete model usage pricing by @zyssyz123 in #39201
- feat(web): add webapp access control to agent access point by @GareArc in #39285
- fix: the input of agent chat would be replaced if conversation history updated by @iamjoel in #39289
- feat(dataset): proxy KnowledgeFS Console requests by @hyoban in #39158
- docs: refine frontend testing guidance by @lyzno1 in #39290
- chore(deps): update pnpm and workspace dependencies by @lyzno1 in #39292
- fix: show persistent error when workflow draft save fails by @iamjoel in #39293
- feat(web): add step-by-step tour shell by @Jingyi-Dify in #38785
- chore: display non-LLM settings in integration tool details by @iamjoel in #39295
- chore(i18n): sync translations with en-US by @github-actions[bot] in #39296
- revert(ci): restore default Depot runners by @lyzno1 in #39297
- test: use SQLite sessions in unit misc by @asukaminato0721 in #39123
- test: use SQLite sessions in unit misc by @asukaminato0721 in #39121
- test: use SQLite sessions in unit misc by @asukaminato0721 in #39122
- feat: support export agent dsl in sidebar by @iamjoel in #39299
- fix(web): stop doubling basePath in auth refresh redirects by @sergioperezcheco in #39273
- chore: when dataset permission is not all team, update rbac config to… by @fatelei in #39227
- refactor(web): remove basePath from hydration boundary by @lyzno1 in #39308
- ci: simplify test workflow execution by @WH-2099 in #39318
- test: use SQLite sessions in unit misc by @asukaminato0721 in #39120
- fix(api): use resource tenant for draft variable files by @linw1995 in #39307
- fix(configs): reject host:port-shaped PLUGIN_REMOTE_INSTALL_PORT with actionable hint by @sergioperezcheco in #39329
- fix: return 400 instead of 500 when file field is missing in audio-to-text endpoints (#39303) by @rkfshakti in #39322
- test: use SQLite sessions in unit misc by @asukaminato0721 in #39119
- test: use SQLite sessions in services workflow by @asukaminato0721 in #39116
- fix(api): keep workflow log archives owner-admin only by @lyzno1 in #39338
- fix(web): restore billing access boundary by @lyzno1 in #39343
- fix(api): return 400 instead of 500 when 'file' is missing from trial-app audio-to-text by @Harsh23Kashyap in #39305
- refactor(web): remove permission catalog service hooks by @lyzno1 in #39342
- fix(watercrawl): handle non-json error responses by @luochen211 in #37514
- fix(dev): use gevent WebSocket server for local API by @hjlarry in #39349
- fix: not support jump to detail in marketplace by @iamjoel in #39347
- fix(workflow): avoid false draft save error during Strict Mode initia… by @hjlarry in #39353
- test: use sqlite3 session in test_account_service by @asukaminato0721 in #38751
- test: use SQLite sessions in services workflow by @asukaminato0721 in #39115
- test: use SQLite sessions in unit misc by @asukaminato0721 in #39118
- test: use sqlite3 session in test_built_in_retrieval by @asukaminato0721 in #38735
- test: use sqlite3 session in test_based_generate_task_pipeline by @asukaminato0721 in #38738
- test: use sqlite3 session in test_conversation_service by @asukaminato0721 in #38774
- test: move API token service coverage to unit tests by @asukaminato0721 in #38918
- test: use sqlite3 session in test_accounts by @asukaminato0721 in #38752
- test: move app import API coverage to unit tests by @asukaminato0721 in #38920
- test: use sqlite3 session in test_database_retrieval by @asukaminato0721 in #38743
- test: use sqlite3 session in test_agent_app_parameters by @asukaminato0721 in #38759
- test: use sqlite3 session in test_workspace_account by @asukaminato0721 in #38757
- test: use sqlite3 session in test_tool_file_manager by @asukaminato0721 in #38771
- test: move human input delivery coverage to unit tests by @asukaminato0721 in #38926
- test: use sqlite3 session in test_build_from_mapping by @asukaminato0721 in #38769
- test: add SQLite session fixture for providers by @asukaminato0721 in #38982
- fix(agent): include workflow runs in monitoring stats by @zyssyz123 in #39354
- feat(webapp-access): add WEBAPP_PUBLIC_ACCESS_ENABLED toggle by @GareArc in #38567
- fix(api): scope HITL snapshot message lookup to utilize db index by @QuantumGhost in #39351
- fix: update the agent roster documentation link by @iamjoel in #39368
- chore(i18n): sync translations with en-US by @github-actions[bot] in #39362
- refactor(web): improve workflow block selector by @lyzno1 in #39377
- fix(api): PaginatedResult.pages should be 0 for an empty result set by @lntutor in #39229
- feat: add WebSocket support to dev proxy with cookie rewriting by @WTW0313 in #39370
- fix: enforce tool provider type contracts by @lyzno1 in #39380
- chore(deps): upgrade Next.js to 16.2.11 by @lyzno1 in #39384
- test: use SQLite sessions in services misc by @asukaminato0721 in #39114
- test: use SQLite sessions in services enterprise by @asukaminato0721 in #39113
- test: use SQLite sessions in services core by @asukaminato0721 in #39111
- test: use SQLite sessions in core workflow by @asukaminato0721 in #39109
- test: use sqlite3 session in test_auth_wraps by @asukaminato0721 in #38760
- docs: note minimum Docker Compose version by @zcxGGmu in #39374
- test: use sqlite3 session in test_human_input_forms by @asukaminato0721 in #38777
- test: move console OAuth coverage to unit tests by @asukaminato0721 in #38923
- fix: apply configured timeout to enterprise inner API requests by @GareArc in #39335
- fix(web): show unavailable state for disabled Web Apps by @lyzno1 in #39392
- fix(datasets): update empty state handling and permissions messaging by @WTW0313 in #39360
- chore: bump pyasn1 from 0.6.3 to 0.6.4 in /api by @dependabot[bot] in #39390
- chore: bump setuptools from 82.0.1 to 83.0.0 in /dify-agent by @dependabot[bot] in #39387
- chore: bump gitpython from 3.1.50 to 3.1.52 in /api by @dependabot[bot] in #39389
- chore: bump google.golang.org/grpc from 1.82.0 to 1.82.1 in /dify-agent-runtime by @dependabot[bot] in #39386
- chore: bump pyasn1 from 0.6.3 to 0.6.4 in /dify-agent by @dependabot[bot] in #39388
- test: use sqlite3 session in test_clear_free_plan_tenant_expired_logs by @asukaminato0721 in #38693
- chore: bump pillow from 12.2.0 to 12.3.0 in /dify-agent by @dependabot[bot] in #39328
- test: use sqlite3 session in test_workflow by @asukaminato0721 in #38686
- test: use SQLite sessions in service API fixtures by @asukaminato0721 in #38784
- test: use sqlite3 session in test_export_service by @asukaminato0721 in #38718
- test: use sqlite3 session in test_generator_api_missing by @asukaminato0721 in #38719
- test: use sqlite3 session in test_app_runner_conversation_variables by @asukaminato0721 in #38687
- test: use sqlite3 session in test_model_config_api by @asukaminato0721 in #38675
- fix(e2e): align fixtures with generated contracts by @lyzno1 in #39394
- chore: clean up CODEOWNERS by @lyzno1 in #39398
- fix(oauth): reauth after accepting invitation by @linw1995 in #39366
- fix(ci): avoid duplicate post-merge e2e runs by @lyzno1 in #39401
- test: use sqlite3 session in test_base_app_runner by @asukaminato0721 in #38740
- fix(api,billing): invalidate vector space cache after cleanup by @linw1995 in #39404
- test(e2e): validate generated console contracts by @lyzno1 in #39400
- chore: Update permission tip across i18n locales by @WTW0313 in #39406
- test: use sqlite3 session in test_reset_encrypt_key_pair by @asukaminato0721 in #38673
- test: use sqlite3 session in test_rag_pipeline_workflow by @asukaminato0721 in #38676
- fix(agent): isolate build and preview chat conversations by @zyssyz123 in #39405
- test: use sqlite3 session in test_snippet_workflow by @asukaminato0721 in #38677
- test: use sqlite3 session in test_snippet_workflow_draft_variable by @asukaminato0721 in #38678
- fix(web): improve DSL export feedback by @lyzno1 in #39409
- test: use sqlite3 session in test_app_import_api by @asukaminato0721 in #38674
- test: use sqlite3 session in test_tags by @asukaminato0721 in #38679
- test: use sqlite3 session in test_init_validate by @asukaminato0721 in #38680
- test: use sqlite3 session in test_plugin_wraps by @asukaminato0721 in #38681
- test: use sqlite3 session in test_runtime_credentials by @asukaminato0721 in #38682
- test: use sqlite3 session in test_workflow_events_openapi by @asukaminato0721 in #38683
- feat(dataset): add New Knowledge list and empty state by @hyoban in #39300
- fix: prevent RBAC role names overflowing settings panel by @balancetheworld in #39412
- fix(agent): refresh stale inline preview drafts by @zyssyz123 in #39415
- feat: support tool multi-select input by @hjlarry in #39346
- fix(dify-ui): preserve link semantics in button story by @lyzno1 in #39430
- feat(dataset): expose New RAG KnowledgeFS contracts by @hyoban in #39314
- fix(web): improve import DSL dialog states by @lyzno1 in #39432
- feat: gate cloud analytics behind cookie consent by @CodingOnStar in #39408
- fix(api): send valid body in external knowledge validation probe by @dparkmit24 in #39410
- test: move password reset coverage to unit tests by @asukaminato0721 in #38936
- test: use sqlite3 session in test_conversation by @asukaminato0721 in #38684
- test: use sqlite3 session in test_hitl_service_api by @asukaminato0721 in #38685
- test: use sqlite3 session in test_async_workflow_service by @asukaminato0721 in #38692
- chore(api): cloud use presigned download url on api site by @linw1995 in #39436
- fix(workflow): hide Agent V2 in chatflow by @lyzno1 in #39439
- fix(auth): validate account before accepting invitations by @zyssyz123 in #39438
- fix: use re.fullmatch in email validator to reject trailing newlines (#39234) by @rkfshakti in #39320
- chore: improve lambda plugin runtime error display by @hjlarry in #39437
- fix(web): support TTS playback in Safari and Firefox by @euxx in #39444
- feat(dataset): add New Knowledge creation flow by @hyoban in #39315
- feat: gate agent management behind the agent.manage permission by @GareArc in #39330
- fix(api): prevent identity logging deadlock by @hjlarry in #39449
- fix(web): echo OAuth state on authorize redirect by @samzong in #39459
- fix(agent): start new Preview conversations without an ID by @zyssyz123 in #39463
- fix: chat not pass doc if not support vision by @iamjoel in #39461
- chore: avoid duplicate token counting during dataset indexing by @41tair in #39466
- feat(dataset): add source connections by @hyoban in #39319
- fix(agent): show workflow node runs in logs by @zyssyz123 in #39471
- feat(web): locate workflow nodes by node_id in the workflow editor by @ruanimal in #38187
- feat(dataset): add website crawl preview by @hyoban in #39324
- feat(oauth): expose stable account id on provider account endpoint by @samzong in #39470
- feat: knowledge add more trace by @fatelei in #38959
- chore: support preview mode if not in community version by @iamjoel in #39399
- test: use sqlite3 session in test_base_trace_instance by @asukaminato0721 in #38744
- fix(web): adapt workflow agent logs by @lyzno1 in #39488
- fix: prevent build reset from clearing preview chat by @iamjoel in #39490
- fix(web): simplify agent configure mode state by @lyzno1 in #39492
- fix: don't close the active comment panel when a different comment is resolved by @dparkmit24 in #39491
- fix: return disabled auto-upgrade settings when strategy is missing by @hjlarry in #39494
- fix: smooth the preview-to-build transition by @iamjoel in #39495
- fix(api): make the 10-minute email IP first-strike window take effect by @he-yufeng in #39479
- feat(dataset): add crawl source selection by @hyoban in #39325
- refactor: centralize deployment edition in system features by @lyzno1 in #39454
- fix: download skill files through authenticated API requests by @iamjoel in #39499
- fix: don't open the node settings panel when clicking a node in comment mode by @dparkmit24 in #39500
- fix: audio config ui problem by @iamjoel in #39504
- chore: add deploy-knowledge.yml by @JohnJyong in #39509
- fix: prevent agent preview actions from being clipped by @iamjoel in #39510
- chore(web): improve web accessibility semantics by @linw1995 in #39505
- fix(web): allow clipboard writes in embedded apps by @WTW0313 in #39511
- fix(web): hydrate workspace permissions before navigation render by @lyzno1 in #39524
- chore: add web shell code owners by @lyzno1 in #39526
- fix: include CSRF token when fetching skill file content by @iamjoel in #39527
- fix(agent-v2): link API reference to agent guide by @lyzno1 in #39534
- test(e2e): wait for app list before menu interaction by @lyzno1 in #39538
- fix(agent): block unpublished agents in workflows by @zyssyz123 in #39532
- fix: fix when tool execute in progress tool_meta miss tool_provider_type by @fatelei in #39513
- feat(dataset): add document processing tasks by @hyoban in #39326
- test: use caplog in ext login tests by @EvanYao826 in #39542
- fix(web): patch React Server Components DoS by @lyzno1 in #39539
- feat(dataset): add document detail by @hyoban in #39361
- refactor(web): remove obsolete route prefix handler by @lyzno1 in #39545
- refactor: remove backend-only system feature fields by @lyzno1 in #39543
- fix(web): prevent customization horizontal overflow by @Jingyi-Dify in #39557
- test: use sqlite3 session in test_datasource_provider_service by @asukaminato0721 in #38695
- test: use sqlite3 session in test_human_input_service by @asukaminato0721 in #38697
- refactor(web): migrate vector space billing query to contract client by @EvanYao826 in #39558
- test: use sqlite3 session in test_webhook_service by @asukaminato0721 in #38699
- test: use sqlite3 session in test_workflow_execute_task by @asukaminato0721 in #38704
- test: use sqlite3 session in test_easy_ui_message_end_files by @asukaminato0721 in #38706
- test: use sqlite3 session in test_wraps by @asukaminato0721 in #38716
- test: use sqlite3 session in test_metadata_nullable_bug by @asukaminato0721 in #38717
- test: use sqlite3 session in test_llm_quota by @asukaminato0721 in #38720
- test: use sqlite3 session in test_encrypter by @asukaminato0721 in #38726
- test: use sqlite3 session in test_workflow_node_execution_offload by @asukaminato0721 in #38728
- test: use sqlite3 session in test_pipeline_template_base by @asukaminato0721 in #38730
- chore: Grammar fix in VDB provider README ("a importable") by @SpiliosDimakopoulos in #39577
- chore: Broken docker-compose.yaml link in Hindi README (missing slash) by @SpiliosDimakopoulos in #39576
- docs: fix typos in ValueSourceType docstring by @SpiliosDimakopoulos in #39573
- chore(agent): update && simplify readme by @wylswz in #39584
- refactor(agents): simplify repository context by @lyzno1 in #39583
- docs: Broken Grafana link in Turkish README (placeholder text instead of URL) by @SpiliosDimakopoulos in #39575
- fix(dify-ui): honor instant popup transitions by @lyzno1 in #39572
- fix(web): prevent search hotkey hydration mismatch by @lyzno1 in #39574
- refactor: move trial app capability out of system features by @lyzno1 in #39562
- refactor(workflow): remove hook barrel exports by @lyzno1 in #39588
- fix(workflow): stop dropping unsaved edits when collaboration never c… by @BenjaminX in #39579
- test: use sqlite3 session in test_snippet by @asukaminato0721 in #38691
- test: use sqlite3 session in test_message_service by @asukaminato0721 in #38698
- fix(web): stop chunk length/overlap inputs collapsing to an unusable width in narrow containers by @dparkmit24 in #39600
- feat: add CE telemetry report by @FFXN in #39452
- fix(api): honor array-element limit and byte budget for list[File] in VariableTruncator (#39218) by @Taranum01 in #39220
- fix: The expiration time for web app login to JWT is incorrectly set. by @FFXN in #39537
- fix(rag): stop the document cleaner from stripping valid characters ï, ¿, ¾ by @winklemad in #39215
- refactor(web): simplify Dify logo theming by @lyzno1 in #39580
- feat(api): expose app mode in webapp site response by @linw1995 in #39607
- fix: preserve spaces during recursive text splitting by @CYJ1226 in #39498
- chore: bump pypdf from 6.10.2 to 6.14.2 in /dify-agent by @dependabot[bot] in #39502
- fix(agent): expose publish state from composer by @zyssyz123 in #39615
- chore(deps): bump the github-actions-dependencies group with 6 updates by @dependabot[bot] in #39603
- feat(inner_api): add endpoint to invalidate plugin model providers cache by @GareArc in #39468
- fix: align workspace card plan ownership by @lyzno1 in #39616
- feat: add amptitude to new agent by @iamjoel in #39608
- fix: use jinja sandbox by @wylswz in #39609
- feat(agent): add a squid proxy for agent sandbox by @wylswz in #39544
- fix(web): stop reporting workspace status by @lyzno1 in #39626
- fix(workflow): lazy-load Loro collaboration runtime by @lyzno1 in #39631
- fix(api): wait for workflow worker cleanup before task completion by @linw1995 in #39614
- perf(web): lazy-load Home creation modals by @lyzno1 in #39634
- perf: add lightweight recent apps endpoint by @hjlarry in #39625
- test: use pristine file-backed SQLite fixtures by @escape0707 in #39624
- test: use sqlite3 session in test_workflow_run_service by @asukaminato0721 in #38701
- test: use sqlite3 session in test_draft_var_loader_simple by @asukaminato0721 in #38702
- test: use sqlite3 session in test_utils by @asukaminato0721 in #38729
- test: use sqlite3 session in test_workflow_comment_service by @asukaminato0721 in #38700
- test: use sqlite3 session in test_llm_generator_missing by @asukaminato0721 in #38742
- fix: gate service API, MCP and trigger surfaces on enterprise license by @GareArc in #39635
- feat: add bearer auth to agent backend by @wylswz in #39622
- refactor: make agent composer save and publish state consistent by @iamjoel in #39637
- chore: bump gitpython from 3.1.52 to 3.1.54 in /api by @dependabot[bot] in #39619
- test: use sqlite3 session in test_api by @asukaminato0721 in #38733
- chore(deps): bump golang.org/x/net from 0.53.0 to 0.55.0 in /dify-agent-runtime by @dependabot[bot] in #39025
- test: use sqlite3 session in test_extract_thread_messages by @asukaminato0721 in #38739
- chore: bump pymdown-extensions from 10.21.2 to 11.0 in /dify-agent by @dependabot[bot] in #39618
- test: use SQLite sessions in rag retrieval by @asukaminato0721 in #39049
- chore(deps): bump the storage group across 1 directory with 3 updates by @dependabot[bot] in #39604
- fix: prevent the agent build draft UI from flashing during apply by @iamjoel in #39642
- test: use SQLite sessions in services core by @asukaminato0721 in #39057
- test: use SQLite sessions in core memory by @asukaminato0721 in #39066
- fix(ui): unify combobox trigger focus rings by @lyzno1 in #39643
- test: use SQLite sessions in controllers service api by @asukaminato0721 in #39069
- chore: update workspace dependencies by @lyzno1 in #39641
- fix(workflow): preserve latest collaboration session by @lyzno1 in #39646
- test: use SQLite sessions in core ops by @asukaminato0721 in #39072
- test: use SQLite sessions in core app by @asukaminato0721 in #39075
- test: use SQLite sessions in core tools by @asukaminato0721 in #39077
- fix(web): align tour trigger DOM order by @lyzno1 in #39654
- fix(workflow): align block icon vector sizes by @Jingyi-Dify in #39657
- fix(cli): decouple release script tests from the live compat window by @GareArc in #39658
- feat(plugin): allow disabling the tenant plugin model providers cache by @GareArc in #39632
- chore: bump version to 1.16.1 by @wylswz in #39653
- fix: fix mcp output_schema is optional by @fatelei in #39453
New Contributors
- @wanxiankai made their first contribution in #39237
- @pepepeboom made their first contribution in #39216
- @rkfshakti made their first contribution in #39322
- @lntutor made their first contribution in #39229
- @zcxGGmu made their first contribution in #39374
- @dparkmit24 made their first contribution in #39410
- @samzong made their first contribution in #39459
- @SpiliosDimakopoulos made their first contribution in #39577
- @Taranum01 made their first contribution in #39220
- @winklemad made their first contribution in #39215
- @CYJ1226 made their first contribution in #39498
Full Changelog: 1.16.0...1.16.1