Terraform didn't invent Infrastructure as Code, but it made it accessible to a generation of developers and operations engineers who had been provisioning cloud resources through web consoles and ad-hoc scripts. The concept is deceptively simple: describe the infrastructure you want in declarative configuration files, run 'terraform apply', and let Terraform figure out how to make reality match your description.
HCL (HashiCorp Configuration Language) is the domain-specific language that defines Terraform configurations. It strikes a balance between readability and expressiveness that most developers find approachable — more structured than YAML, less verbose than JSON, and more constrained than general-purpose languages. Variables, modules, loops, conditionals, and data sources provide enough flexibility for complex infrastructure without the footguns of arbitrary code execution.
The provider ecosystem is Terraform's most significant moat. Over 4,000 providers cover AWS, Azure, Google Cloud, Kubernetes, Cloudflare, Datadog, GitHub, PagerDuty, and virtually every cloud service with an API. Each provider translates HCL configurations into API calls, meaning you can manage your entire infrastructure stack — compute, networking, DNS, monitoring, version control — through a single tool and workflow.
State management is both Terraform's superpower and its most common source of pain. Terraform maintains a state file that maps your configuration to real-world resources, enabling it to determine what needs to be created, updated, or destroyed on each apply. This works well when state is properly managed — stored remotely in S3, GCS, or Terraform Cloud — but state drift, state locks, and state corruption are operational realities that every Terraform team eventually encounters.
Modules enable reusable, composable infrastructure patterns. Instead of duplicating VPC configurations across environments, you write a module once and instantiate it with different variables. The Terraform Registry hosts thousands of community modules for common patterns — EKS clusters, RDS databases, VPC networking — that accelerate infrastructure development. Well-structured modules are the difference between maintainable and unmaintainable Terraform codebases.
The plan-and-apply workflow provides a safety net that manual provisioning lacks. Running 'terraform plan' shows exactly what changes will be made before any resource is touched. In CI/CD pipelines, plan output becomes a reviewable artifact that teammates can audit before applying. This preview capability has prevented countless accidental resource deletions and configuration errors.
The BSL license change in August 2023 was the most consequential event in Terraform's history. HashiCorp switched from the open-source MPL 2.0 to the Business Source License, which restricts competitive use. This prompted the creation of OpenTofu, a community fork under the Linux Foundation that maintains MPL 2.0 licensing. For organizations that require truly open-source infrastructure tooling, OpenTofu has become a viable alternative with growing ecosystem support.