Guia Técnico · Fevereiro 2026 · v1.0

Kestra

Plataforma open-source de orquestração declarativa de workflows — ETL, AI Agents, automações e pipelines em escala com YAML simples.

🟣 Open-Source 🟢 26k+ GitHub Stars 🔵 600+ Plugins 🟡 AI Agents Nativo

Workflows · ETL · Event-Driven · AI Orchestration · Kubernetes · YAML

Índice
1
O que é Kestra
Orquestração declarativa — simples o suficiente para iniciantes, poderoso o suficiente para produção

Kestra é uma plataforma open-source de orquestração de workflows que permite definir, executar e monitorar pipelines complexos usando YAML simples. Fundada em 2021 e com suporte a 600+ integrações, é usada por empresas como Apple, Toyota, Bloomberg e JPMorgan Chase.

O grande diferencial é resolver a escolha falsa entre plataformas sem-código (inflexíveis) e frameworks em-código (complexos). No Kestra, você escreve YAML — qualquer engenheiro entende, qualquer linguagem funciona.

Problemas que resolve

🔄
Workflows Fragmentados
Substitui cron jobs, scripts bash e múltiplas ferramentas por orquestração unificada com visibilidade total.
🧩
DSL Proprietária Complexa
YAML declarativo simples — sem aprender Python-Airflow ou framework específico. Qualquer linguagem roda como task.
🔒
Vendor Lock-in
Apache 2.0 open-source. Deploy em qualquer cloud, Kubernetes ou on-premise sem dependência do vendor.
📊
Falta de Observabilidade
Logs em tempo real, métricas Prometheus, OpenTelemetry e dashboards integrados para ver cada task executada.
🤖
AI Workflows Manuais
AI Agents nativos (v1.0+) com memória, tools e multi-LLM support — orquestre agentes com YAML como qualquer outra task.
Escala Limitada
Core em Java suporta milhares de execuções concorrentes. Kafka Enterprise para 1000s execuções/segundo.

GitHub & Comunidade

26k+
GitHub Stars
600+
Plugins
9.4k+
Commits
$11M
Financiamento
Apache 2.0
Licença
Status de maturidade: Production-ready com uso confirmado em Apple, Toyota, Bloomberg, JPMorgan Chase. Kestra 1.0 LTS lançado com AI Agents nativos.
2
Arquitetura Técnica
Como o Kestra funciona internamente

Fluxo de Execução

Trigger
schedule/webhook/event
Message Queue
Kafka / In-memory
Executor
Distributed
Worker Pool
Horizontal scale
Task Runner
Python/Shell/Script
Storage
S3/GCS/Local
Repository
PostgreSQL
Web UI
8080
Observability
Prometheus / OTel

4 Pilares de Infraestrutura

ComponenteDev (padrão)ProduçãoEnterprise
StorageLocal filesystemS3 / GCS / Azure BlobMulti-cloud
QueueIn-memoryDatabase queuesKafka (massivo)
RepositoryH2 (embedded)PostgreSQLPostgreSQL + HA
PluginsCore plugins600+ marketplaceCustom SDK

Stack Tecnológico

CamadaTecnologiaPor quê
Core / ExecutorJavaSuporte a milhares de threads concorrentes
Banco de DadosPostgreSQLPersistência de flows, executions, logs
MensageriaKafka (Enterprise)1000+ execuções/segundo
Logs / SearchElasticsearchBusca full-text em logs históricos
MétricasPrometheus + OpenTelemetryIntegração com Grafana, Datadog, etc.
UIWeb (topology visualization)Editor YAML + DAG visual integrado
O Kestra roda em um único container para desenvolvimento. Em produção usa PostgreSQL + workers distribuídos. No Enterprise adiciona Kafka para throughput massivo.
3
Instalação & Deploy
Docker, Kubernetes, cloud e produção
MétodoCaso de UsoComplexidade
Docker Compose + PostgreSQLDev e staging com persistência — recomendado para começar⭐ Fácil
Docker single containerPrototipagem rápida (H2 embedded, sem persistência)⭐ Fácil
Kubernetes + HelmProdução enterprise, scaling automático⭐⭐⭐ Complexo
Railway / RenderCloud simples, ~$5-10/mês⭐⭐ Médio
JAR StandaloneVMs customizadas⭐⭐ Médio

