The Application resource
Source, destination, and sync.
The core object is the Application, a Kubernetes custom resource that ties a source to a destination. The source is where the desired manifests live — a Git repo, a path within it, and a target revision (a branch, tag, or commit). The destination is where they should run — a cluster and a namespace. Argo CD watches the source and keeps the destination in sync with it. You can create Applications in the UI, via the CLI, or (best) declaratively as YAML that itself lives in Git.
apiVersion: argoproj.io/v1alpha1kind: Applicationmetadata:name: payments-apinamespace: argocdspec:project: defaultsource:repoURL: https://git.acme.internal/apps/payments.gitpath: k8s/overlays/prodtargetRevision: v1.4.0 # branch, tag, or commitdestination:server: https://kubernetes.default.svcnamespace: paymentssyncPolicy:syncOptions: [CreateNamespace=true]
Declarative apps and target revision
Managing Applications declaratively (their YAML in Git) is the GitOps-native way — the definition of what is deployed is itself version-controlled and reviewed, not clicked into a UI. targetRevision is a key control: pointing at a tag or a specific commit gives you reproducible, promotable deploys (the same discipline as pinning image digests), while pointing at a mutable branch means the app tracks whatever lands there. Pin for production; track a branch only where you want continuous updates.