ArgoCD › Sync & Health

How do you handle CRDs and their custom resources syncing in the right order?

Advanced

Answer

CRDs must exist before their custom resources apply. Use sync waves to install CRDs first (lower wave), or the SkipDryRunOnMissingResource sync option so ArgoCD doesn't fail validation when the CRD isn't yet present. For operators, install the operator/CRDs in an earlier wave or a separate app before workloads that use them.
metadata:
  annotations:
    argocd.argoproj.io/sync-options: SkipDryRunOnMissingResource=true
    argocd.argoproj.io/sync-wave: "-1"   # CRDs first
Real-world example CRDs are placed in wave -1 so custom resources in wave 0 don't fail with 'no matches for kind' during sync.

Common follow-ups: Why can a CR fail to apply before its CRD? | What does SkipDryRunOnMissingResource do?