Self-hosted service
cloudposse/geodesic avatar
cloudposse/geodesic

Geodesic: a DevOps toolbox container that replaces the workstation install

🚀 Geodesic is a DevOps Linux Toolbox in Docker

1,054 stars121 forksShellApache-2.0

At a glance

What is it?
Geodesic is a Linux toolbox image from Cloud Posse that packages a DevOps toolchain so a team works in the same environment on every machine, used either as an interactive shell or as a base image for your own toolbox. This looks at what changed in 4.0, why the Alpine build is gone, and where the container model costs you.
Who is it for?
Geodesic fits a platform team that wants every engineer running the same tool versions without installing a dozen CLIs on each laptop, and it fits teams building their own internal toolbox image on top of a maintained base. It does not fit a workstation without Docker, and on Windows it means running the whole toolchain inside WSL, which is a real cost.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 71 days ago.
What is it written in?
Mainly Shell, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The point is not the tools, it is the identical environment

Geodesic is a Linux toolbox container crafted to optimize DevOps workflows. It comes loaded with the dependencies of a DevOps toolchain, and its stated purpose is to bring consistency and efficiency across development environments without installing additional software on the workstation.

The problem being solved is the familiar one, stated in the project's own feature list as eliminating the "works on my machine" problem and guaranteeing that every developer operates in a uniform OS environment with consistent tool versions. The topics on the repository give the shape of that toolchain: AWS, EC2, Elastic Beanstalk, Terraform, Kubernetes, kops, kubectl, Helm, Helmfile, and infrastructure as code in general.

The project frames this as the "Geodesic Way": if everything an application ships is distributed as a Docker image, infrastructure should be treated the same way, using containers and environments instead of unconventional wrappers, complicated folder structures and symlink hacks.

The audience is DevOps practitioners and the platform teams who equip them. The project is written mostly in shell, licensed Apache-2.0, and published by Cloud Posse, whose commercial support offering is linked from the project banner, which is worth remembering when you evaluate it as an organisation.

An interactive shell, or a base image for your own toolbox

The project documentation says Geodesic is best used in one of two ways, and the choice matters for how you adopt it.

The first is as an interactive shell, optimized to work as a command-line shell, with a set of tools for the DevOps practitioner and more available through the related packages repository. The documentation says installation of the shell is as easy as running a Docker container or using it as a base image.

The second is as a Docker base image, where you write your own `Dockerfile` and use `cloudposse/geodesic` as the base, adding the few of your favourite tools that are not already installed so the whole team shares one consistent toolbox. The project's own recommendation is to start there, pinning to a release and a base OS:

dockerfile
FROM cloudposse/geodesic:...

The reasoning behind the recommendation is worth understanding. A team that has its own toolbox image inherits upstream tool updates, and its own additions stay in one place that everyone gets at once. A team that just runs the shared image interactively still has a version drift problem, just a smaller one, because anything a person installs on top of their own machine is still theirs alone.

The project also describes itself as a containerized parallel to Vagrant, offering similar functionality in a Docker container context, which is the clearest statement of the intended mental model.

Geodesic 4.0 changed the container and shell lifecycle

The 4.0 release changed the behaviour that a daily user actually feels, so it is worth reading the list rather than assuming continuity with earlier versions.

The first launched shell is no longer special. All shells are now equal and you can quit them in any order, with the geodesic container remaining running until the last shell exits. Before that, the first shell was the privileged one.

The `geodesic` command gained a `--solo` option that launches a new Geodesic container for just that one shell, which is the escape hatch for the case where a long lived container has accumulated state you would rather not carry over.

The third change is the one with the most operational weight. Geodesic no longer mounts the host user's entire home directory into the container. Instead it mounts only selected directories. For a tool whose whole appeal is a frictionless shell, that is a trade of convenience for isolation, and it means the workflow of "cd into my project and work" now depends on configuration rather than on the home directory simply being there.

The fourth change is in the shutdown path. The `geodesic stop` command was enhanced to shut down the container gracefully rather than forcefully, which among other things allows shell scripts to run their exit handlers. The project points to `ReleaseNotes-v4.md` for the extensive notes.

Debian only since 3.0, and the image was halved

The platform story narrowed over time and the documentation is explicit about it. Starting with Geodesic 3.0, the project distributes Geodesic as a multi-platform image only, covering `linux/amd64` and `linux/arm64`, and it is Debian based. The Alpine version is no longer published, though the `debian` labels are kept for compatibility, and as with 2.0 the `latest` tag points to the Debian image.

The 2.0 to 3.0 history is in the same note. From 2.0 the project shipped a multi-platform Debian image alongside a single-platform Alpine image for `linux/amd64`, and the `latest` tag was moved from Alpine to Debian at that time. So an old script pinning `cloudposse/geodesic:latest` moved from an Alpine base to a Debian one at 2.0 and has stayed Debian since.

The 3.0 release was about shrinking rather than adding. The documentation says it focused on slimming down the Docker image and removing outdated tools, and that 3.0 is approximately half the size of 2.10. The expectation stated is that for most users the impact is minimal, but the practical consequence is that the tool you quietly relied on in 2.x may be gone in 3.x, so an evaluation should list the tools you need and check them against the current image rather than assuming continuity.

The repository is generated, and the Makefile drives the image build

The repository layout is unusual and worth reading before you start. The README.md file carries a header saying not to edit it, that it was automatically generated by the `cloudposse/build-harness`, and that changes belong in `README.yaml` followed by `make init` once and `make readme` to rebuild. The same harness is used across hundreds of projects by the maintainers.

The Makefile is where the build lives, and its variables are the knobs:

