Kestra
Orchestration and scheduling platform for event-driven workflows.
- Replaces
-
Paid workflow automation services, such as Zapier.
All open-source alternatives to Zapier
- Difficulty
-
Difficulty: Medium
2 services (1 database or broker: postgres), 4 volume mounts, no env values to set, host access: docker_socket. Heuristic score 5 of 11: medium.
- Stack
Java (language), PostgreSQL (database)
- Deployment
docker_compose
- Requirements
Not stated.
- License
-
Apache-2.0(OSI-approved open source) - Business model
-
Unknown
The README at the pinned commit does not state a business model, so it stays unknown.
Source: github.com/kestra-io/kestra/blob/4a67940/README.md, read on .
- Repository
GitHub stats
- Stars
- 29,943
- Forks
- 3,455
- Open issues and pull requests
- 888
- Last push
- 2026-10-22
- Latest release
- v2.0.7
- Released
- 2026-10-20
From the GitHub API on . These numbers are a snapshot, not live. GitHub detected the license as Apache-2.0.
Compose file
volumes:
postgres-data:
driver: local
kestra-data:
driver: local
services:
postgres:
image: postgres:18
volumes:
- postgres-data:/var/lib/postgresql
environment:
POSTGRES_DB: kestra
POSTGRES_USER: kestra
POSTGRES_PASSWORD: k3str4
healthcheck:
test: ["CMD-SHELL", "pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}"]
interval: 10s
timeout: 10s
retries: 10
kestra:
image: kestra/kestra:latest
pull_policy: always
restart: unless-stopped
# Kestra, by default, has a termination grace period of 5m. We need to wait a little more to be sure no active tasks are running.
stop_grace_period: 6m
# Note that this setup with a root user is intended for development purpose.
# Our base image runs without root, but the Docker Compose implementation needs root to access the Docker socket
user: "root"
command: server standalone
volumes:
- kestra-data:/app/storage
- /var/run/docker.sock:/var/run/docker.sock
- /tmp/kestra-wd:/tmp/kestra-wd
environment:
KESTRA_CONFIGURATION: |
datasources:
postgres:
url: jdbc:postgresql://postgres:5432/kestra
driverClassName: org.postgresql.Driver
username: kestra
password: k3str4
kestra:
# server:
# basic-auth:
# username: [email protected] # it must be a valid email address
# password: Admin1234! # it must be at least 8 characters long with uppercase letter and a number
repository:
type: postgres
storage:
type: local
local:
base-path: "/app/storage"
queue:
type: postgres
tasks:
tmp-dir:
path: /tmp/kestra-wd/tmp
url: http://localhost:8080/
ports:
- "8080:8080"
# The following is the management port, not exposed by default.
# Note that exposing the management port is intended for development purpose as this port is un-authenticated by default
# and expose sensitive information and actions.
# - "8081:8081"
depends_on:
postgres:
condition: service_healthy
From the app's own repository: github.com/kestra-io/kestra/blob/4a67940/docker-compose.yml.
Compose file from the app repository.
Install
- Docker with the Compose plugin (github.com/kestra-io/kestra/blob/4a67940/docker-compose.yml)
A host with Docker and the Docker Compose plugin. This entry runs from a compose file.
- Save the compose file as docker-compose.yml (github.com/kestra-io/kestra/blob/4a67940/docker-compose.yml)
Use the compose file shown above.
- Start it (github.com/kestra-io/kestra/blob/4a67940/docker-compose.yml)
docker compose up -d - Open the app (github.com/kestra-io/kestra/blob/4a67940/docker-compose.yml)
Open http://localhost:8080. The compose file publishes host port 8080 for the kestra service.
Compose file check: config_ok on 2026-10-22.
Gotchas and maintenance
Gotchas
- Some images use the latest tag or no tag. Images without a pinned version: kestra: kestra/kestra:latest. A later pull can get a different version. (github.com/kestra-io/kestra/blob/4a67940/docker-compose.yml, checked 2026-10-22)
- The compose file publishes host ports. Host ports: 8080 (kestra). A port without a host address listens on all host network interfaces. (github.com/kestra-io/kestra/blob/4a67940/docker-compose.yml, checked 2026-10-22)
- The compose file mounts host folders. Host paths mounted into containers: /tmp/kestra-wd at /tmp/kestra-wd (kestra). (github.com/kestra-io/kestra/blob/4a67940/docker-compose.yml, checked 2026-10-22)
- Some services get elevated host access. kestra mounts the Docker socket, which gives it control of Docker on the host. (github.com/kestra-io/kestra/blob/4a67940/docker-compose.yml, checked 2026-10-22)
Signals
- Open issues and pull requests: 888
- Last push: 2026-10-22 (0 days before this page was built)
- Latest release: v2.0.7 on 2026-10-20 (1 days before this page was built)