github langgenius/dify 1.16.0-rc1
v1.16.0-rc1

pre-release4 hours ago

Introducing Dify Agent (Experimental): A New Agent Experience in Dify

Warning

You should provide Dify Agent services ⚠️only to trusted, non-malicious users⚠️.

As many of you know, the shell-based LLM agent paradigm has brought a major leap in agent capabilities and changed how we think about agents. Meanwhile, Skills provide a standardized way to package and distribute capabilities, making it easier to build powerful agents.

Today, we are experimentally launching Dify Agent. Like other leading agents, it runs in a Linux sandbox. This release includes:

  • A builder for creating Dify Agents

    • You can build Dify Agents through the UI: set a base prompt, upload Skills and files, and connect tools and knowledge from the Dify ecosystem.
    • We also provide an agent that helps you build Dify Agents. Through conversation, it can configure the Linux sandbox environment, install required packages, and create new Skills and files that your Dify Agent can use later.
  • Dify Workflow integration for Dify Agent

    • You can use an existing Dify Agent in a Dify Workflow, or temporarily create an inline Dify Agent. It will execute the task defined by the workflow node, generate the required output, and pass it to the next node.
  • A new web app experience

    • The Dify Agent you build can be published and used as a web app. While the user experience remains familiar, it is now powered by Dify Agent.

Docs: https://docs.dify.ai/en/self-host/use-dify/build/new-agent/overview

Limitations

Please note that in the current experimental release, all Dify Agents run in the same sandbox. This means:

  • Under normal circumstances, each Dify Agent configures its environment and executes tasks within its own workspace without interfering with others.
  • However, with simple instructions, any Dify Agent can read or interfere with the environments and data of other Dify Agents, including user data.

Strict isolation will be implemented in a future release. For now,

Warning

You should provide Dify Agent services ⚠️only to trusted, non-malicious users⚠️.

Similarly, because Dify Agent is not fully ready yet, you may find that some features are not available for Dify Agent. For example, Dify Workflow DSL export is unavailable when the workflow contains nodes that reference Dify Agent.

Upgrade Guide

Important

  • This release includes new database migrations. Run them as part of the upgrade.
  • Environment variables changed. Review the Environment Variable Changes section and update your .env accordingly.
  • Docker Compose configuration files changed. If you maintain a customized docker-compose.yaml, review the changes and re-apply local customizations carefully.

Docker Compose Deployments

  1. Back up your customized docker-compose YAML and env files.
    cd docker
    cp docker-compose.yaml docker-compose.yaml.$(date +%s).bak
    cp .env .env.$(date +%s).bak 2>/dev/null || true
  2. Get the latest code for the 1.16.0-rc1 release.
    git fetch --tags
    git checkout 1.16.0-rc1
  3. Stop the services (run inside the docker directory).
    docker compose down
  4. Back up data.
    tar -cvf volumes-$(date +%s).tgz volumes
  5. Review any env file changes and re-apply local customizations.
  6. Upgrade services.
    docker compose up -d

Source Code Deployments

  1. Stop the API server, Worker, and Web frontend server.
  2. Get the latest code for the 1.16.0-rc1 release.
    git fetch --tags
    git checkout 1.16.0-rc1
  3. Update Python dependencies.
    cd api
    uv sync
  4. Run database migrations.
    uv run flask db upgrade
  5. Restart the API server, Worker, and Web frontend server. To experiment with the new agent feature, you also need to start dify-agent and shellctl. Important: shellctl does not include built‑in authentication — for security, it is strongly recommended to run it inside a container.

