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:
dgctl block add --type container

Terraform under the hood

Digger "compiles" the high-level dgctl.jsonspec 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
dgctl generate --platform AWS
dgctl provision

Inspiration

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