Argo CD provides three methods for creating applications: through the web UI, using the CLI, or declaratively with Kubernetes manifests. Each method offers different advantages depending on your workflow.
Creating Applications via UI
The web UI provides an intuitive interface for creating applications with guided forms.
Steps
Log in to the Argo CD UI
Click the + New App button
Fill in the application details:
Application Name : A unique name for your application
Project : The Argo CD project (default: default)
Sync Policy : Choose Manual or Automatic
Configure the source repository:
Repository URL : Your Git repository URL
Revision : Branch, tag, or commit (e.g., HEAD, main, or a specific tag)
Path : Path within the repository containing manifests
Set the destination:
Cluster URL : https://kubernetes.default.svc for in-cluster
Namespace : Target namespace for deployment
Click Create
The UI automatically validates your inputs and provides helpful error messages if required fields are missing.
Creating Applications via CLI
The Argo CD CLI is ideal for automation, scripting, and quick application creation from the terminal.
Basic Application Creation
argocd app create guestbook \
--repo https://github.com/argoproj/argocd-example-apps.git \
--path guestbook \
--dest-server https://kubernetes.default.svc \
--dest-namespace default
With Auto-Sync Enabled
argocd app create my-app \
--repo https://github.com/example/repo.git \
--path apps/production \
--dest-server https://kubernetes.default.svc \
--dest-namespace production \
--sync-policy automated \
--auto-prune \
--self-heal
Helm Application
argocd app create my-helm-app \
--repo https://charts.example.com \
--helm-chart my-chart \
--revision 1.2.3 \
--dest-server https://kubernetes.default.svc \
--dest-namespace default \
--helm-set replicaCount= 3 \
--helm-set-string image.tag=v1.0.0
Common CLI Options
Git repository URL or Helm chart repository
Path within the repository (for Git sources)
Kubernetes API server URL
Target namespace for resources
Set to automated for automatic sync
Argo CD project name (default: default)
Creating Applications Declaratively
Declarative application manifests provide version control, consistency, and enable GitOps workflows for managing applications themselves.
Basic Application Manifest
apiVersion : argoproj.io/v1alpha1
kind : Application
metadata :
name : guestbook
namespace : argocd
spec :
project : default
source :
repoURL : https://github.com/argoproj/argocd-example-apps.git
targetRevision : HEAD
path : guestbook
destination :
server : https://kubernetes.default.svc
namespace : default
Application with Auto-Sync
apiVersion : argoproj.io/v1alpha1
kind : Application
metadata :
name : production-app
namespace : argocd
spec :
project : default
source :
repoURL : https://github.com/example/app.git
targetRevision : HEAD
path : manifests
destination :
server : https://kubernetes.default.svc
namespace : production
syncPolicy :
automated :
enabled : true
prune : true
selfHeal : true
syncOptions :
- CreateNamespace=true
retry :
limit : 5
backoff :
duration : 5s
factor : 2
maxDuration : 3m
Helm Application Manifest
apiVersion : argoproj.io/v1alpha1
kind : Application
metadata :
name : my-helm-app
namespace : argocd
spec :
project : default
source :
repoURL : https://charts.example.com
chart : my-chart
targetRevision : 1.2.3
helm :
releaseName : my-release
parameters :
- name : replicaCount
value : "3"
- name : image.tag
value : v1.0.0
forceString : true
valueFiles :
- values-prod.yaml
destination :
server : https://kubernetes.default.svc
namespace : default
Kustomize Application
apiVersion : argoproj.io/v1alpha1
kind : Application
metadata :
name : kustomize-app
namespace : argocd
spec :
project : default
source :
repoURL : https://github.com/example/kustomize-app.git
targetRevision : HEAD
path : overlays/production
kustomize :
namePrefix : prod-
commonLabels :
env : production
images :
- my-app=gcr.io/my-repo/my-app:v1.2.3
destination :
server : https://kubernetes.default.svc
namespace : production
Application with Finalizers
apiVersion : argoproj.io/v1alpha1
kind : Application
metadata :
name : my-app
namespace : argocd
# Add finalizer for cascade deletion
finalizers :
- resources-finalizer.argocd.argoproj.io
spec :
project : default
source :
repoURL : https://github.com/example/app.git
targetRevision : HEAD
path : manifests
destination :
server : https://kubernetes.default.svc
namespace : default
The resources-finalizer.argocd.argoproj.io finalizer enables cascade deletion. When you delete the Application, all deployed resources will also be deleted. Use resources-finalizer.argocd.argoproj.io/background for background deletion.
Multi-Source Applications
Argo CD supports applications with multiple sources, useful for combining Helm charts with external values files or mixing different repositories.
apiVersion : argoproj.io/v1alpha1
kind : Application
metadata :
name : multi-source-app
namespace : argocd
spec :
project : default
sources :
- repoURL : https://github.com/example/helm-charts.git
targetRevision : HEAD
path : charts/my-app
ref : my-repo
- repoURL : https://github.com/example/app-values.git
targetRevision : HEAD
path : values/production
destination :
server : https://kubernetes.default.svc
namespace : production
Application Info
You can add extra information to display in the Argo CD Application details tab:
apiVersion : argoproj.io/v1alpha1
kind : Application
metadata :
name : my-app
namespace : argocd
spec :
project : default
info :
- name : 'Documentation'
value : 'https://docs.example.com'
- name : 'Slack Channel'
value : '#team-platform'
source :
repoURL : https://github.com/example/app.git
targetRevision : HEAD
path : manifests
destination :
server : https://kubernetes.default.svc
namespace : default
Applying Declarative Manifests
Once you’ve created your Application manifest, apply it to the cluster:
kubectl apply -f application.yaml
Or using the Argo CD CLI:
argocd app create -f application.yaml
Declarative application manifests should be stored in Git to follow GitOps principles. This enables the “App of Apps” pattern where Argo CD manages its own application definitions.
Verifying Application Creation
Using CLI
# List all applications
argocd app list
# Get detailed application status
argocd app get my-app
# Watch application sync status
argocd app sync my-app --watch
Using kubectl
# List applications
kubectl get applications -n argocd
# Describe application
kubectl describe application my-app -n argocd
Best Practices
Use Projects Organize applications into projects for better access control and resource isolation.
Version Control Store declarative manifests in Git to track changes and enable rollbacks.
Naming Conventions Use consistent naming patterns: <team>-<app>-<env> helps with organization.
Start Manual Begin with manual sync policy, then enable auto-sync once you’re confident.
Next Steps
Sync Options Configure how applications sync to the cluster
Sync Waves Control deployment order with sync waves
Resource Hooks Run jobs before, during, or after sync
Tracking Strategies Learn about Git tracking methods