make
export DOCKER_ORG ?= cloudposse
export DOCKER_IMAGE ?= $(DOCKER_ORG)/geodesic
export DOCKER_BASE_TAG ?= dev
export DOCKER_BASE_OS ?= debian
export DOCKER_TAG ?= $(DOCKER_BASE_TAG)-$(DOCKER_BASE_OS)
export DOCKER_FILE ?= os/$(DOCKER_BASE_OS)/Dockerfile.$(DOCKER_BASE_OS)

Switching `DOCKER_BASE_OS` to `alpine` would point the build at the Alpine Dockerfile, though the published image is Debian based, and the `BUILD_ARCH` variable forces the Alpine build to amd64 while allowing the Debian build to target another platform.

The default target chains the whole workflow:

make
all: init deps lint build install run/new

Around that sit the pieces of the build: `os/` holds the per distribution Dockerfiles, `packages.txt` and `packages-amd64-only.txt` list the tool packages, `rootfs/` holds the filesystem that gets laid into the image, `src/` holds the shell sources, `Dockerfile.custom` and `Dockerfile.options` are the extension points for your own additions, and `Brewfile`, `atmos.yaml`, `requirements.txt` and `demo.tape` cover the developer tooling around the project.

Where the container model costs you

Three limits are structural rather than fixable, and they should shape the decision.

The first is that Docker is now a prerequisite for every engineer. The project lists native support for Mac OSX, Linux, and Windows via WSL. On Windows that means the entire toolchain, including the shell, runs inside a Linux virtual environment, and files that need to be on the host are outside the container unless they are in a mounted directory. For a team with mixed tooling habits on Windows, that is the largest hidden cost, and it lands exactly where 4.0's selective mounting made itself felt.

The second is that the toolbox is a container, not a host installation. If a workflow needs a tool to see the host's authentication, a local socket, or a system path, the container boundary is a problem rather than a convenience. Geodesic is built for infrastructure work against remote APIs, and it is at its weakest when a task needs to be intimate with the local machine.

The third is the maintenance model. The image is a moving target maintained by one organisation, and the 3.0 slimming demonstrated that the contents can change under you. Combined with the 4.0 shift away from mounting the home directory, the sensible approach is to pin a specific release in your own `Dockerfile` rather than floating on `latest`, and to keep your own additions in `Dockerfile.custom` so they survive a base image bump.

Apache-2.0, a paid support option, and a measured release cadence

The licence is Apache-2.0, with the `LICENSE` file at the repository root, and the project is a straightforward derivative work of the toolchain it packages. There is no copyleft obligation that would complicate embedding the image in an internal platform, and the code that constitutes the project itself, the Dockerfiles, the shell sources and the package lists, is permissively licensed.

The distribution model has a commercial edge to it. The banner in the project documentation links to a Get Support badge and to Cloud Posse's support page, and the project is maintained by an organisation that sells products and support alongside its open source work. That is a common and reasonable arrangement, but it means the open source repository is the community edition of a commercial ecosystem, and the support path costs money.

On releases, the line is steady without being fast. v4.5.1 was published on 2026-03-23, v4.5.0 on 2026-01-20, and v4.4.0 on 2025-05-05. The last push to the repository was on 2026-08-13, so the source is being worked on, and the gap between the last release and that push is the normal distance between a tagged release and the current state of the default branch. The project also keeps a Slack community, an archived Slack channel, a `CODE_OF_CONDUCT.md`, a `CONTRIBUTING.md` and a `docs/` directory for the longer form material.

Editorial conclusion

Geodesic fits a platform team that wants every engineer running the same tool versions without installing a dozen CLIs on each laptop, and it fits teams building their own internal toolbox image on top of a maintained base. It does not fit a workstation without Docker, and on Windows it means running the whole toolchain inside WSL, which is a real cost. It is also the wrong tool if you want the tools on the host itself, since Geodesic deliberately stopped mounting the entire home directory in 4.0 and mounts only selected directories. Before you adopt it, read `ReleaseNotes-v4.md` in the repository, and pin the image to a specific release rather than tracking `latest`, because the `latest` tag is a moving Debian-based target.

Frequently asked questions

How do I use Geodesic as a base image for my own toolbox?

Write a Dockerfile that starts from `FROM cloudposse/geodesic:...`, pinned to a release and base OS as the project recommends, and add the tools your team needs that are not already installed. The repository ships `Dockerfile.custom` and `Dockerfile.options` as extension points for exactly this.

Is there still an Alpine version of Geodesic?

No. Starting with Geodesic 3.0 the project distributes a multi-platform linux/amd64 and linux/arm64 Debian based image only, and no longer publishes an Alpine version, though the debian labels are kept for compatibility. The `latest` tag points to the Debian image.

What changed in Geodesic 4.0?

The first launched shell is no longer special and the container stays running until the last shell exits, the `geodesic` command has a `--solo` option for a one-off container, the host home directory is no longer mounted wholesale, and `geodesic stop` shuts down gracefully so exit handlers run. The full notes are in `ReleaseNotes-v4.md`.

How is the Geodesic image built?

With the bundled Makefile, whose default target is `all: init deps lint build install run/new`. The build is driven by variables such as `DOCKER_ORG`, `DOCKER_IMAGE`, `DOCKER_BASE_TAG`, `DOCKER_BASE_OS` and `DOCKER_FILE`, with the per distribution Dockerfiles under `os/` and the tool lists in `packages.txt` and `packages-amd64-only.txt`.

Can I edit the README of the Geodesic repository?

Not directly. The README.md is generated by the cloudposse/build-harness, and the header says to make changes in README.yaml, run `make init` once, then run `make readme` to rebuild the file.

Official sources

  1. cloudposse/geodesic on GitHub
  2. License: Apache-2.0
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/cloudposse-geodesic.svg)](https://hysenlabs.com/projects/cloudposse-geodesic)

Was this useful?