Getting Started
Install Wardn and deploy your first application
Getting Started
This guide walks you through installing Wardn, creating your first App, and watching it sync.
Prerequisites
- Docker with Docker Compose
kubectlinstalled (for the Kubernetes path)- Git repository with your application manifests (for Git-source apps)
Installation
Local Kubernetes (k3s)
docker-compose.k8s.yml layers a real test environment onto the core stack: a k3s cluster, a Gitea git server, an OpenBao dev server, and a plain-HTTP registry:
# Start k3s plus the core stack
docker compose -f docker-compose.yml -f docker-compose.k8s.yml up -d
# Export the k3s kubeconfig for kubectl / local runs
docker compose -f docker-compose.k8s.yml exec k3s \
cat /etc/rancher/k3s/k3s.yaml > k3s.yaml
kubectl --kubeconfig k3s.yaml get nodesThe server connects to k3s at https://host.docker.internal:6443 via WARDN_MGMT_KUBECONFIG wiring in the k8s compose file. To run the operator on your host instead:
KUBECONFIG=k3s.yaml go run ./operator/cmd/operatorThe App CRD manifest must exist in the cluster — generate/install it with controller-gen from operator/api/v1alpha1 (a checked-in config/crd bundle doesn't exist yet).
Your First Deployment
Step 1: Verify Installation
docker compose psExpected output:
NAME STATUS
wardn-postgres-1 Up (healthy)
wardn-redis-1 Up (healthy)
wardn-server-1 Up (healthy)
wardn-operator-1 Up # requires a kubeconfig; exits without one
wardn-platform-1 Up
wardn-docs-1 Up
wardn-website-1 UpStep 2: Access the Dashboard
Open http://localhost:3002 and create an account. Auth runs on Better Auth inside the platform app — the Go API validates the session cookie, it doesn't issue logins.
Step 3: Create an App
You can create an App via the platform UI or directly as a CR:
Step 4: Watch the Sync
kubectl --kubeconfig k3s.yaml get app my-app -n org-my-org -wThe app transitions through sync states:
NAME SYNC STATUS HEALTH
my-app OutOfSync Unknown
my-app Synced HealthyStep 5: Verify Resources
kubectl --kubeconfig k3s.yaml get all -n defaultUnderstanding What Happened
- The Operator detected the new
AppCR - It cloned the Git repository and rendered manifests from the path
- Manifests were applied to the destination cluster using server-side apply
- Health checks ran against the deployed resources
- Status was written back to the
AppCR (syncStatus,healthStatus,revision) - The Server reads the CR status and shows it in the dashboard
Next Steps
- Configuration — the full
AppCRD spec (Git, Image, HelmChart sources) - Sync Policies — automated sync, prune, freeze, approval gate
- Health Checks — how Wardn determines resource health
- Creating Your First App (Guide) — a deeper tutorial with a sample repo
- Secret Management — Vault/OpenBao, SOPS age, and ESO integration