3.1 Docker (teste rápido — sem persistência)

# Iniciar Kestra (banco H2 em memória — reiniciar apaga tudo)
docker run --pull=always --rm -it \
  -p 8080:8080 \
  --user=root \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /tmp/kestra-storage:/app/storage \
  kestra/kestra:latest server local

# Acessar UI
open http://localhost:8080

3.2 Docker Compose com PostgreSQL (recomendado para dev)

# docker-compose.yml
version: '3.8'
services:
  postgres:
    image: postgres:15
    environment:
      POSTGRES_DB: kestra
      POSTGRES_USER: kestra
      POSTGRES_PASSWORD: kestra
    volumes:
      - postgres-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -d kestra -U kestra"]
      interval: 5s

  kestra:
    image: kestra/kestra:latest
    entrypoint: /bin/bash
    command: -c "kestra server standalone"
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      KESTRA_CONFIGURATION: |
        datasources:
          postgres:
            url: jdbc:postgresql://postgres:5432/kestra
            username: kestra
            password: kestra
        kestra:
          repository:
            type: postgres
          storage:
            type: local
            local:
              base-path: /app/storage
    ports:
      - "8080:8080"
      - "8081:8081"
    volumes:
      - kestra-data:/app/storage
      - /var/run/docker.sock:/var/run/docker.sock

volumes:
  postgres-data:
  kestra-data:
# Subir
docker compose up -d

# Verificar logs
docker compose logs -f kestra

# Parar
docker compose down

3.3 Kubernetes com Helm (produção)

# Adicionar repositório
helm repo add kestra https://helm.kestra.io
helm repo update

# Deploy em desenvolvimento (inclui PostgreSQL + MinIO)
helm install kestra kestra/kestra-starter

# Deploy em produção (configure seu próprio PostgreSQL)
helm install kestra kestra/kestra \
  --set kestra.configuration.datasources.postgres.url="jdbc:postgresql://seu-postgres:5432/kestra" \
  --set kestra.configuration.datasources.postgres.username="kestra" \
  --set kestra.configuration.datasources.postgres.password="sua-senha" \
  --set kestra.configuration.kestra.storage.type="s3" \
  --set kestra.configuration.kestra.storage.s3.bucket="seu-bucket"

3.4 Variáveis de Ambiente Importantes

VariávelDescriçãoExemplo
KESTRA_CONFIGURATIONConfig YAML inline (alternativa ao arquivo)ver exemplo acima
SECRET_NOMESecret injetado como {{ secret('NOME') }} nos flowsSECRET_OPENAI_KEY=sk-...
JAVA_OPTSAjuste de memória JVM-Xmx4g
✅ UI acessível em :8080 · /health retorna OK · Primeiro flow de teste funciona
4
Workflows YAML — Sintaxe e Exemplos
Desde o hello world até pipelines completos

4.1 Estrutura Mínima

id: hello_world                  # identificador único dentro do namespace
namespace: company.team          # organização hierárquica (imutável após criação)
description: |
  Meu primeiro workflow no Kestra

tasks:
  - id: log_mensagem
    type: io.kestra.plugin.core.log.Log
    message: "Hello, Kestra! 🚀"

4.2 Inputs, Triggers, Outputs e Error Handling

id: pipeline_completo
namespace: company.data

# Inputs fortemente tipados (STRING, INTEGER, BOOLEAN, FILE, DATE...)
inputs:
  - id: data_ref
    type: STRING
    defaults: "{{ now | date('yyyy-MM-dd') }}"
  - id: batch_size
    type: INTEGER
    defaults: 1000

# Triggers: agendamento, webhook, evento de arquivo, mensageria
triggers:
  - id: execucao_diaria
    type: io.kestra.plugin.core.trigger.Schedule
    cron: "0 2 * * *"           # toda noite às 2h

tasks:
  - id: buscar_dados
    type: io.kestra.plugin.core.http.Request
    uri: "https://api.exemplo.com/dados?data={{ inputs.data_ref }}"
    method: GET

  - id: transformar
    type: io.kestra.plugin.scripts.python.Script
    script: |
      import json
      dados = json.loads('{{ outputs.buscar_dados.body }}')
      print(json.dumps([{**item, "processado": True} for item in dados]))

  - id: salvar_banco
    type: io.kestra.plugin.jdbc.postgresql.Query
    url: "{{ secret('DATABASE_URL') }}"
    sql: |
      INSERT INTO dados_processados (data, conteudo)
      VALUES ('{{ inputs.data_ref }}', '{{ outputs.transformar.vars.result }}')

# Output do flow
outputs:
  - id: resultado
    type: STRING
    value: "Concluído em {{ now }}"

# Error handling: executa se qualquer task falhar
errors:
  - id: notificar_falha
    type: io.kestra.plugin.slack.IncomingWebhook
    url: "{{ secret('SLACK_WEBHOOK') }}"
    payload: |
      {"text": "❌ Pipeline falhou: {{ exception.message }}"}

4.3 Paralelismo, ForEach e Condicional

id: processamento_paralelo
namespace: company.analytics

tasks:
  # Execução paralela de múltiplas tasks
  - id: paralelo
    type: io.kestra.plugin.core.flow.Parallel
    concurrencyLimit: 3              # máximo 3 simultâneas (0 = ilimitado)
    tasks:
      - id: fonte_a
        type: io.kestra.plugin.scripts.python.Script
        script: "print('processando fonte A')"
      - id: fonte_b
        type: io.kestra.plugin.scripts.python.Script
        script: "print('processando fonte B')"

  # Iteração (ForEach) com lista dinâmica
  - id: para_cada_item
    type: io.kestra.plugin.core.flow.ForEach
    values: "{{ outputs.fonte_a.vars.lista | json }}"
    concurrencyLimit: 5
    tasks:
      - id: processar_item
        type: io.kestra.plugin.core.log.Log
        message: "Processando: {{ item }}"

  # Condicional: só executa se condição for verdadeira
  - id: condicional
    type: io.kestra.plugin.core.flow.If
    condition: "{{ outputs.fonte_a.vars.count > 0 }}"
    then:
      - id: sucesso
        type: io.kestra.plugin.core.log.Log
        message: "Dados encontrados!"
    else:
      - id: sem_dados
        type: io.kestra.plugin.core.log.Log
        message: "Nenhum dado para processar"

4.4 Retry, Timeout e Tolerância a Falhas

tasks:
  - id: api_instavel
    type: io.kestra.plugin.core.http.Request
    uri: "https://api-instavel.exemplo.com/dados"
    timeout: PT30S                    # 30 segundos por tentativa
    retry:
      type: EXPONENTIAL               # CONSTANT ou EXPONENTIAL
      interval: PT5S                  # intervalo inicial
      maxInterval: PT5M              # intervalo máximo
      maxAttempts: 5
      multiplier: 2.0               # dobra a cada tentativa

  # Permite falha sem parar o flow
  - id: step_opcional
    type: io.kestra.plugin.core.flow.AllowFailure
    tasks:
      - id: tarefa_opcional
        type: io.kestra.plugin.core.log.Log
        message: "Esta task pode falhar sem problemas"

4.5 Subflows (Modularidade)

# flow principal: chama subflow reutilizável
id: pipeline_principal
namespace: company.pipelines

tasks:
  - id: notificar
    type: io.kestra.plugin.core.flow.Subflow
    namespace: company.helpers
    flowId: enviar_notificacao
    inputs:
      canal: "#equipe-dados"
      mensagem: "Pipeline concluído! {{ execution.id }}"
    wait: true                       # aguarda subflow finalizar

4.6 Webhook Trigger

id: api_trigger
namespace: company.webhooks

triggers:
  - id: receber_webhook
    type: io.kestra.plugin.core.trigger.Webhook
    key: "{{ secret('WEBHOOK_SECRET') }}"

tasks:
  - id: processar
    type: io.kestra.plugin.core.log.Log
    message: "Webhook recebido: {{ trigger.body | json }}"

URL gerada automaticamente: https://seu-kestra/api/v1/executions/webhook/{namespace}/{flowId}/{key}

💡 Pebble Template Engine: Kestra usa {{ }} para expressões dinâmicas. Acesse outputs ({{ outputs.task_id.value }}), inputs ({{ inputs.nome }}), secrets ({{ secret('KEY') }}), e env ({{ env.VARIABLE }}).
5
Ecosistema de Plugins
600+ integrações — dados, cloud, IA, infraestrutura, comunicação

Cada plugin expõe tasks e triggers que se integram diretamente ao YAML. Disponíveis no Kestra Plugin Marketplace.

🗄️ Bancos de Dados 40+
PostgreSQL · MySQL · Oracle · SQL Server · DuckDB · Snowflake · BigQuery · Redshift · ClickHouse · SQLite
☁️ AWS 30+
S3 · Lambda · EC2 · RDS · DynamoDB · SQS · SNS · EventBridge · Glue · Athena · EMR · ECS · ECR
🌐 Google Cloud 25+
Cloud Storage · BigQuery · Pub/Sub · Compute Engine · Dataflow · Dataproc · Cloud Run · Artifact Registry
🔷 Azure 20+
Blob Storage · Data Lake · Synapse · Event Hubs · Service Bus · Functions · Container Instances · Cosmos DB
🤖 IA & LLMs 15+
OpenAI (GPT-4) · Anthropic (Claude) · Google Gemini · Mistral · Ollama · AWS Bedrock · LangChain4j · DALL-E · Embeddings
📊 Data Stack 20+
dbt · Airbyte · Fivetran · Apache Spark · Kafka · RabbitMQ · Flink · Soda (data quality) · Great Expectations
🐳 Infraestrutura 15+
Kubernetes (Jobs/Pods) · Docker · Terraform · Ansible · Helm · GitHub Actions · GitLab CI
💬 Comunicação 10+
Slack · Email (SMTP) · Webhooks HTTP · PagerDuty · Telegram · Microsoft Teams
🏢 Negócios 10+
Salesforce · Airtable · Jira · HubSpot · Notion · Shopify · Stripe · Zendesk
📜 Scripts Qualquer linguagem
Python · Node.js · R · Go · Shell · PowerShell · Java · Ruby — isolados em container com dependências independentes

Exemplo: Script Python com dependências

- id: analise_python
  type: io.kestra.plugin.scripts.python.Script
  beforeCommands:
    - pip install pandas numpy scikit-learn -q    # instala no container isolado
  script: |
    import pandas as pd
    import numpy as np

    df = pd.read_csv("{{ inputs.arquivo }}")
    resultado = df.groupby('categoria').agg({'valor': 'sum'})
    print(resultado.to_json())
💡 Cada task de script roda em seu próprio container isolado. Sem conflito de dependências entre tasks — instale o que precisar em cada uma.
6
IA Nativa & AI Agents
Kestra 1.0 — Orquestração de LLMs como qualquer outra task

Kestra 1.0 introduz suporte nativo a AI Agents — workflows dinâmicos que raciocinam, usam ferramentas e se adaptam autonomamente. Integração com 8+ providers de LLM diretamente no YAML.

Novidade em Kestra 1.0: AI Agents com memória persistente, tools (web search, code execution, flow caller, MCP client) e suporte a Claude, GPT-4, Gemini, Mistral, Ollama e Bedrock.

6.1 Provedores LLM Suportados

ProviderModelosPlugin
Anthropic ClaudeClaude 3.5 Sonnet/Haiku, Claude 4io.kestra.plugin.ai.anthropic.*
OpenAIGPT-4o, GPT-4, o1, o3io.kestra.plugin.ai.openai.*
Google GeminiGemini 2.0, 2.5 Proio.kestra.plugin.ai.google.*
MistralMistral Large, Pixtralio.kestra.plugin.ai.mistral.*
Ollama (local)Llama 3, DeepSeek, Qwenio.kestra.plugin.ai.ollama.*
AWS BedrockMulti-provider via AWSio.kestra.plugin.aws.bedrock.*

6.2 Chat Completion Simples

id: resumo_com_claude
namespace: company.ai

inputs:
  - id: texto
    type: STRING

tasks:
  - id: chamar_claude
    type: io.kestra.plugin.ai.anthropic.ChatCompletion
    model: claude-3-5-sonnet-20241022
    apiKey: "{{ secret('ANTHROPIC_API_KEY') }}"
    systemMessage: |
      Você é um especialista em resumos concisos.
      Resuma em no máximo 3 bullet points.
    userMessage: |
      Resuma este texto:
      {{ inputs.texto }}
    maxTokens: 500
    temperature: 0.3

outputs:
  - id: resumo
    type: STRING
    value: "{{ outputs.chamar_claude.message }}"

6.3 AI Agent com Ferramentas (Autonomo)

id: agente_pesquisador
namespace: company.ai

inputs:
  - id: topico
    type: STRING

tasks:
  - id: agente
    type: io.kestra.plugin.ai.agent.Agent
    llmProvider: anthropic
    model: claude-3-5-sonnet-20241022
    apiKey: "{{ secret('ANTHROPIC_API_KEY') }}"
    systemMessage: |
      Você é um pesquisador. Busque informações sobre o tópico,
      analise os resultados e produza um relatório estruturado.
    userMessage: "Pesquise sobre: {{ inputs.topico }}"
    tools:
      - type: WebSearch            # busca na web
      - type: CodeExecution        # executa código Python
        language: python
      - type: FlowCaller           # chama outros flows
        namespace: company.helpers
      - type: McpClient            # conecta a MCP servers
        serverUrl: "http://meu-mcp:3000"
    maxIterations: 10          # limite de iterações do agente

6.4 Pipeline Multi-Agente

id: pipeline_multi_agente
namespace: company.ai

tasks:
  # Agente 1: coleta e resume dados
  - id: agente_coletor
    type: io.kestra.plugin.ai.agent.Agent
    llmProvider: anthropic
    model: claude-3-5-haiku-20241022  # modelo mais rápido/barato
    apiKey: "{{ secret('ANTHROPIC_API_KEY') }}"
    systemMessage: "Colete e resuma os dados brutos"
    userMessage: "Processe: {{ inputs.dados_brutos }}"
    tools:
      - type: CodeExecution

  # Agente 2: analisa e decide (modelo mais poderoso)
  - id: agente_analista
    type: io.kestra.plugin.ai.agent.Agent
    llmProvider: anthropic
    model: claude-3-5-sonnet-20241022
    apiKey: "{{ secret('ANTHROPIC_API_KEY') }}"
    systemMessage: "Analise o resumo e tome decisões"
    userMessage: "Análise: {{ outputs.agente_coletor.output }}"

  # Notificar resultado
  - id: notificar
    type: io.kestra.plugin.slack.IncomingWebhook
    url: "{{ secret('SLACK_WEBHOOK') }}"
    payload: |
      {"text": "{{ outputs.agente_analista.output }}"}

6.5 AI Copilot (IDE)

O AI Copilot integrado converte linguagem natural em YAML:

7
Kestra no AIOS
Casos de uso, integração com o framework e quando usar

O Kestra se encaixa no AIOS como a camada de orquestração de workflows de longa duração e pipelines — complementando o Claude Code (desenvolvimento) e n8n (automações simples).

💡 Regra de ouro: Use Claude Code para desenvolvimento e coding. Use Kestra para pipelines de dados, ETL e AI workflows autônomos escaláveis. Use n8n para automações simples de integração.

Casos de Uso AIOS com Kestra

🧠 Pipeline de Análise de Aulas
Automatizar o processamento de transcrições VTT: extrair → analisar com Claude → gerar abstracts → publicar no lesson-pages. Trigger: novo arquivo .vtt detectado.
🤖 MMOS Pipeline Automatizado
Orquestrar as 5 fases do Mind Mapping: coleta de fontes → análise → síntese → implementação → geração de system prompts com múltiplos agentes Claude.
📊 ETL para Supabase
Pipelines de dados agendados: extrair de APIs externas → transformar com Python/dbt → carregar no Supabase PostgreSQL. Retry automático em falhas.
📚 CreatorOS Batch Processing
Geração paralela de cursos: para cada curriculum → chamar Claude API → validar QA → salvar outputs. Processar dezenas de cursos simultaneamente.
🔔 Monitoramento e Alertas
Monitorar serviços (Render, Vercel, Supabase) a cada N minutos → detectar anomalias → alertar via Slack com contexto da falha.
🔄 Sync de Dados Cross-Sistema
Sincronizar dados entre sistemas: atitude-terminal → Supabase → planilhas → relatórios. Event-driven ou agendado.

Integração com Ferramentas AIOS

Ferramenta AIOSComo Kestra IntegraExemplo
Claude Code / APIPlugin Anthropic nativoChamar Claude em qualquer task YAML
SupabasePlugin PostgreSQL (Supabase é Postgres)Queries, inserts, migrations agendadas
GitHubPlugin GitHub + Webhook triggerDeploy automático ao push
SlackPlugin Slack nativoAlertas, notificações de execução
n8nHTTP Request (chamar webhook n8n)Kestra orquestra, n8n executa integrações simples
Docker / KubernetesPlugins nativosDeploy de containers como task

Exemplo: Pipeline Lesson Analysis no Kestra

id: lesson_analysis_pipeline
namespace: aios.lesson_squad

inputs:
  - id: vtt_file_path
    type: STRING
  - id: tipo_sessao
    type: STRING       # AULA ou PS

tasks:
  # 5 agentes em paralelo
  - id: agentes_paralelos
    type: io.kestra.plugin.core.flow.Parallel
    tasks:
      - id: radar
        type: io.kestra.plugin.ai.anthropic.ChatCompletion
        model: claude-3-5-haiku-20241022
        apiKey: "{{ secret('ANTHROPIC_API_KEY') }}"
        systemMessage: "Você é o agente Radar. Analise sentimentos e emoções."
        userMessage: "{{ read(inputs.vtt_file_path) }}"
      - id: coletor
        type: io.kestra.plugin.ai.anthropic.ChatCompletion
        model: claude-3-5-haiku-20241022
        apiKey: "{{ secret('ANTHROPIC_API_KEY') }}"
        systemMessage: "Você é o agente Coletor. Extraia links e recursos."
        userMessage: "{{ read(inputs.vtt_file_path) }}"
      - id: didatico
        type: io.kestra.plugin.ai.anthropic.ChatCompletion
        model: claude-3-5-sonnet-20241022
        apiKey: "{{ secret('ANTHROPIC_API_KEY') }}"
        systemMessage: "Você é o agente Didático. Analise a qualidade pedagógica."
        userMessage: "{{ read(inputs.vtt_file_path) }}"
      - id: gps
        type: io.kestra.plugin.ai.anthropic.ChatCompletion
        model: claude-3-5-sonnet-20241022
        apiKey: "{{ secret('ANTHROPIC_API_KEY') }}"
        systemMessage: "Você é o agente GPS. Avalie os 10 aspectos GPS e 7 pilares ML."
        userMessage: "{{ read(inputs.vtt_file_path) }}"

  # Compilar resultados e gerar páginas HTML
  - id: gerar_html
    type: io.kestra.plugin.scripts.python.Script
    script: |
      # compilar outputs dos agentes e gerar HTML
      radar = """{{ outputs.radar.message }}"""
      gps   = """{{ outputs.gps.message }}"""
      # ... gera lesson-pages HTML ...

  # Deploy no GitHub Pages / Vercel
  - id: publicar
    type: io.kestra.plugin.scripts.shell.Commands
    commands:
      - git add . && git commit -m "feat: análise {{ now }}" && git push
8
Comparativo com Alternativas
Kestra vs n8n · Airflow · Temporal · Prefect

Comparativo Rápido

AspectoKestran8nAirflowTemporalPrefect
SintaxeYAML declarativoVisual + JSPython DAGSDK code-firstPython decorators
AI Nativo✅ v1.0+⚠️ Limitado⚠️ Parcial
Curva aprendizadoBaixa (YAML)Baixa (visual)Alta (Python+DAG)Muito altaMédia
EscalabilidadeEnterpriseSmall-mediumAlta (infra complexa)Muito altaMédia
Self-hosting✅ Completo✅ Completo✅ Complexo⚠️ Cloud-first
GitHub Stars26k173k40k+12k18k
LicençaApache 2.0Sustainable BSLApache 2.0MITApache 2.0

Kestra vs n8n (foco AIOS)

🟣 Kestra — Use para
Pipelines de dados complexos (ETL)
AI Agents e orquestração de LLMs
Workflows com lógica condicional e loops
Escala com milhares de execuções/dia
Scripts Python/Go/Shell em tasks isoladas
Versionamento Git de workflows
Comunidade menor que n8n (6x menos stars)
Sem interface visual no-code drag-and-drop
🟡 n8n — Use para
Automações rápidas de integração (API → API)
Prototipagem visual sem código
Usuários não-técnicos criando fluxos
400+ integrações prontas com UI
Comunidade massiva (173k stars)
AI Agents limitado (sem orquestração nativa)
Escalabilidade limitada para big data
Lógica complexa fica difícil de manter

Kestra vs Airflow

Kestra vence em
Sintaxe YAML simples (vs Python DAG)
Deploy mais simples (Docker vs Celery+Flower)
UI moderna e integrada
AI Agents nativos
Performance Java vs Python overhead
Airflow vence em
Comunidade dominante (40k+ stars)
Ecossistema maduro (10+ anos)
Providers cloud bem testados
Managed service (MWAA, Cloud Composer)

Recomendação para AIOS

CenárioFerramenta
AI Agents e LLM pipelinesKestra 1.0 — AI nativo, YAML simples, multi-model
ETL e pipelines de dadosKestra — melhor suporte a dados, performance Java
Automações simples de integraçãon8n — visual, rápido, comunidade grande
Microservices durables (long-running)Temporal — reliability garantida, SDK maduro
Data pipelines Python da equipe de dadosAirflow — se já existe, manter; se novo, Kestra
9
Preços & Licença
Open-source gratuito · Enterprise custom · Cloud managed
🟢
Open-Source
Apache 2.0 — self-hosted
Grátis
Pague apenas pela infra (cloud/VPS)
  • Workflows ilimitados
  • 600+ plugins
  • AI Agents (v1.0+)
  • Docker + Kubernetes
  • Community support
  • Sem RBAC/SSO
  • Sem multi-tenancy
  • Sem suporte SLA
