Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.dify.ai/llms.txt

Use this file to discover all available pages before exploring further.

Dify supports several plugin types, each targeting a different extension point inside the platform. Pick the one that matches how your code will be invoked.

Quick decision

You want to…Build a…
Add a callable action to Agents and Workflows (search, send email, transform data, etc.)Tool
Make a new LLM, embedding, rerank, TTS, STT, or moderation model selectable inside DifyModel
Implement a custom reasoning loop for Agents (ReAct, Function Calling variant, etc.)Agent Strategy
Expose an HTTP endpoint that external services can call to drive a Dify workflowExtension (Endpoint)
Ingest documents from an external system into a Knowledge BaseDatasource
Start a workflow when something happens upstream (a webhook fires, a file lands)Trigger

Common questions

Yes. A Tool plugin can also expose endpoints. For example, a Discord bot plugin sends messages (tool) and receives webhooks (endpoint) in one package. Model plugins are stricter: they cannot bundle tools or endpoints.
A Tool is an individual capability the Agent decides to call (like “search the web”). An Agent Strategy is the reasoning loop itself: the policy that decides which tools to call, in what order, and when to stop. Build a tool unless you’re replacing how Agents think.
Datasource brings documents into a Knowledge Base for retrieval. Trigger fires a workflow in real time on an upstream event. Same systems can power both, but the consumption pattern is different: indexing vs. event-driven execution.
Extensions are for the other direction: an outside service calls into Dify. Tools are for Agents/Workflows calling out to a service. Build an Extension when your plugin is the entry point, not the action.

Next steps

Once you’ve picked a type, set up the CLI and scaffold a project:

Install the CLI

Get dify on your machine and run dify plugin init.

Read the manifest spec

Understand the YAML structure every plugin shares.

Edit this page | Report an issue