What's Changed

  • chore(api): surface pyrefly output on type-check failures by @QuantumGhost in #37934
  • test: replace logger mock with caplog in workflow collaboration test by @ojasarora77 in #37971
  • ci: emit pyrefly diagnostics as GitHub workflow commands by @ojasarora77 in #37974
  • refactor(api): migrate response contract tooling to BaseModel by @cqjjjzr in #37950
  • fix(cli): use a(n) article in difyctl prerelease warning by @GareArc in #37976
  • fix(api): require edit access for trace config changes by @laipz8200 in #37973
  • feat(webapp): display app description on chat and text-generation app screens by @kurokobo in #37345
  • fix: decouple deployment access control dialog by @hyoban in #37936
  • refactor(tests): use caplog in workflow collaboration service tests (#37468) by @hikariming in #37991
  • fix(web): make marketplace URL builder SSR-safe by @lyzno1 in #37944
  • refactor: simplify deployment access ownership by @hyoban in #37994
  • refactor: Use pytest caplog instead of logger patching in test_spec.py by @DevCube24 in #37997
  • refactor: align deployment detail state ownership by @hyoban in #38008
  • fix: isolate node selector keyboard events by @lyzno1 in #37998
  • fix(web): keep HITL input-field save button visible in the edit dialog by @manan-tech in #38007
  • refactor(api): enforce enums over string literals on openapi surface by @GareArc in #38009
  • chore: migrate account role test to testcontainers by @escape0707 in #38010
  • refactor: pass db session into service calls (#37403) by @xiejl001 in #38016
  • feat(api): cache workflow provider configurations by @linw1995 in #37980
  • fix(web): capture blog UTM/slug attribution reliably under CSP by @CodingOnStar in #38022
  • fix: plugin installation task popover layout when some failed too long by @hjlarry in #38000
  • feat(web): add customizable input placeholder for Agent/Chatflow/Chatbot web app by @CyberPU2099 in #37790
  • refactor: replace patch logger with caplog in test_version.py by @EvanYao826 in #38029
  • docs(web): fix testing guide link by @Harsh23Kashyap in #38006
  • feat(agent-v2): sync nightly updates to main (2026-06-25) by @BeautyyuYanli in #37915
  • chore: inject session by @asukaminato0721 in #37941
  • fix(web): download markdown file-preview links as attachments by @uxgnod in #38030
  • chore(i18n): sync translations with en-US by @github-actions[bot] in #38035
  • fix: remove aria-busy from loading button by @lyzno1 in #38036
  • fix: improve members role chip accessibility by @lyzno1 in #38037
  • fix: improve workflow run archive idempotency and batching by @41tair in #38027
  • refactor(web): organize deployment feature state by @hyoban in #38065
  • fix: prevent exiting toasts from blocking page clicks by @lyzno1 in #38063
  • fix: gate deployments in route layout by @lyzno1 in #38078
  • refactor: shell provider protocol by @wylswz in #38077
  • fix: simplify scroll area composition by @lyzno1 in #38113
  • fix(web): improve main nav focus outline by @lyzno1 in #38114
  • fix: CAN_REPLACE_LOGO should be false by @fatelei in #38126
  • chore: update deps by @hyoban in #38128
  • chore: downgrade openapi-ts by @hyoban in #38141
  • fix: support Unicode characters in form field names by @WTW0313 in #38138
  • feat: refine snippet siderbar and support RBAC. by @FFXN in #38134
  • fix(web): align web app nav item width by @lyzno1 in #38146
  • fix(api): isolate side-effect database writes by @lin-hongkuan in #37895
  • fix(api): wire dedicated timeout into inner RBAC requests by @GareArc in #38150
  • fix: multimodal segment attachment indexing by @Blackoutta in #38080
  • fix: agent app log detail modal not display well by @hjlarry in #38014
  • fix(vdb): remove deprecated SQL options for ADB-PG 7.0 compatibility by @shiyuanfang2nd in #38004
  • fix: editor should not query billing subscriptions by @hjlarry in #38157
  • perf(api): retrieve published workflows via app.workflow_id by @linw1995 in #38153
  • fix: editor can view the logs by @hjlarry in #38165
  • perf: make command rbac-migrate-member-roles use less mem and make it… by @fatelei in #38151
  • fix(api): skip uuidv7() creation when PostgreSQL 18 provides it natively by @zeeshan56656 in #36998
  • feat(mcp): support dynamic HTTP request headers in MCPClient by @Sanket2329 in #37938
  • chore(i18n): update role management permission keys for multiple languages by @WTW0313 in #38186
  • fix: update documentation links in permission set and role modals by @WTW0313 in #38188
  • test(e2e): add agent v2 test infrastructure by @lyzno1 in #38191
  • feat: support dataset permission migrate to rbac by @fatelei in #38166
  • chore: inject more db.session by @asukaminato0721 in #38045
  • fix(workflow): guard on_tool_execution stdout traces behind DEBUG by @MRZHUH in #38200
  • fix: stress test setup process and report structure workflow for Dify 1.15.0+ by @Blackoutta in #38194
  • fix: debug plugin permission setting not work by @hjlarry in #38197
  • chore(dify-ui): update theme tokens by @lyzno1 in #38189
  • fix(api): scope nested resource lookups by owner refs by @WH-2099 in #38177
  • fix(api): register rbac-migrate-dataset-permissions CLI command by @GareArc in #38204
  • fix(api): Fixing API contract generation infrastructure by @cqjjjzr in #38042
  • fix(api): prevent plugin provider cache stampedes by @VeraPyuyi in #37388
  • perf(web): improve vinext home startup time by @hyoban in #38219
  • fix(web): hide deployment access tab by @hyoban in #38222
  • fix(web): hide deployment access sidebar tab by @hyoban in #38229
  • perf(web): lazy load console contract shards by @hyoban in #38230
  • fix(api): avoid infinite loop in _delete_records when batch deletion fails by @p2003722 in #38118
  • refactor(web): migrate console contracts to generated types by @hyoban in #38231
  • feat(workflow-generator): enhance the AI auto-creation flow end-to-end by @crazywoola in #38175
  • chore(i18n): sync translations with en-US by @github-actions[bot] in #38239
  • build(deps): bump pydantic-ai-slim from 1.85.1 to 1.102.0 in /dify-agent by @dependabot[bot] in #38135
  • fix: handle integration marketplace install callbacks by @Jingyi-Dify in #38236
  • chore(agent-v2): sync daily changes by @lyzno1 in #38162
  • refactor(web): migrate console contracts to generated routes by @hyoban in #38233
  • refactor(web): decouple detail sidebars from main nav by @hyoban in #38241
  • refactor: pass db.session explicitly in DatasetIndexToolCallbackHandler by @sergioperezcheco in #38082
  • refactor: use Pydantic for sensitive word avoidance config (Fixes #37… by @escapefyh in #37660
  • fix: order main nav account classes by @hjlarry in #38251
  • chore(github): add e2e labeler and code owner by @lyzno1 in #38257
  • fix(web): improve card grid responsiveness by @hyoban in #38263
  • chore: remove useless tag params logic in use effect by @iamjoel in #38269
  • fix(web): clarify unpublished explore app handling by @euxx in #38260
  • refactor(ui): use inset ring utilities by @lyzno1 in #38275
  • refactor(web): migrate model provider console contracts by @hyoban in #38253
  • refactor(web): migrate trigger console contracts by @hyoban in #38255
  • refactor(web): migrate rbac access console contracts by @hyoban in #38256
  • refactor(web): migrate plugin console contracts by @hyoban in #38252
  • refactor(web): migrate snippet console contracts by @hyoban in #38258
  • refactor(web): migrate trial app console contracts by @hyoban in #38254
  • chore: remove empty .codex file by @QuantumGhost in #38286
  • fix(web): add missing i18n for CLI device flow login page by @GareArc in #38282
  • refactor(api): migrate console app common endpoints to BaseModel by @cqjjjzr in #37951
  • refactor(web): remove custom console contract loaders by @hyoban in #38284
  • refactor(api): migrate console app chat endpoints to BaseModel by @cqjjjzr in #37952
  • fix(api): keep provider refresh waiters single-flight by @WH-2099 in #38226
  • fix(api): tolerate legacy service_api end-user type on load by @manan-tech in #38271
  • fix(templates): make End output variable names unique in built-in templates by @manan-tech in #38293
  • fix: web detail adjustment before release by @iamjoel in #38296
  • test(e2e): add agent v2 core coverage by @lyzno1 in #38209
  • fix: sql injection by @FFXN in #38295
  • fix(api): stop swallowing document indexing errors in create handler by @Harsh23Kashyap in #38192
  • chore(api): disallow builtins getattr variants in new code by @QuantumGhost in #38250
  • fix: Working outside of application context. by @fatelei in #38300
  • fix(agent-v2): preserve oauth2 credential refs when converting tool c… by @linw1995 in #38303
  • fix(web): align monitoring overview charts by @hyoban in #38292
  • fix(web): fill dataset create layout height by @lyzno1 in #38308
  • fix: support multi-worker workflow collaboration by @hjlarry in #38242
  • refactor(web): move marketplace contract to contracts package by @hyoban in #38311
  • chore(i18n): sync translations with en-US by @github-actions[bot] in #38301
  • fix: enhance SQL query safety and add metadata key validation by @FFXN in #38307
  • feat(agent-v2): resolve Dify core tools in agent runtime runner by @linw1995 in #38316
  • fix: Notion sync empty state width in knowledge creation by @hjlarry in #38321
  • fix: normalize query array params for oRPC by @hyoban in #38322
  • fix(workspace): expose last opened in contract by @lyzno1 in #38323
  • fix(web): keep app sort filter with header filters by @hyoban in #38324
  • test: migrate tag service tests to testcontainers by @escape0707 in #38313
  • refactor: thread explicit sessions through app retrieval paths by @41tair in #38309
  • fix(web): align main nav app item states by @lyzno1 in #38326
  • fix: prevent app card meta overflow by @Jingyi-Dify in #38349
  • perf(memory): batch-load message files in TokenBufferMemory to remove N+1 queries by @weijun-xia in #38002
  • feat(device-flow): redirect SSO-complete failures to a dedicated device error view by @GareArc in #38185
  • fix(web): align external API and service API buttons vertically in datasets header by @p2003722 in #38139
  • chore(api): upgrade graphon to v0.6.0, migrate HITL logic back to Dify by @QuantumGhost in #38247
  • fix: handle Xinference model credential context by @AsperforMias in #38348
  • chore(i18n): sync translations with en-US by @github-actions[bot] in #38355
  • feat(api): abort active workflow runs during Celery warm shutdown by @linw1995 in #38220
  • feat: snippet siderbar update by @JzoNgKVO in #38371
  • chore: compress large plugin_model obj in redis by @hjlarry in #38374
  • fix(cli): report GitHub API rate limits in difyctl install scripts by @lin-snow in #38375
  • refactor: manage rag pipeline sessions explicitly by @41tair in #38274
  • fix: incorrect backgroud when dark mode and no plugins by @hjlarry in #38378
  • chore: use zstd for plugin model provider cache by @hjlarry in #38382
  • fix(web): adjust snippets input count badge color by @JzoNgKVO in #38386
  • fix(chat): enhance pointer event handling in chat components by @WTW0313 in #38385
  • feat(api): add sandbox info endpoint for Agent App conversations by @linw1995 in #38390
  • refactor: make session boundaries explicit for migration flows by @41tair in #38379
  • refactor: replace db.paginate with plain SQLAlchemy pagination by @sergioperezcheco in #38280
  • test(dify-ui): remove low-value style assertions by @lyzno1 in #38418
  • fix(dify-ui): standardize story focus indicators by @lyzno1 in #38417
  • fix(models): correct onupdate typo on trigger.py updated_at columns by @SquabbyZ in #38341
  • refactor(dify-ui): render ContextMenu story trigger as a semantic area by @lyzno1 with @Copilot in #38420
  • chore(agent-v2): sync daily changes by @lyzno1 in #38298
  • style: fix provider card dropdown menu seperator margin by @lyzno1 in #38422
  • ci: extract external E2E into dedicated post-merge workflow by @lyzno1 with @Copilot in #38426
  • fix(web): prevent plugin cards from overlapping marketplace panel by @lyzno1 in #38427
  • fix(dify-ui): improve picker type inference by @lyzno1 in #38428
  • fix(dify-ui): preserve radio value generics by @lyzno1 in #38429
  • test(e2e): split agent build draft apply coverage by @lyzno1 in #38431
  • fix(api/tasks): use f-string for raise messages in resume_workflow_ex… by @Harsh23Kashyap in #37607
  • refactor(api): migrate console explore endpoints to BaseModel by @cqjjjzr in #37953
  • refactor: drop redundant len(tag_ids)==0 check in get_target_ids_by_tag_ids by @isheng-eqi in #38447
  • build(deps): bump the github-actions-dependencies group across 1 directory with 12 updates by @dependabot[bot] in #38430
  • fix(web): update snippet placeholder icon color by @JzoNgKVO in #38445
  • fix(api): isolate side-effect session writes in multimodal and RAG handlers by @agarwalpranav0711 in #38210
  • docs(dify-ui): clarify radio composition stories by @lyzno1 in #38456
  • refactor(api): migrate workspace account endpoints to BaseModel by @cqjjjzr in #37954
  • refactor(api): migrate dataset rag pipeline endpoints to BaseModel by @cqjjjzr in #37958
  • refactor(api): remove member field compatibility by @cqjjjzr in #37966
  • test: example use sqlite3 as unittest backend by @asukaminato0721 in #38159
  • refactor(api): migrate web auth endpoints to BaseModel by @cqjjjzr in #37961
  • fix(api): resolve plugin external user ids in backwards invocation by @Harsh23Kashyap in #38098
  • feat(api): pass app_id to model plugins for provider-side cost attribution by @ryuta-kobayashi-ug in #35859
  • fix(web): redirect imported apps with creator permissions by @hjlarry in #38460
  • chore: Update sidebar web app menu translations by @hjlarry in #38473
  • refactor(dify-ui): consolidate radio family API by @lyzno1 in #38479
  • chore(agent-v2): sync changes by @lyzno1 in #38442
  • refactor(api): Stop masking refresh-token service errors as 401 by @QuantumGhost in #38463
  • fix(web): unify detail sidebar home control by @Jingyi-Dify in #38487
  • refactor(api): clarify DSL import and plugin migration boundaries by @WH-2099 in #38483
  • chore: set NEXT_PUBLIC_ENABLE_FEATURE_PREVIEW default to true by @crazywoola with @Copilot in #38362
  • feat(mcp): support MCP protocol 2025-06-18 for workflow-as-MCP server (version negotiation + structured output) by @CourTeous33 in #37892
  • test(e2e): stabilize Agent v2 external runtime checks by @hyoban in #38493
  • chore: add sqlite3 to conftest by @asukaminato0721 in #38475
  • fix: resolve 36288 mypy errors by @jashwanth-reddy-g in #37850
  • fix: editor should not manage member by @hjlarry in #38503
  • chore: update editor permission by @fatelei in #38505
  • chore: improve cherry pick missed message by @FFXN in #38496
  • docs(component): document focus-visible guidance by @lyzno1 in #38509
  • refactor(web): move app context layout styles to shell by @lyzno1 in #38511
  • fix(web): add backdrop blur to skip nav by @lyzno1 in #38517
  • fix: can't debug model plugins by @hjlarry in #38500
  • refactor(web): clarify app context bootstrap graph by @hyoban in #38516
  • chore(api): cache the setup status to cut down DB access by @cqjjjzr in #36966
  • refactor(test): replace SimpleNamespace with typed mocks in schedule service tests by @ojasarora77 in #38393
  • refactor(web): reduce query atom subscriptions by @hyoban in #38521
  • test(services): cover DSL import and plugin migration regressions by @Lillian68 in #36072
  • refactor(openapi): resource-oriented paths for /openapi/v1 + difyctl version gate by @lin-snow in #38367
  • refactor(web): migrate dataset access context by @hyoban in #38523
  • chore: clean Db session from service by @asukaminato0721 in #38227
  • test(dify-ui): remove brittle primitive assertions by @lyzno1 in #38529
  • refactor(web): migrate app context consumers by @hyoban in #38530
  • chore(deps): upgrade vite-plus toolchain by @lyzno1 in #38534
  • fix(web): cache server console context by @lyzno1 in #38535
  • test(web): align auth e2e with console home by @lyzno1 in #38538
  • fix: raise clear error on unsupported language in execute_code by @isheng-eqi in #38448
  • fix(ci): make no-new-getattr guard stable in shallow PR checkouts by @EvanYao826 in #38480
  • fix(web): guard invite-settings activate button against double-click by @SquabbyZ in #38337
  • refactor(web): migrate plugins and tools app context consumers by @hyoban in #38533
  • refactor(web): migrate billing app context consumers by @hyoban in #38541
  • feat(api): use billing quota for credit pool by @zyssyz123 in #38028
  • fix(cli): --insecure also skips TLS certificate verification by @GareArc in #38531
  • chore: remove superpowers artifacts by @lyzno1 in #38547
  • fix: display errors for oauth page by @crazywoola in #38546
  • refactor(web): migrate account settings app context consumers by @hyoban in #38544
  • test: more caplog by @asukaminato0721 in #38452
  • refactor(web): migrate workflow app context consumers by @hyoban in #38552
  • refactor(web): migrate agent v2 app context consumers by @hyoban in #38558
  • refactor(api): migrate workspace tool endpoints to BaseModel by @cqjjjzr in #37959
  • refactor(api): remove remaining legacy field remnants by @cqjjjzr in #37967
  • refactor(web): migrate shell navigation app context consumers by @hyoban in #38560
  • test: scope agent build draft e2e selector by @lyzno1 in #38563
  • refactor(web): remove remaining app context consumers by @hyoban in #38565
  • chore(agent-v2): sync changes by @lyzno1 in #38513
  • perf: batch-load messages in advanced-chat workflow run list to remove N+1 by @weijun-xia in #38359
  • refactor(web): remove app context provider by @hyoban in #38568
  • test(e2e): stabilize agent build draft note scenario by @lyzno1 in #38571
  • refactor(web): sync app context effects with jotai by @hyoban in #38570
  • test(e2e): fix agent build note runtime connection by @lyzno1 in #38574
  • fix: preserve ResponseStreamFilter state across workflow pause/resume by @GareArc in #38540
  • chore: upgrade TypeScript 7 by @hyoban in #38575
  • fix: when delete custom model remove its cache by @hjlarry in #38577
  • refactor(web): add prefetched query atom by @hyoban in #38572
  • chore: generate fastopenapi console contracts by @hyoban in #38580
  • refactor(api): migrate workspace model endpoints to BaseModel by @cqjjjzr in #37963
  • refactor(api): migrate snippet workspace endpoints to BaseModel by @cqjjjzr in #37956
  • refactor(api): migrate dataset endpoints to BaseModel by @cqjjjzr in #37957
  • refactor(api): migrate web chat endpoints to BaseModel by @cqjjjzr in #37962
  • refactor(api): migrate service app endpoints to BaseModel by @cqjjjzr in #37960
  • fix: run user_connect authorization inside Flask app context by @GareArc in #38585
  • fix: guard chat tree against out-of-order parents by @iamjoel in #38590
  • fix(web): preserve attribution from auth redirect by @CodingOnStar in #38583
  • refactor(web): split app context state atoms by @hyoban in #38588
  • refactor(tests): replace logger mocks with caplog in trace provider tests by @melooooooo in #38569
  • fix: chunk workflow failure tracking data by @CodingOnStar in #38598
  • chore: batch example #38419 by @asukaminato0721 in #38474
  • fix: harden workflow archive DB retries by @zhaohao1004 in #38170
  • fix(api): ignore invalid utf8 cache payloads by @Harsh23Kashyap in #37835
  • docs: remove Dify Premium on AWS Marketplace section from all READMEs by @Inlei in #38607
  • feat: daily sync by @zyssyz123 in #38593
  • fix(web): update docs links by @hyoban in #38591
  • fix: fix miss session param by @fatelei in #38612
  • chore: Bump version to 1.16.0-rc1 by @QuantumGhost in #38600
  • fix: fix auth prefix duplicate by @fatelei in #38616
  • fix: remove hardcoded sandbox path in configuration file by @QuantumGhost in #38618

New Contributors

Full Changelog: 1.15.0...1.16.0-rc1

Don't miss a new dify release

NewReleases is sending notifications on new releases.