What & Why
Digger is the missing infrastructure framework.
Easy to use for developers; fully customisable for DevOps.
Digger CLI is in alpha. All APIs are subject to change. Please give us feedback!
Why?
Infrastructure should be defined as code, otherwise things get messy quickly. Terraform is the industry standard here. But it is verbose and low-level. The language itself is simple, but to make use of it you need to understand all the cloud-native primitives and "glue" them by hand.
Developers want to build applications, not to get into the weeds of infrastructure that runs their apps. But having DevOps engineers support every application change creates a bottleneck. So they build internal tooling for developers to self-serve. Developers define what their apps need from infrastructure, while DevOps engineers control how is it implemented.
Alternative infrastructure-as-code tools like Pulumi or CDK partially solve the first problem. They make it easier for developers to build infrastructure using languages they are familiar with, like TypeScript or Python. But that makes it less appealing to DevOps engineers and larger teams because of lesser popularity and flexibility. Concepts are still low-level; and developer workflow is still tightly coupled, so internal tooling on top still needs to be built.
Key ideas
Terraform is an "assembly language". Most of it should not be written by hand. Instead, compile higher-level concepts into Terraform.
Meaningful defaults - like in an opinionated web framework (eg Rails). Zero configuration needed to get common things up and running. Customise with Terraform if needed.
Decouple "infrastructure interface" from "infrastructure implementation". Developers define what they need from infrastructure; DevOps engineers define how to meet those requirements if it differs from the framework defaults.
2 main components
dgctl.json - a high-level cloud-agnostic spec of your environments
dgctl CLI - a convenience tool to edit the spec and generate Terraform for AWS / GCP or Azure
Easy to use building blocks
Digger comes with sensible defaults so things work out of the box with zero configuration. No cloud or DevOps knowledge needed.
Digger provides a library of versatile blocks for the most common pieces of infrastructure - like containers, functions, databases, queues, domains etc. You can also build your own blocks.
To create a new piece of infrastructure, simply run:
Terraform under the hood
Digger "compiles" the high-level dgctl.json
spec into Terraform, which is the most popular infrastructure-as-code language. It automatically configures the "glue" like networking configurations, access controls, security groups, etc.
You can completely customise the way it is generated or add your own Terraform code.
Most blocks are cloud-agnostic - so you can quickly migrate to AWS, GCP or Azure
Inspiration
Who Should Write Terraform? by Ian Miell
No One Should Write Terraform by Leon Wright
DevOps is a Failure by Lee Briggs
Terraform Compiler Pattern by Yoriyasu Yano
The Developer Experience Gap by Stephen O'Grady
The Self-provisioning Runtime by Swyx
Up next
Quick Start guide - deploy a simple containerised application with dgctl
How it works and dgctl.json spec
Blocks - defining pieces of your infrastructure with high-level components
Customisation - 3 ways: basic options, custom Terraform or build your own blocks
Last updated