Video Thumbnail for Lesson
3.1: Dependencies


There are many applications used throughout the course that need to be installed in your development environment.

Rather than have you install them all manually, I have provided

Requires Manual Install

Docker Desktop: Build and run containers

Docker Desktop is a set of applications used to develop and run containers.

Please follow the installation instructions on the website based on your system architecture.

Screenshot of docker desktop install page

Devbox: Portable, isolated dev environments

Devbox is a tool that leverages the Nix package manager to produce isolated development environments containing the exact set of software tools/versions you need.

Please follow the installation instructions on the website to install on your system.

Screenshot of devbox homepage

Installed via DevBox

In the root of the course repo there is a devbox.json and a devbox.lock file containing the full set of dependencies (listed below).

After instaling devbox, you can simply run:

devbox shell

and devbox will use Nix package manager to install a copy of all of the required software in an isolated environment.

Note: these applications are installed in such a way that they will NOT impact other versions you may have installed already on your system.


  • act: Run GitHub Actions locally
  • civo: CLI for interacting with Civo Cloud
  • cloud-provider-kind: KinD plugin to support LoadBalancer type services
  • envsubst: Substitute environment variables into text files
  • gh: CLI for managing repositories and interacting with GitHub
  • go: Programming language for building scalable and efficient software
  • task: Task runner for storing/documenting common commands
  • google-cloud-sdk (gcloud): CLI for managing resources on Google Cloud Platform
  • gum: CLI tool for creating interactive and scriptable terminal UIs
  • helm: Package manager for Kubernetes
  • jq: Command-line JSON processor
  • k9s: Terminal UI for managing Kubernetes clusters
  • kind: Kubernetes IN Docker - local Kubernetes clusters using Docker container nodes
  • kluctl: Deployment tool for Kubernetes
  • ko: Build and deploy container images for Go applications
  • kubectl: CLI for interacting with Kubernetes clusters
  • kubectx: Switch between Kubernetes contexts and namespaces
  • kubent: Identify deprecated Kubernetes APIs in a cluster
  • kustomize: Customize Kubernetes resource definitions
  • oras: OCI Registry As Storage - store artifacts in OCI-compliant registries
  • nodejs_20: JavaScript runtime built on Chrome's V8 engine
  • poetry: Dependency management and packaging tool for Python
  • python312: Python programming language version 3.12
  • tilt: Simplify and accelerate Kubernetes development
  • yq: Process YAML documents from the CLI, similar to jq for JSON


I suggest creating the following aliases:

tl='task --list-all'

These will save you many keystrokes! If you want, you can go even further and generate hundreds of kubectl aliases.


Setting up tab completion for your shell of choice makes life much nicer: