Hangar

Platform engineering · James Fillman

Good platforms give people their time back. Hangar is how I build one.

Hi, I'm James. I've spent a long career helping software get from a developer's head to production with less friction and fewer surprises. This site is where I share how I think about that work, and Hangar is where I put it into practice: an internal developer platform I build in the open, for container apps and AI agents alike. It's never finished, and neither are my opinions.

Hangar running: a three-minute tour of Tower, from the fleet view to a promotion and a canary in prod. The plugin is real; the demo data is made up. Chapters and notes → Or watchtwo real runs, from nothing to production →

Where the opinions come from

~500 apps, 9 clusters
moved from manual kubectl apply to GitOps with ArgoCD at Best Buy Canada
Jenkins to Tekton
a CI/CD rebuild with SLSA provenance and Sigstore signing, driven by PCI supply-chain requirements
25 years
from the Linux fleet behind online banking to Kubernetes-native platforms

My experience in full →

Architecture · 01 of 08 · The familyHangar with Autopilot: six products and one reference systemOpen full page ↗

What I believe

Seven ideas shape almost every decision in Hangar, roughly in order of how much they matter to me.

The whole SDLC, from the platform side

Follow a change from the first design conversation to the day you measure whether it worked. Each stage pairs what I believe with the part of Hangar that does it, and what's different when the author of the change is an AI agent.

The stack, in the order a change meets it

Every tool in Hangar is here for a reason. Follow one change from intent to production, and pick any tool to see why I chose it. The dashed line is the rule I care about most: the side that builds never touches a cluster.

When the author is an agent: same path, less authority. An agent's change goes through Clearance and lands as a pull request, through the same gates plus two of its own.

  1. 01

    Declare

    What do you want?

    Intent starts as a form in Tower or a file in git. Either way it ends as a commit.

  2. 02

    Compose

    Make it real

    Crossplane turns a small claim into a repo, a pipeline, secrets and a database, then keeps them that way.

  3. 03

    Build

    Does it build and pass?

    A fixed, platform-owned path. Stages are chained by events, so each one fails and retries on its own.

  4. 04

    Prove

    Can we trust it?

    Who authorised it, and what the build actually did, are separate questions with separate answers.

  5. Only a reviewed, merged commit crosses here
  6. 05

    Release

    Ship it, safely

    A release stage never touches a cluster. It opens a pull request, and each cluster's own ArgoCD pulls.

  7. 06

    Watch

    Did it work?

    Outcomes come back as events, never as an API call reaching the other way.

Secrets, identity and policy

No standing credentials where a cluster-issued identity will do, and no raw Secrets in git.

Observability

A release isn't done when it deploys. It's done when you can see whether it worked.

Why this tool

ArgoCD, one per cluster

The only writer to any cluster.

built

A hub ArgoCD holding every cluster's credentials is a path from dev into prod. Per-cluster instances keep the blast radius to one.

Chosen over A central hub ArgoCD

Read the decision →

Every tool, what I chose it over, and why →

Six products, one Hangar

Start here

Away from the keyboard

I live in Squamish, BC, with my dog Riley. When I'm not building platforms, I'm usually at the crag, on the trails, or deep in a chess game. If you're building a platform, wrestling with one, or just want to swap notes, I'd love to hear from you.

More about me →