Skip to main content
Argo CD provides flexible synchronization strategies to control when and how applications are deployed to your clusters.

Manual Sync

By default, applications require manual synchronization. When changes are detected in Git, you must explicitly trigger a sync operation.

Automated Sync Policy

Argo CD can automatically sync applications when it detects differences between the desired manifests in Git and the live state in the cluster.

Enabling Auto-Sync

Auto-Sync with Enabled Flag

You can explicitly control automated sync using the enabled field:
Setting spec.syncPolicy.automated.enabled to null is treated as enabled. When set to false, the controller will skip automated sync even if prune, selfHeal, and allowEmpty are configured.

Automatic Pruning

By default, automated sync will not delete resources when they are removed from Git. Enable automatic pruning to delete resources:
Automatic pruning will delete resources from your cluster when they’re removed from Git. Use with caution.

Allow Empty Resources

Prevents errors when there are no target resources:

Automatic Self-Healing

When enabled, Argo CD will automatically revert manual changes made to the live cluster:
By default, changes made to the live cluster will not trigger automated sync. Self-heal ensures your cluster state always matches Git.
Disabling self-heal does not guarantee that live cluster changes will persist in multi-source applications. Changes in one source can trigger autosync even if another remains unchanged.

Sync Options

Fine-tune sync behavior with sync options:

Managed Namespace Metadata

When using CreateNamespace=true, you can set metadata on the namespace:

Sync Waves

Sync waves allow you to control the order in which resources are applied using the argocd.argoproj.io/sync-wave annotation.

How Waves Work

1

Resources are ordered

All resources are ordered by their wave number (lowest to highest)
2

Sequential application

Resources in each wave are applied sequentially
3

Health check

Argo CD waits for all resources in a wave to be healthy before proceeding

Wave Examples

Wave -1: Database Migration
Wave 0: ConfigMaps and Secrets (default)
Wave 1: Deployments
Wave 2: Services
Waves are assigned to wave 0 by default. Waves can be negative, allowing you to create resources that run before everything else.

Sync Phases (Hooks)

Hooks allow you to run resources at specific points in the sync lifecycle:

Hook Example

Hook Deletion Policies

Combining Waves and Hooks

You can combine sync waves with hooks for fine-grained control:
Argo CD orders resources by:
  1. Phase (PreSync, Sync, PostSync)
  2. Wave (lowest to highest)
  3. Kind (namespaces first, then other resources)
  4. Name (alphabetically)

Retry Policy

Configure automatic retry on sync failure:

Refresh on Retry

Automatically refresh application on new revisions during retries:

Automated Sync Semantics

  • Only when the application is OutOfSync
  • Applications in Synced or error states will not auto-sync
  • One sync per unique combination of commit SHA and parameters
  • Will not retry if a previous sync failed for the same commit
  • When selfHeal: true, sync will retry after self-heal timeout (default: 5 seconds)
  • Timeout is controlled by --self-heal-timeout-seconds flag
  • Determined by timeout.reconciliation in argocd-cm ConfigMap
  • Default: 120 seconds with 60 seconds jitter (max 3 minutes)
  • Rollback cannot be performed on applications with automated sync enabled

ApplicationSet Auto-Sync Toggle

For ApplicationSet-managed applications, toggling auto-sync requires special handling. See the ApplicationSet documentation for details on controlling resource modification.