Choosing between App-of-Apps and ApplicationSet for Argo CD GitOps

GitOps with Argo CD scales along two common patterns: the App-of-Apps (a root Application that manages child Application objects) and the ApplicationSet controller (a declarative template plus generators that produce many Applications automatically). Both solve the problem of “many applications, one control plane,” but they suit different teams and operational needs. This short guide compares the two patterns, shows concise examples, and points out practical trade-offs to help you pick the simplest fit.

Two patterns, one goal

When each pattern makes sense

Minimal examples

App-of-Apps (root Application that points at a repo folder containing child Application YAMLs)

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: root-app
spec:
  project: default
  source:
    repoURL: https://git.example/repo.git
    path: argocd/root
    targetRevision: HEAD
  destination:
    server: https://kubernetes.default.svc
    namespace: argocd
  syncPolicy:
    automated: {}

The root’s repo path (argocd/root) contains child Application manifests (one file per child) that Argo CD will apply and manage. This pattern gives you explicit control over each child Application. (argo-cd.readthedocs.io)

ApplicationSet (generate one Application per Git folder)

apiVersion: argoproj.io/v1alpha1
kind: ApplicationSet
metadata:
  name: apps-from-git
spec:
  generators:
  - git:
      repoURL: https://git.example/repo.git
      directories:
      - path: apps/*    # generate an Application for each folder under apps/
  template:
    metadata:
      name: '-app'
    spec:
      project: default
      source:
        repoURL: https://git.example/repo.git
        path: ''
        targetRevision: HEAD
      destination:
        server: https://kubernetes.default.svc
        namespace: ''

This single ApplicationSet creates many Argo CD Applications based on repo structure; it’s ideal for reproducible onboarding and multi-cluster templating. (argo-cd.readthedocs.io)

Practical trade-offs and gotchas

Short checklist for picking the simpler path

Conclusion

Both patterns are part of the Argo CD toolkit and each makes GitOps simpler in different operational contexts. App-of-Apps gives explicit, easy-to-reason-about control for smaller fleets and ordered deployments; ApplicationSet offers templated scale and automation for large, repetitive or multi-cluster environments. The simplest solution is the one that matches your team’s scale and operational model: explicit manifests when you need control, templates when you need to avoid repetition. (argo-cd.readthedocs.io)