finds.dev← search

// the find

outsideris/citizen

★ 653 · JavaScript · MPL-2.0 · updated Oct 2024

A Private Terraform Module/Provider Registry

Citizen is a self-hosted implementation of Terraform's module and provider registry protocols, letting teams publish private modules and providers without routing through the public registry or Terraform Cloud. It's aimed at platform/infra teams who already run their own CI and just need an internal artifact server Terraform CLI can talk to natively.

It covers both registry protocols, not just modules — provider publishing handles SHA256SUMS generation and GPG signing automatically, which is the part most DIY registries skip. Storage and DB backends are both pluggable (file/S3/GCS, sqlite/MySQL/MongoDB via Prisma), so it fits into whatever infra you already have instead of forcing a specific stack. It ships as prebuilt binaries for linux/darwin (amd64+arm64)/windows plus a Docker image and Helm chart, so getting it running isn't a build-it-yourself exercise. The test suite includes actual integration tests that drive the real Terraform CLI against a tunneled instance, which is a meaningfully stronger signal than unit tests alone that the protocol implementation actually works.

There's no auth or access control described anywhere — for something billed as a 'private' registry shared across teams, that's a real gap you'd have to solve yourself (network-level restriction, a proxy, something). It requires HTTPS fronted by your own reverse proxy and depends on external `shasum`/`gpg` binaries on the publishing machine, so there's setup surface beyond just running the binary. MongoDB only works as a replica set, and migrations are backend-specific through Prisma, so switching databases later isn't a clean swap. Last push was October 2024 with modest star count, so if Terraform's provider registry protocol shifts, it's unclear how quickly (or whether) this gets updated to match.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →