Get started with Kestra in 3 minutes.
- What user problem does this solve? Teams that run Quickwit today drive it from Kestra with
io.kestra.plugin.core.http.Requestand hand-built JSON: every flow repeats the base URL, theapi/v1prefix, the query-string encoding, and the error handling. This plugin wraps the Quickwit REST API in typed tasks, so a flow only declares what it wants to search, ingest or manage. - Why would a team adopt this plugin in a workflow? Search, ingest, index, source and delete-task operations become first-class tasks with validated properties and outputs that downstream tasks consume directly (
outputs.search.rows,outputs.ingest.numRejectedDocs), instead of nested Pebble expressions over raw HTTP responses. - What operational/business outcome does it enable? Log and trace pipelines that load data into Quickwit and alert on it become readable and reviewable: a doc-mapping mismatch surfaces as Quickwit's own error message, and
search.Triggerreacts to new documents without polling from scratch on every run.
Tasks live under io.kestra.plugin.quickwit, grouped by subpackage:
| Subpackage | Components |
|---|---|
search |
Search, Trigger |
ingest |
Ingest |
index |
Create, Get, List, Delete, Clear |
source |
Create, Toggle, Delete, ResetCheckpoint |
deletetask |
Create, List |
Every task and the trigger share the same connection properties, declared flat on the component: url (required), plus optional basicAuth, headers, connectTimeout and readTimeout. Quickwit itself has no authentication layer, so credentials only matter when the cluster sits behind a reverse proxy or an API gateway.
tasks:
- id: search
type: io.kestra.plugin.quickwit.search.Search
url: "http://localhost:7280"
index: app-logs
query: "severity:ERROR"
maxHits: 100See src/main/resources/doc/io.kestra.plugin.quickwit.md for the full how-to, and the Quickwit REST API reference for the underlying endpoints.
- Build the shadow JAR:
./gradlew shadowJar. The output lands inbuild/libs/. - Run
docker compose up.docker-compose.ymlbuildskestra/kestra:latest, mountsbuild/libs/to/app/plugins/, and starts a Quickwit node on port 7280, so Kestra picks up the jar and the flows can be exercised against a real cluster. - Kestra UI is available at localhost:8080; Quickwit's REST API at localhost:7280.
Mounting a host folder onto /app/plugins/ replaces the container's plugins directory rather than adding to it. Core plugins (the ones logged as Registered N core plugins) are compiled into Kestra itself and aren't affected, but any additional plugin normally bundled in the base image under /app/plugins/ (e.g. the Python script plugin) gets hidden once the mount is in place. If a flow you're testing depends on another plugin, copy its jar into build/libs/ too before starting the container.
On some hosts, command: server local fails with:
Unable to create JFR repository directory using base location (/tmp)
docker-compose.yml works around this by mounting /tmp as tmpfs. If you build your own compose file or run Kestra via docker run, add the same workaround, e.g. -v /tmp:/tmp or --tmpfs /tmp. Tracked upstream in kestra-io/kestra#17405.
- Full documentation can be found under: kestra.io/docs
- Documentation for developing a plugin is included in the Plugin Developer Guide
Apache 2.0 © Kestra Technologies
We release new versions every month. Give the main repository a star to stay up to date with the latest releases and get notified about future updates.
