Skip to main content

ArgoCD 3.3 vs Flux 2.0 in 2026: Which GitOps Reconciler Fits a Cluster-API-Managed Fleet's Own Deploy Pipeline

11 min readDora NodaDora Noda
Share
On this page

Argo CD has 2.8x the GitHub stars of Flux — roughly 23,100 on v3.4.3 (May 28, 2026) against flux2's ~8,180 on v2.8.8 (May 20, 2026) — and a CNCF end-user survey found it running in nearly 60% of Kubernetes clusters for application delivery. By every popularity metric, the ArgoCD-vs-Flux debate is settled. And yet if you're building a self-hosted PaaS on a Cluster-API-managed fleet, the popularity metric is answering the wrong question.

The right question isn't "which GitOps tool is better?" It's "which reconciler shape matches a control plane that already reconciles clusters?" A platform whose "deploy" means reconciling desired state onto a Cluster-API fleet doesn't bolt GitOps on as a separate product with its own login page — it embeds a reconciler as an internal organ. Those are different jobs, and the two projects are built for different ones.

Here's the head-to-head, and the short verdict up front:

AxisArgo CD (3.3 → 3.4, mid-2026)Flux (2.8, mid-2026)
Latest stablev3.4.3 (May 28, 2026)v2.8.8 (May 20, 2026)
GitHub stars~23,100 (argoproj/argo-cd)~8,180 (fluxcd/flux2)
ArchitectureIntegrated platform: API server, repo server, application controller, Redis, web UIModular controller toolkit; state lives in Kubernetes CRs, no bundled UI in core
Tenancy modelAppProject + Argo CD's own RBAC layerKubernetes-native RBAC via service-account impersonation
Fleet rollout primitiveApplicationSet cluster generator + Progressive SyncKustomization dependsOn + Flux Operator ResourceSets
FootprintHeavier control plane; sharding rule of thumb ~1 controller shard per 15–20 clusters, plus Redis cache~200–400 MB of controllers, pull-only, no inbound networking
Security postureInternal gRPC between components; internal mTLS arrived in 3.5 (June 2026)Controllers coordinate through the Kubernetes API — no internal traffic to secure
Built-in UI / auditFirst-class web UI, SSO, centralized audit loggingOptional Flux Operator Web UI (added in the 2.8 era) with OIDC + Kubernetes RBAC

The verdict: if the reconciler is an internal component of your platform — invoked by your control plane, not by humans — Flux's controller-toolkit shape composes with Cluster API the way a library composes with your code. If human operators are the primary consumers of the deploy pipeline — clicking through app trees, diffing live state, approving syncs — Argo CD's integrated platform earns its heavier footprint. The rest of this post is the evidence.

Where Each Project Actually Is in Mid-2026

Both projects shipped meaningful releases in the first half of 2026, and they moved in revealingly different directions.

Argo CD 3.3 (GA in early 2026, refined through 3.4) focused on operational hardening for large installations:

  • PreDelete hooks close a long-standing deletion-safety gap: you can now define Jobs that must run and succeed before Argo CD proceeds with deleting an application's resources, and a failing hook blocks the deletion. Deletes finally get the same lifecycle discipline syncs always had.
  • Background OIDC token refresh with a refreshTokenThreshold option ends the mid-session logout — an auth-UX fix that only matters if humans live in the UI, which tells you who Argo CD is built for.
  • Repo-server performance: hydration now avoids unnecessary repo-server calls, producing noticeable sync-speed improvements on large monorepos.
  • ApplicationSet Progressive Sync brings staged, batch-by-batch rollouts across a fleet of Applications, pausing remaining stages when an early batch fails.

