Skip to main content

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#

Can one plugin combine multiple types?

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.

Tool vs. Agent Strategy: what's the difference?

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 vs. Trigger: both pull from external systems?

Datasource brings documents into a knowledge base for retrieval. Trigger fires a workflow in real time on an upstream event. The same systems can power both, but the consumption pattern differs: indexing vs. event-driven execution.

Extension vs. Tool: when is a plain HTTP endpoint right?

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: