A Kubernetes-native workflow engine built with the Operator pattern, similar to Apache Airflow. Define DAGs (Directed Acyclic Graphs) as code and let Kubernetes orchestrate your workflows.
- π Define DAGs in Code: Write workflows in Go or Python
- π Automatic Compilation: Convert code to Kubernetes manifests (YAML)
- π― Dependency Management: Define task dependencies with ease
- π Native Kubernetes: Runs as a Kubernetes controller
- π§ Multiple Task Types: Support for Bash, Python, and Go tasks
- Go (version v1.24.6+)
- Docker (version 17.03+)
- kubectl (version v1.11.3+)
- kind (for local testing)
kind create cluster --name nautikusmake docker-build IMG=nautikus:v1
kind load docker-image nautikus:v1 --name nautikusmake install
make deploy IMG=nautikus:v1kubectl get pods -n nautikus-systemOption A: Use pre-defined YAML
kubectl apply -f config/samples/workflow_v1_dag_test.yamlOption B: Define DAG in code and compile
# Using go run
go run cmd/dag-cli/main.go compile
# Or build the CLI first
make build-cli
./bin/dag-cli compile
# Or use make target
make compile-dags
# Apply the generated YAML
kubectl apply -f dist/go_dag.yaml# View all available commands
./bin/dag-cli --help
# View compile command options
./bin/dag-cli compile --help
# Compile with custom config and output directory
./bin/dag-cli compile --config my-config.yaml --out output/
# Short flags
./bin/dag-cli compile -c my-config.yaml -o output/
# Check version
./bin/dag-cli version# Check DAG status
kubectl get dags
# View detailed status
kubectl describe dag go-generated-dag
# Check task pods
kubectl get pods
# View controller logs
kubectl logs -n nautikus-system -l control-plane=controller-manager -fkubectl delete dags --all
make undeploy
make uninstall
kind delete cluster --name nautikuspackage main
import sdk "github.com/kination/nautikus/pkg/sdk/go"
func task1() { println("Hello from Task 1") }
func task2() { println("Hello from Task 2") }
func main() {
sdk.NewDAG("my-workflow").
AddSequential(
sdk.Task{Name: "task-1", Fn: task1},
sdk.Task{Name: "task-2", Fn: task2},
).
Serve()
}Then compile and apply:
# Using the CLI binary
make build-cli
./bin/dag-cli compile
# Or using go run
go run cmd/dag-cli/main.go compile
# Or using make target
make compile-dags
# Apply the generated manifest
kubectl apply -f dist/my_workflow.yamlmake docker-build docker-push IMG=<your-registry>/nautikus:tagmake installmake deploy IMG=<your-registry>/nautikus:tagkubectl apply -k config/samples/kubectl delete -k config/samples/make uninstallmake undeploymake testmake test-e2emake runmake manifests # Generate CRDs
make generate # Generate DeepCopy methodsnautikus/
βββ api/v1/ # CRD definitions
βββ cmd/
β βββ manager/ # Controller entrypoint
β βββ dag-cli/ # DAG compiler CLI
βββ internal/
β βββ controller/ # Orchestration logic (DagReconciler)
β βββ scheduler/ # Task dependency & scheduling logic
β βββ runner/ # Task execution & status monitoring
β βββ executor/ # Execution engines (Pod, etc.)
β βββ compiler/ # Code-to-YAML compiler
βββ pkg/
β βββ sdk/ # Go/Python SDK for users
βββ config/ # Kubernetes manifests
β βββ crd/ # CRD definitions
β βββ rbac/ # RBAC rules
β βββ samples/ # Example DAGs
βββ test/dags/ # Example DAG definitions
βββ dist/ # Compiled YAML output (gitignored)
Copyright 2025.
Licensed under the Apache License, Version 2.0.