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 .md to any kestra.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 Switch runs.

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 version to use the instance-wide default (often LATEST).
  • In Enterprise Edition, install and manage versions centrally under Instance → Versioned Plugins (see Versioned Plugins).
id: postgres_query
namespace: 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: STORE

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

SettingUse when you needStored in contextPebble access
fetchType: FETCH_ONEA single small recordThe value itself{{ outputs.task.value }}
fetchType: FETCHA small listThe list values{{ outputs.task.value }}
fetchType: NONENo resultNothingn/a
fetchType: STORELarge payloadsOnly 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.

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-plugins image and install selectively via kestra 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

Was this page helpful?