- Teams create reusable Terraform modules to standardize common infrastructure patterns (TLS certificates, load balancers, message queues, Kubernetes clusters, databases).
- Modules let application teams consume tested building blocks instead of reimplementing infrastructure logic, reducing risk and accelerating delivery.
- Modules also enable consistency across teams while allowing environment-specific inputs.


- Modules evolve (for example: 5.10.0 → 5.11.0 → 5.12.0). With many consumers, semantic versioning is essential so teams can pin versions and upgrade on their own schedule.
- The public Terraform Registry offers browsable versions and docs, but it is public. For internal, security-sensitive, or compliance-driven modules you need a private, organization-scoped solution.
- Private sharing of modules and providers — visible only to members of your HCP Terraform organization.
- Semantic versioning and version constraints equivalent to the public registry.
- A way to enforce standards by publishing approved, tested, and secure modules for team consumption.
| Area | Public Registry | HCP Terraform Private Registry |
|---|---|---|
| Hosting / visibility | Publicly visible to everyone | Scoped to your HCP Terraform organization (requires credentials) |
| Who can publish | Any community member | Only approved organization members via connected VCS repos |
| Typical content | Community-maintained modules | Organization-private modules + curated public modules you approve |
| Source address format | namespace/name/provider | app.terraform.io/<ORG>/<MODULE_NAME>/<PROVIDER> |

- Hosting/visibility: Public registry = global visibility; Private registry = organization-scoped visibility with access control.
- Publishing: Public = open publishing; Private = controlled publishing from connected VCS repositories by authorized maintainers.
- Content: Private registry aggregates your internal modules and any curated public modules you choose to expose for team discovery.
- Source format: Private modules include the hostname prefix so Terraform queries your private registry:
app.terraform.io/<ORG>/<MODULE_NAME>/<PROVIDER>.
- Private modules and providers — authored and maintained in your organization’s connected VCS repositories and surfaced only to organization members.
- Curated public modules — pointers or mirrored entries for vetted public registry modules, so teams can find both internal and approved external modules in one place.

- Develop and commit the module code to a VCS repository (GitHub, GitLab, Bitbucket, Azure DevOps, etc.) using the standard Terraform module layout (README, inputs, outputs, examples).
- Connect that repository to your HCP Terraform organization and publish it to the Private Registry. HCP Terraform imports the module metadata and generates browsable docs.
- Create new module versions by pushing semantic Git tags (for example,
1.0.0,1.1.0); the registry automatically creates version entries from those tags.

app.terraform.io/<ORG>/<MODULE_NAME>/<PROVIDER>
Example HCL module block:
app.terraform.io— hostname indicating the private registrykrausen-hcp— organization namewebapp— module namegcp— providerversion— pins the module to a specific released version
app.terraform.io, it’s a private registry module.
The private registry auto-creates module versions when you push semantic Git tags (for example,
1.0.0). Ensure your repository follows the standard Terraform module layout so the registry can detect and import it correctly.- The HCP Terraform Private Registry lets you share modules and providers privately within your organization, maintaining access control and governance.
- You can curate approved public modules and surface them next to your private modules to create a single source of truth for teams.
- Private modules are published from connected VCS repositories and are versioned automatically via semantic Git tags.
- Private module source addresses include the hostname prefix
app.terraform.ioso Terraform queries your private registry. - Publishing to the Private Registry requires the “Manage Private Registry” permission — limit this to trusted maintainers.
Publishing modules to the private registry requires the Manage Private Registry permission. Ensure only trusted maintainers have this permission to prevent unauthorized module publication.
- Terraform Registry — Private Module Sources
- Semantic Versioning
- GitHub | GitLab | Bitbucket | Azure DevOps