Comparison

Cloudkeel-DD vs driftctl

driftctl is a free, open-source CLI for Terraform drift on AWS, Azure, GCP and GitHub, now in maintenance mode. Cloudkeel-DD runs continuously, self-hosted, and reads Kubernetes too. Every claim here is sourced from driftctl's own repository.

driftctl is the tool most people mean when they say “just use a CLI for drift.” It’s free, it’s open source, and for years it was the default answer. It is also, by its own maintainers’ words, no longer being actively developed. This page is for teams who used driftctl, still like what it does, and are looking at what replaces it.

Every claim about driftctl below is sourced from its own GitHub repository and README, linked at the bottom.

Start with its own words

driftctl’s README carries this banner, verbatim, at the top of the file:

This project is now in maintenance mode. We cannot promise to review contributions. Please feel free to fork the project to apply any changes you might want to make.

That is maintenance mode, not deprecated or archived. The repository is live (last pushed 2026-08-27), the license is Apache-2.0, and it still works today. But “we cannot promise to review contributions” is a maintainer telling you, plainly, not to expect new features.

What driftctl actually does

Its own README describes it in one line: a free and open-source CLI that scans a cloud provider, maps resources against your Terraform code, and warns about drift and unwanted unmanaged resources. Four features, by its own list: scan, analyze diffs and warn, ignore resources you don’t want flagged, and multiple output formats.

That is a real, useful tool for what it does. It is also the whole tool: a CLI you run, that produces a report. There is no server, no UI, no scheduler, and no persistence between runs.

Where the gap is

Where that leaves you

Cloudkeel-DDdriftctl
Entry priceNot set (pilot stage)Free, open source (Apache-2.0)
DeploymentSelf-hosted Helm chart, standalone, runs continuouslyCLI binary, runs anywhere, one-shot per invocation
Unmanaged resource discoveryYes: AWS, Azure, GCPYes: its original purpose
KubernetesLive cluster read: Helm, ArgoCD, Flux, sixteen kindsNot supported: AWS, Azure, GCP, GitHub only
Change attribution (who made it)Best-effort, all three clouds’ native audit logs, within a lookback windowNot documented; a CLI report has no concept of history to attach it to
Severity / suppressionPer-type, per-environment severity; suppression needs a reason and expires“Ignore” a resource, no severity model, no expiry
Policy checks (open ingress, root containers, etc.)Yes, on every scanNot part of the tool
Scan cadenceScheduled, continuousManual, or whatever you wrap it in yourself
Cloud write accessNone: read-only, enforced in codeNone: read-only CLI
Project statusPre-1.0, pilotMaintenance mode

The difference that actually matters

driftctl tells you drift happened the moment you ask. Cloudkeel-DD is already watching.

A CLI is exactly right for a one-time audit or a CI step you already own. It is the wrong shape for “did anything change since Tuesday,” because nothing persists between runs to answer that question. Maintenance mode makes this sharper: the gaps above (Kubernetes, severity, policy, attribution) are not on a roadmap anymore.

Where driftctl is ahead

Said plainly, because a comparison that only lists our wins is an advert.

What we do not do

The limits, in the same breath as the claims:

Which one to pick

Choose driftctl if a one-shot or CI-wrapped scan is genuinely all you need, you’re comfortable being on your own for support, and Kubernetes isn’t part of what you’re checking.

Choose Cloudkeel-DD if you want a continuous, scheduled view with history, severity, suppression and policy checks built in, and your estate includes a Kubernetes cluster you also want covered, running entirely inside infrastructure you already control.

They are not mutually exclusive. Nothing stops you running driftctl as a point check and Cloudkeel-DD as the continuous layer underneath it.

What about the clouds’ own tools?

Azure Policy, AWS Config and GCP Asset Inventory each answer part of this: inside their own cloud, in their own query language, without reference to your Terraform. If your estate is one cloud, evaluate them first; they are already paid for. If it spans clouds, the check becomes three different checks, and none of them can say “this resource is in no Terraform state,” because that comparison needs your state, which is the input they do not take.

Read more

Sources

Read 2026-09-12. If any of this has changed, tell us and we will correct it: a comparison that goes stale is worse than none.