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

# Choose a Plugin Type

> A short decision guide for picking between Tool, Model, Agent Strategy, Extension, Datasource, and Trigger plugins

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](/en/develop-plugin/dev-guides-and-walkthroughs/tool-plugin)                     |
| Make a new LLM, embedding, rerank, TTS, STT, or moderation model selectable inside Dify  | [Model](/en/develop-plugin/dev-guides-and-walkthroughs/creating-new-model-provider)    |
| Implement a custom reasoning loop for Agents (ReAct, Function Calling variant, etc.)     | [Agent Strategy](/en/develop-plugin/dev-guides-and-walkthroughs/agent-strategy-plugin) |
| Expose an HTTP endpoint that external services can call to drive a Dify workflow         | [Extension (Endpoint)](/en/develop-plugin/dev-guides-and-walkthroughs/endpoint)        |
| Ingest documents from an external system into a Knowledge Base                           | [Datasource](/en/develop-plugin/dev-guides-and-walkthroughs/datasource-plugin)         |
| Start a workflow when something happens upstream (a webhook fires, a file lands)         | [Trigger](/en/develop-plugin/dev-guides-and-walkthroughs/trigger-plugin)               |

## Common questions

<AccordionGroup>
  <Accordion title="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.
  </Accordion>

  <Accordion title="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.
  </Accordion>

  <Accordion title="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. Same systems can power both, but the consumption pattern is different: indexing vs. event-driven execution.
  </Accordion>

  <Accordion title="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.
  </Accordion>
</AccordionGroup>

## Next steps

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

<CardGroup cols={2}>
  <Card title="Install the CLI" icon="rocket" href="/en/develop-plugin/getting-started/cli">
    Get `dify` on your machine and run `dify plugin init`.
  </Card>

  <Card title="Read the manifest spec" icon="book" href="/en/develop-plugin/features-and-specs/plugin-types/general-specifications">
    Understand the YAML structure every plugin shares.
  </Card>
</CardGroup>

***

[Edit this page](https://github.com/langgenius/dify-docs/edit/main/en/develop-plugin/getting-started/choose-plugin-type.mdx) | [Report an issue](https://github.com/langgenius/dify-docs/issues/new?template=docs.yml)
