Find, Choose, and Use Kestra Plugins for Any Integration
For the complete documentation index, see llms.txt. For a full content snapshot, see llms-full.txt. Append.mdto anykestra.io/docs/*URL for plain Markdown.
Plugins are the integrations that let flows connect to databases, APIs, file systems, queues, and runtime environments — every task and trigger in Kestra is provided by a plugin. Browse the full catalog at kestra.io/plugins.
Plugin categories
Plugins come in three categories:
- Tasks perform work (HTTP, JDBC, Python, Spark, Script, etc.).
- Triggers start executions (Schedule, Webhook, Kafka, Pub/Sub).
- Conditions control when triggers fire or which branch of a
Switchruns.
The Kestra MCP server gives AI coding agents like Claude Code and Cursor live access to plugin task schemas, properties, and version history. Add it to your agent for accurate plugin reference while writing flows.
Choosing versions
Kestra can host multiple versions of the same plugin:
- Pin a version on an individual task or trigger with
version: "1.0.0". - Omit
versionto use the instance-wide default (oftenLATEST). - In Enterprise Edition, install and manage versions centrally under Instance → Versioned Plugins (see Versioned Plugins).
id: postgres_querynamespace: company.team
tasks: - id: fetch type: io.kestra.plugin.jdbc.postgresql.Query version: "1.0.0" url: jdbc:postgresql://127.0.0.1:56982/ username: "{{ secret('POSTGRES_USERNAME') }}" password: "{{ secret('POSTGRES_PASSWORD') }}" sql: select * from orders limit 1000 fetchType: STORECommon configuration patterns
Handling outputs: fetch vs. store
The fetchType property controls how task outputs are returned. For large datasets, use STORE — it writes results to internal storage and returns only a URI, preventing large payloads from bloating the execution context.
| Setting | Use when you need | Stored in context | Pebble access |
|---|---|---|---|
fetchType: FETCH_ONE | A single small record | The value itself | {{ outputs.task.value }} |
fetchType: FETCH | A small list | The list values | {{ outputs.task.value }} |
fetchType: NONE | No result | Nothing | n/a |
fetchType: STORE | Large payloads | Only a URI | {{ outputs.task.uri }} |
value and uri are mutually exclusive: FETCH/FETCH_ONE exposes value; STORE exposes uri. Accessing the wrong one raises an execution error.
For guidance on large outputs, see Managing output data volume.
Secrets
Use secrets for connection strings, URLs, usernames, tokens, and passwords. Any value written directly in a flow definition is stored in its revision history and visible to anyone with access to the flow.
username: "{{ secret('POSTGRES_USERNAME') }}"password: "{{ secret('POSTGRES_PASSWORD') }}"See Secrets in Open Source or Secrets Manager (Enterprise Edition).
Installing plugins
- OSS: the standard Kestra Docker image ships with plugins pre-installed. For a minimal build, use the
-no-pluginsimage and install selectively viakestra plugins install <artifact>or by mounting plugin JARs to/app/plugins/. - UI (Enterprise Edition): install, upgrade, and pin versions under Instance → Versioned Plugins.
See Selected Plugin Installation for full setup options including Docker Compose automation.
Building or requesting plugins
- Build: follow the Plugin Developer Guide to scaffold, test, and publish.
- Request: open an issue in the Kestra repository or ask in the Kestra Slack community.
Was this page helpful?