Self-hosted Terraform pull-request automation. Runs plan and apply from VCS webhooks with no per-resource SaaS billing. Apache 2.0; operators supply compute, state backend, and platform engineering capacity.
Atlantis is a self-hosted Go service that runs as a long-lived process inside your network, acting as the execution layer for Terraform and OpenTofu operations triggered by pull request events. It communicates with your VCS platform via webhooks and posts plan and apply output back to the originating PR as comments.
Atlantis does not store Terraform state. State management stays with whatever backend you configure (S3, GCS, Terraform Cloud, etc.). The process needs network access to your VCS platform, your state backend, and your cloud provider APIs. Cloud provider credentials are supplied via environment variables or IAM role binding on the host.
Plan files are stored on disk between the plan and apply steps, which is why a Kubernetes StatefulSet with persistent storage is the recommended deployment path rather than a Deployment. v0.42.0 shipped in April 2026; the project carries approximately 8,900 GitHub stars under Apache 2.0 and holds bi-weekly CNCF community calls.
Key Features
Webhook-driven plan on PR open and apply on comment trigger; full terraform output posted back as a PR comment with workspace-level locking to prevent concurrent state writes
VCS support for GitHub, GitLab, Bitbucket, Azure DevOps, and Gitea via native webhook and PR comment APIs; no SaaS dependency
Per-repository atlantis.yaml workflow customization with pre-plan, post-plan, pre-apply, and post-apply hook steps for policy checks and notifications
Server-level repos.yaml controls repo allowlist, default workflows, and apply requirements (PR approval count, passing CI status checks)
OpenTofu supported as a drop-in Terraform runtime; set ATLANTIS_DEFAULT_TF_VERSION or use terraform_version in atlantis.yaml to switch executors
Official Helm chart (StatefulSet with persistent volume) for Kubernetes; Docker image published to ghcr.io/runatlantis/atlantis