Flux 2.8 (GA February 24, 2026) pushed on reconciliation depth and platform-builder ergonomics:

  • CEL-based health checks let you write custom readiness expressions for any Helm-managed object — including custom resources Flux has never heard of, like a Cluster API Cluster.
  • Reduced mean time to recovery for Flux-managed applications, plus an ArtifactGenerator for extracting and modifying Helm charts in-pipeline.
  • The Flux Operator Web UI finally answers the "Flux has no dashboard" objection with a centralized view of ResourceSets and workload state, wired to OIDC and plain Kubernetes RBAC.
  • The ResourceSet API templates groups of Flux and Kubernetes resources from input data — the primitive for stamping out per-tenant or per-cluster stacks without duplicating manifests.

Notice the pattern: Argo CD invested in the product (safer deletes, smoother logins, faster UI-driven syncs). Flux invested in the toolkit (health-check expressiveness, templated resource generation). Neither is wrong. They're aimed at different buyers.

When Your Platform Is Already a Reconciler

Here's the part generic comparisons skip. A self-hosted PaaS built on Cluster API already runs a management cluster whose whole job is reconciliation: Cluster, MachineDeployment, and infrastructure-provider CRs describe the fleet's desired state, and CAPI controllers converge reality onto it. Adding GitOps to this platform means wiring up two distinct jobs:

Job 1: reconcile the fleet itself. The CAPI manifests — every workload cluster's definition — should live in git and flow through the same reconciler as everything else. This is where reconciler shape bites first. With Flux, a Kustomization applies the Cluster CRs, and a CEL health check can express exactly what "this cluster is ready" means — status.phase == 'Provisioned' and control-plane ready — before a dependent Kustomization (via dependsOn) starts installing anything onto it. Ordering and readiness are declared in the same CRs your platform already manages. With Argo CD, the equivalent is custom health checks in Lua configured in argocd-cm plus sync waves — workable, but the logic lives in Argo CD's config layer rather than alongside the fleet definitions.