🟣
Enterprise
Self-hosted + suporte dedicado
Custom
Contato necessário (por instância)
  • Tudo do Open-Source
  • RBAC + SSO + SCIM
  • Multi-tenancy
  • High availability (HA)
  • Audit logs + secrets
  • Suporte dedicado + SLA
  • Kafka queue (alta escala)
  • Priority bug fixes
☁️
Kestra Cloud
Managed SaaS
Custom
Hosted pela equipe Kestra
  • Tudo do Enterprise
  • Sem gerenciar infra
  • Escala automática
  • SLAs garantidos
  • Backup automático
  • Mais caro que self-hosted

Custo Estimado de Infraestrutura (Self-hosted)

AmbienteSetupCusto/mês estimado
Dev / TesteDocker Compose localGrátis (máquina local)
Pequeno (Railway/Render)1 container + PostgreSQL managed~$10-25/mês
Médio (VPS)4 vCPU + 8GB RAM + PostgreSQL~$50-100/mês
Produção (K8s)3+ workers + HA PostgreSQL + S3~$200-500/mês
Enterprise ScaleKafka + Elasticsearch + K8s cluster~$1k+/mês
💡 Para AIOS começando: Docker Compose local é o suficiente para desenvolvimento e pipelines internos. Para produção com alunos, Railway ou um VPS com 4GB RAM funciona bem por ~$20/mês.
10
Referência Rápida
Comandos, links e estrutura de um flow

Comandos Docker

Iniciar / Parar
docker compose up -dSubir em background
docker compose downParar
docker compose logs -f kestraVer logs
docker compose restart kestraReiniciar
Verificação
curl localhost:8080/healthHealth check
curl localhost:8081/prometheusMétricas
open http://localhost:8080Abrir UI
API REST
GET /api/v1/flowsListar flows
POST /api/v1/executionsCriar execução
GET /api/v1/executions/{id}Ver execução

Estrutura de um Flow (anatomia completa)

id: meu_flow              # obrigatório — único no namespace
namespace: empresa.equipe  # obrigatório — hierárquico com pontos
description: |            # markdown suportado
  Descrição do flow

labels:                   # tags para organização
  env: production
  team: data

inputs:                   # parâmetros de entrada tipados
  - id: nome
    type: STRING
    defaults: "valor_padrao"
    required: false

variables:                # variáveis estáticas do flow
  api_url: "https://api.exemplo.com"

triggers:                 # como o flow é ativado
  - id: agendamento
    type: io.kestra.plugin.core.trigger.Schedule
    cron: "0 * * * *"

tasks:                    # lista de tasks (executam sequencialmente por padrão)
  - id: task_1
    type: io.kestra.plugin.core.log.Log
    message: "Iniciando"

outputs:                  # outputs exportados pelo flow
  - id: resultado
    type: STRING
    value: "{{ outputs.task_1.value }}"

errors:                   # tasks executadas em caso de falha
  - id: alerta_falha
    type: io.kestra.plugin.core.log.Log
    message: "Falhou: {{ exception.message }}"

concurrency:             # controle de execuções simultâneas
  limit: 1              # apenas 1 execução por vez
  behavior: CANCEL      # CANCEL ou QUEUE a nova

Links Úteis

RecursoURL
Documentação Oficialkestra.io/docs
Plugin Marketplacekestra.io/plugins
GitHub Repositóriogithub.com/kestra-io/kestra
Exemplos de Flowsgithub.com/kestra-io/examples
AI Agents Docskestra.io/docs/ai-tools/ai-agents
Kestra vs Airflowkestra.io/vs/airflow
Pricingkestra.io/pricing
Tutorial Fundamentoskestra.io/docs/tutorial
✅ Kestra rodando em :8080 · Primeiro flow publicado · AI Agent configurado com ANTHROPIC_API_KEY