A Private Terraform Module Registry
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.
bin remove the extension from bin file May 8, 2018
lib remove pino's pritty format Oct 17, 2018
routes re-format as eslint v5 Oct 17, 2018
test remove pino's pritty format Oct 17, 2018
views return root and submodules onf a module in views Mar 17, 2018
.dockerignore dockerize May 24, 2018
.eslintrc.js enable verbose logging for client May 5, 2018
.gitignore replace store to use nedb instead pouchdb May 23, 2018
.travis.yml remove docker build on travis-ci Jun 8, 2018
Dockerfile remove host in service discovery May 27, 2018
LICENSE add a license as MPL 2.0 Nov 21, 2017
app.js re-format as eslint v5 Oct 17, 2018
package-lock.json update dependencies Oct 17, 2018
package.json remove pino's pritty format Oct 17, 2018



Build Status FOSSA Status Dependency Status devDependency Status

A Private Terraform Module Registry in the early stages of development.


  • Node.js 8+

  • HTTPS - Terraform module registry only support HTTPS.


citizen server

To launch the registry server

$ ./citizen server

It will be launched at http://localhost:3000. You can check it at http://localhost:3000/health.

Because Terraform CLI works with only HTTPS server, you should set up HTTPS in front of the registry server.

If you want to test it at local, you need a tool which provides HTTPS like ngrok.

Environment variables:

  • CITIZEN_DATA_PATH: A directory to save database file. The default is data directory in a current working directory (absolute/relative path can be used).

  • CITIZEN_STORAGE : Storage type to store module files. You can use file or s3 type.

  • CITIZEN_STORAGE_PATH: A directory to save module files only if CITIZEN_STORAGE is file (absolute/relative path can be used).

  • CITIZEN_AWS_S3_BUCKET`: A S3 bucket to save module files only if CITIZEN_STORAGE is s3.

  • AWS_ACCESS_KEY_ID: Your AWS access key only if CITIZEN_STORAGE is s3.

  • AWS_SECRET_ACCESS_KEY: Your AWS secret access key only if CITIZEN_STORAGE is s3.

citizen publish

Since official Terraform Module Registry is integrated with GitHub, users can publish terraform modules if they just push it on GitHub.

Citizen provides a special command to publish a module onto citizen registry server instead integrating GitHub.

In a module directory, you can publish your terraform module via a command below:

$ ./citizen publish <namespace> <name> <provider> <version>

You should set CITIZEN_ADDR as citizen registry server address which you will publish your modules to. e.g. https://registry.example.com.


If you have ALB module in ./alb directory and your registry server is launched at https://registry.example.com, you run below command in ./alb directory to publish ALB module.

$ CITIZEN_ADDR=https://registry.example.com \
  citizen publish dev-team alb aws 0.1.0

Then, you can define it in your terraform file like this:

module "alb" {
  source = "registry.example.com/dev-team/alb/aws"
  version = "0.1.0"


You can use docker to launch the registry server. The docker image is in outsideris/citizen.

$ docker run -d -p "3000:3000" outsideris/citizen:latest


Set environment variables, see above.

$ ./bin/citizen server
$ ./bin/citizen publish


$ npm test

Build distributions

$ npm run build

Under dist/, citizen binaries for linux, darwin and windows made.


FOSSA Status