Skip to content
Go back

Inside Terraform: A series about the internals of Terraform

Disclaimer: I am working at HashiCorp (now IBM) as part of the Terraform Core team. The postings on this site are my own and don’t necessarily represent IBM’s positions, strategies or opinions.
Since I am involved in Terraform my opinions can sometimes be (unconsciously) biased. I hope you enjoy the post anyway.

This is the start/index post for a series of blog posts about the internals of Terraform. In this series, I will deep dive into different parts of Terraform and explain how they work under the hood.

The end-goal of this is to enable the reader to develop a deeper understanding of Terraform and how it works. After reading this, I would hope you are able to contribute to Terraform itself, add a new block to the language, or change existing behavior. I will not try to cover every single detail of Terraform, but I will try to cover the most important parts and give you a good overview of how different parts of Terraform work together.

My hope is that this series helps the reader to at least get a step closer to understanding the internals of Terraform. I won’t be covering anything related to language design and graph theory here; there are too many holes in my knowledge there as well. Maybe I’ll write something to that end in the future as well, probably not.

Series Content

Why?

I have been reflecting on my past (almost) two years as part of the Terraform Core team at HashiCorp (now IBM). Our team builds new language features, maintains the Terraform language and runtime, and is part of most major changes to Terraform itself.

The codebase is vast and complex because the domain we cover (a programming language) is complex itself. If you used Terraform before you know how many things can be expressed with it, how many different styles of writing Terraform code there are and how many different use-cases Terraform has to cover.

I was relying heavily on my colleagues to gain an understanding of the codebase over time (and my gaps are still quite severe), and I wanted to take this opportunity to document my learnings and share them with the community. It might only be truly useful to a few people, but I hope others find it interesting as well. At least to me, this project is quite an interesting one with a lot of learning opportunities.


Share this post on:




Previous Post
Inside Terraform: addrs - Everything Needs an Address
Next Post
Terraform Actions Usage Patterns