Reference
Roadmap
What's shipped, partial, and planned for Wardn
Roadmap
What's actually in the tree today — not aspirations. Statuses match the 📋/🚧/✅ convention used throughout the docs.
✅ Shipped
Operator
AppCRD (cd.wardn.space/v1alpha1) — source union, destination, syncPolicy, operation contract- Git source — shallow clone + render Raw/Kustomize/Auto
- Image source — registry-driven deploys with tag policies (
Pin/Follow), registryRef, pullSecretRef - Server-side apply (
wardn-operatorfield manager, forced) + label-driven prune - Health checks — Deployment/StatefulSet/DaemonSet/Job/Pod + aggregate
- Multi-cluster —
destination.clusterresolves kubeconfigs from the server at reconcile - Operations —
spec.operationcontract (Sync/Deploy/Rollback/Restart/Approve) +operationState - Approval gates —
requiresApprovalstages changes asHeld;POST /approvereleases - Freeze —
spec.freezeskips all applies - GitHub webhook receiver — patches
Syncops on matching apps - Slack notifications on sync success/failure
Server
- REST API — apps, teams, clusters, audit, secret-stores, registries, webhooks, incidents, remediations
- Better Auth session validation +
wrd_API keys with role/scope ceilings - Org + scoped role bindings (
role_bindings— org/cluster/deployment × admin/sync/read) POST /auth/can-ipermission checks; MCP JSON-RPC endpoint with per-key tool scoping- Audit log; tag poller (
WARDN_TAG_POLL_INTERVAL); incident webhooks (HMAC-signed outbound) - Sealed credentials — kubeconfigs and store secrets →
enc:v1:AES-256-GCM - Cluster shell pods —
POST /clusters/{name}/shellwith view/admin SA pick POST /apps/preview(image-source digest resolution)
Frontend
- Platform app — apps dashboard, app detail (status/resources/ops), cluster + store + registry + webhook + team management
- Org/team flows via Better Auth; API token management
- Agents → Remediations approval queue
- Cluster terminal (shell pods)
🚧 Partial
| Feature | State |
|---|---|
| GitHub webhooks | Push works; X-Hub-Signature-256 not verified, no rate limit |
| GitLab webhooks | Endpoint accepts 200, parses nothing |
| Health checks | 5 kinds have logic; ExternalSecret/Ingress/CRDs default to Healthy |
| CLI | clusters/status/can-i/mcp/whoami/version — no app/cluster/deployment write commands |
| Secrets | env.store works on image sources; SOPS store exists without decrypt-at-apply; vault fetch is image-env only |
| Notifications | Slack only; onHealthDegraded unwired |
| ESO health | ExternalSecret objects get default Healthy, no condition parsing |
📋 Planned
Sources & rendering
HelmChartsource type +manifestType: HelmrendererCatalogsource (template catalog)- Private-repo credentials (
credentialRef) - Diff engine — live vs rendered,
ignoreDifferencesJSON pointers selfHeal— live-vs-desired drift loop- Sync waves + hooks (
wardn.io/sync-wave,PreSync/PostSync/SyncFail)
Platform
- Webhook signature validation + rate limiting
- GitLab push parsing
- Additional notification channels (Teams, Email, Discord, generic webhook) + templates +
onHealthDegraded - SOPS decrypt-at-apply; KMS/GCP/PGP/vault-transit providers
- Kind-aware health — ExternalSecret
Readyconditions, CRDs, custom checks - Custom
wardn_*Prometheus metrics - ArgoCD →
Appmigration tooling; ApplicationSets - OIDC group → org-role mapping
CLI & UI
wardn appcreate/sync/delete commands;wardn cluster add- Pod log streaming; diff viewer
- Mobile-responsive layout
Versioning
Semantic Versioning — 0.x: CRD/API schemas may change between minors. Pin versions in production; read release notes before upgrading.
Contributing
- GitHub Issues — bugs + requests
- GitHub Discussions — design talks
Related
- Comparison — Wardn vs ArgoCD vs Flux
- Architecture — how it fits together