Job 2: bootstrap and deliver onto each new cluster. When CAPI provisions cluster N+1, something must install the platform baseline (CNI, ingress, your PaaS agents) and start delivering app workloads:

  • The Argo CD pattern is hub-and-spoke: register the new cluster's credentials as a Secret in the management cluster, let the ApplicationSet cluster generator discover it, and have the central Argo CD push applications outward — often via the app-of-apps pattern. One pane of glass; but the hub holds admin credentials for every spoke, and the hub's controller does all the work.
  • The Flux pattern is pull-based: a small automation step (or Cluster API's own GitOps bootstrap flow) installs Flux into the new workload cluster, pointed at its path in the fleet repo. Each cluster reconciles itself; the management cluster holds no standing credentials to the fleet, and losing the hub doesn't stop delivery on the spokes.

For a PaaS, Job 2 is the shape test. Your control plane already knows when a cluster is born — it is the thing creating it. Emitting a templated Flux installation (exactly what ResourceSets exist for) is a natural extension of the provisioning flow. Registering credentials back into a central Argo CD and managing its Application inventory is a second, parallel control plane to keep consistent with your first one.

The Four Axes That Decide It

Multi-tenancy: whose RBAC?

Argo CD isolates tenants with AppProjects — its own resource, enforced by its own RBAC layer, mapped to SSO groups. It's granular and battle-tested, but it's a second authorization system your platform must sync with. Flux does tenancy with Kubernetes-native service-account impersonation: each tenant's Kustomization reconciles as a namespace-scoped ServiceAccount, so a tenant can only touch what plain RBAC lets that ServiceAccount touch. If your PaaS already assigns tenants namespaces and RBAC — and any multi-tenant CAPI platform does — Flux adds zero new authorization concepts. Your existing RoleBindings are the tenancy model.

Fleet rollout: staged pushes vs templated instances

Argo CD's Progressive Sync rolls an ApplicationSet change across the fleet in labeled batches — canary clusters first, halt on failure — which is genuinely great for blast-radius control and is the feature to beat here. Flux's answer is composition rather than orchestration: ResourceSets stamp out per-cluster stacks, dependsOn chains order them, and staged rollout is something you build (e.g., by grouping clusters into waves of inputs). If you want staged fleet rollouts out of the box, this axis goes to Argo CD; if your control plane wants to own rollout policy programmatically, templated primitives are easier to drive from code.

Footprint and scaling: what does the reconciler cost?

Flux's controllers run in roughly 200–400 MB of memory, pull-only, with no inbound networking — cheap enough to run a copy per workload cluster without noticing. Argo CD's centralized model concentrates cost in the hub: community scaling guidance lands around one application-controller shard per 15–20 clusters, plus Redis memory that grows with the app/cluster cache, plus tuning --status-processors and --operation-processors as the fleet grows. On a 40-cluster fleet that's a sharded, stateful control plane to capacity-plan — versus 40 small, independent controller sets that scale by existing.

Security posture: what's exposed?

Flux's controllers coordinate through the Kubernetes API — there is no inter-component network traffic to intercept, and nothing listens for inbound connections. Argo CD's components talk gRPC to each other, and hardening that path with internal mTLS only landed in Argo CD 3.5 (June 2026) — a genuine improvement that also confirms the attack surface existed. Add the hub-and-spoke credential model (the hub stores reachable admin credentials for every spoke cluster) and the security review for embedding Argo CD inside a PaaS is simply longer.

The Verdict — and the Best Case Against It

The decision rules, concretely:

  • Embed Flux-shaped controllers when the reconciler is an internal component of your platform. If "deploy" is an API call your control plane makes — triggered by a git push, driven by CRs, consumed by machines (including AI agents that read and write desired state) — you want Kubernetes-native primitives you can template, impersonate, and health-check with CEL, at 200–400 MB per cluster with no second RBAC system and no credential hub.
  • Choose Argo CD when human operators are the primary consumers of the deploy pipeline. If your platform team and your tenants will live in a deploy dashboard — browsing app trees, diffing drift, approving progressive rollouts, exporting audit trails to compliance — Argo CD's integrated UI, SSO, AppProject RBAC, and Progressive Sync are the mature version of that product, and 3.3's PreDelete hooks and OIDC refresh made it meaningfully better this year.

Now the strongest counter-argument, taken seriously: Argo CD is the majority choice for a reason. Nearly 60% of surveyed Kubernetes clusters use it for application delivery, its NPS sits at 79, hiring for it is easier, and every vendor integrates with it first. If your PaaS will be operated by a rotating team of platform engineers rather than a small founding crew, "the thing everyone already knows, with the UI that answers questions at 2 a.m." is a legitimate engineering criterion — and for operating the platform's own visible surface, it can outweigh the shape mismatch. Plenty of teams land on a hybrid for exactly this reason: Flux-style embedded reconciliation as the platform's delivery engine, with a dashboard (Argo CD, or now the Flux Operator Web UI) layered on for humans.

But that counter-argument defends Argo CD as a product for people. The title question was about a reconciler for a platform — a Cluster-API-managed fleet whose deploy pipeline is itself a control loop. For that job, the toolkit beats the product: Flux's controllers compose with CAPI's the way the platform is already built, while Argo CD arrives as a second platform to run beside your first one.

What This Means for Platform Builders

The 2.8x star gap is real, but it measures the size of the "I need a deploy product" market, not fitness for embedding. In 2026 both projects are excellent at what they're actually for — Argo CD 3.3/3.4 is the best version yet of the GitOps product humans operate, and Flux 2.8 is the best version yet of the GitOps toolkit platforms are built from. A self-hosted PaaS on Cluster API is a platform-builder's problem, and the platform-builder's answer is the one that disappears into the control plane instead of standing next to it.

Bex.co is the open-source, AI-native Render alternative built exactly this way — push a git repo, get a running HTTPS service on machines you own, with reconcilers (not dashboards) doing the deploying on a Cluster-API-managed fleet. Star the repo on GitHub or deploy your first app today.

Related articles

Run this on infrastructure you own

bex is the open-source, AI-native Render alternative — push a git repo and get a running HTTPS service on your own machines.

Get started with bex