# Kestra

Orchestration and scheduling platform for event-driven workflows.

- Replaces: [Zapier](https://openlogs.fyi/alternatives/zapier)
- Summary: Paid workflow automation services, such as Zapier.
- Stack: Java (language), PostgreSQL (database)
- Deployment: docker_compose
- License: Apache-2.0 (osi) [source](https://github.com/kestra-io/kestra/blob/4a679406552fe4e5409e567ff3219db9992a6a38/LICENSE)
- Business model: unknown. The README at the pinned commit does not state a business model, so it stays unknown. ([source](https://github.com/kestra-io/kestra/blob/4a679406552fe4e5409e567ff3219db9992a6a38/README.md), read 2026-10-22)
- 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.
- Requirements: not stated
- Repository: [kestra-io/kestra](https://github.com/kestra-io/kestra)

## Install

1. Docker with the Compose plugin ([source](https://github.com/kestra-io/kestra/blob/4a679406552fe4e5409e567ff3219db9992a6a38/docker-compose.yml))

   ```text
   A host with Docker and the Docker Compose plugin. This entry runs from a compose file.
   ```

2. Save the compose file as docker-compose.yml ([source](https://github.com/kestra-io/kestra/blob/4a679406552fe4e5409e567ff3219db9992a6a38/docker-compose.yml))

   ```yaml
   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: admin@kestra.io # 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
   ```

3. Start it ([source](https://github.com/kestra-io/kestra/blob/4a679406552fe4e5409e567ff3219db9992a6a38/docker-compose.yml))

   ```bash
   docker compose up -d
   ```

4. Open the app ([source](https://github.com/kestra-io/kestra/blob/4a679406552fe4e5409e567ff3219db9992a6a38/docker-compose.yml))

   ```text
   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. ([source](https://github.com/kestra-io/kestra/blob/4a679406552fe4e5409e567ff3219db9992a6a38/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. ([source](https://github.com/kestra-io/kestra/blob/4a679406552fe4e5409e567ff3219db9992a6a38/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). ([source](https://github.com/kestra-io/kestra/blob/4a679406552fe4e5409e567ff3219db9992a6a38/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. ([source](https://github.com/kestra-io/kestra/blob/4a679406552fe4e5409e567ff3219db9992a6a38/docker-compose.yml), checked 2026-10-22)

### Signals

Computed from a GitHub snapshot taken 2026-10-22.

- Open issues and pull requests: 888
- Stars: 29943, forks: 3455
- Last push: 2026-10-22 (0 days ago)
- Latest release: v2.0.7 on 2026-10-20 (1 days ago)

## Sources

- [Repository: https://github.com/kestra-io/kestra](https://github.com/kestra-io/kestra)
- [License: https://github.com/kestra-io/kestra/blob/4a679406552fe4e5409e567ff3219db9992a6a38/LICENSE](https://github.com/kestra-io/kestra/blob/4a679406552fe4e5409e567ff3219db9992a6a38/LICENSE)
- [Business model: https://github.com/kestra-io/kestra/blob/4a679406552fe4e5409e567ff3219db9992a6a38/README.md](https://github.com/kestra-io/kestra/blob/4a679406552fe4e5409e567ff3219db9992a6a38/README.md)
- [Compose file: https://github.com/kestra-io/kestra/blob/4a679406552fe4e5409e567ff3219db9992a6a38/docker-compose.yml](https://github.com/kestra-io/kestra/blob/4a679406552fe4e5409e567ff3219db9992a6a38/docker-compose.yml)

---
Canonical: https://openlogs.fyi/tools/kestra  
Last updated: 2026-10-22
