{"id":13505729,"url":"https://github.com/PacoVK/tapir","last_synced_at":"2025-03-30T00:31:24.244Z","repository":{"id":102999875,"uuid":"569890667","full_name":"PacoVK/tapir","owner":"PacoVK","description":"A Private Terraform Registry","archived":false,"fork":false,"pushed_at":"2025-03-27T07:10:22.000Z","size":100678,"stargazers_count":216,"open_issues_count":21,"forks_count":17,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-03-27T08:24:27.920Z","etag":null,"topics":["cloud","hacktoberfest","hashicorp","hashicorp-terraform","infrastructure-as-code","registry","terraform","terraform-modules","terraform-provider"],"latest_commit_sha":null,"homepage":"https://pascal.euhus.dev/tapir/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PacoVK.png","metadata":{"files":{"readme":"README.md","changelog":"changelog.adoc","contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"pacoVK","custom":["https://www.paypal.com/donate/?hosted_button_id=NC846BADKGTJG"]}},"created_at":"2022-11-23T21:16:58.000Z","updated_at":"2025-03-27T07:09:43.000Z","dependencies_parsed_at":"2023-12-20T11:52:17.270Z","dependency_job_id":"95e782b7-d16a-47c7-a7d3-11036a6d014e","html_url":"https://github.com/PacoVK/tapir","commit_stats":{"total_commits":797,"total_committers":7,"mean_commits":"113.85714285714286","dds":"0.19447929736511915","last_synced_commit":"dd4dd38d6500c8f0c971466bca7a582921add3e3"},"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PacoVK%2Ftapir","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PacoVK%2Ftapir/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PacoVK%2Ftapir/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PacoVK%2Ftapir/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PacoVK","download_url":"https://codeload.github.com/PacoVK/tapir/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246262490,"owners_count":20749170,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cloud","hacktoberfest","hashicorp","hashicorp-terraform","infrastructure-as-code","registry","terraform","terraform-modules","terraform-provider"],"created_at":"2024-08-01T00:01:12.340Z","updated_at":"2025-03-30T00:31:24.236Z","avatar_url":"https://github.com/PacoVK.png","language":"Java","funding_links":["https://github.com/sponsors/pacoVK","https://www.paypal.com/donate/?hosted_button_id=NC846BADKGTJG"],"categories":["Tools","Self-Hosted Registries","Java"],"sub_categories":["Registry","Miscellaneous"],"readme":"# Tapir\n\u003cp\u003e  \n  \u003ca href=\"https://github.com/PacoVK/tapir?tab=readme-ov-file#contributors-\"\u003e\n    \u003cimg alt=\"Contributors\" src=\"https://img.shields.io/github/all-contributors/pacovk/tapir\"\u003e\n  \u003c/a\u003e\n  \u003ca href=\"https://hub.docker.com/r/pacovk/tapir\"\u003e\n    \u003cimg alt=\"Docker Pulls\" src=\"https://img.shields.io/docker/pulls/pacovk/tapir\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n  \n### A Private Terraform Registry\n\n[![Test](https://github.com/PacoVK/tapir/actions/workflows/build.yml/badge.svg)](https://github.com/PacoVK/tapir/actions/workflows/build.yml)\n[![Release](https://github.com/PacoVK/tapir/actions/workflows/deploy.yml/badge.svg)](https://github.com/PacoVK/tapir/actions/workflows/deploy.yml)\n[![Docs-deployment](https://github.com/PacoVK/tapir/actions/workflows/pages/pages-build-deployment/badge.svg)](https://github.com/PacoVK/tapir/actions/workflows/pages/pages-build-deployment)\n[\u003cimg src=\"https://api.gitsponsors.com/api/badge/img?id=569890667\" height=\"20\"\u003e](https://api.gitsponsors.com/api/badge/link?p=Fhcl2QYOz9lq0noRGHOc9bUnaferItDiM0xElJWfcZ5IlK5OfxhJLKK+G6b3G5zETsIBgzbNnEMKUsAJTf2TFg==)\n\n![Tapir overview](./docs/images/tapir.gif)\n\nTapir is the registry you always wanted if you are using Terraform at enterprise scale.\nCore values of Tapir is to provide\n* visibility\n* transparency\n* increases adoption rate\n* security\n* quality for your Terraform modules.\n\n## Feedback \nYou can send feedback and feature requests via GitHub issues. Either vote existing issues or feel free to raise an issue. \n\n## Why?\n### Modules\nTerraform modules are reusable parts of infrastructure code. The most crucial part of re-usability is transparency and visibility. Since Terraform supports Git-based modules there are several disadvantages that come along with this capability.\n* Access to Git repos are often designed on team level, no access for others per default\n* Search capabilities are very limited, in terms you are searching for specific Terraform modules\n* You may not get insights in the codes quality and security measures\n* Module versioning is not enforced\n* Documentation formats vary or docs are missing at all.\n  This is where Tapir jumps in.\n\n### Providers\nIf you make use of custom providers, or just want to have them mirrored you need an Artifactory to store the binaries.\nAdditionally, users of the module need to break out the Toolchain and manually setup providers and copy them into \nthe global provider directory.\nSupporting Terraform providers, Tapir does not help you to get your providers visible, but also keeps the users within the toolchain of Terraform only. That means:\n* Build providers with the same process and pipeline and make use of [official HashiCorp provider project template](https://github.com/hashicorp/terraform-provider-scaffolding).\n* Increase security and enforce providers to be GPG signed. Running `terraform init` will check if SHASUMS are valid before downloading the actual provider binary.\n* Help your users to focus on the infrastructure code rather that the setup. Tapir provides ready-to-copy code with \na proper provider config example.\n\n## About Tapir\nTapir is an implementation of the [official Terraform registry protocol](https://developer.hashicorp.com/terraform/internals/module-registry-protocol).\nYou can easily run an instance on your own with the full flexibility and power a central registry has.\n* It will provide you a simple, but powerful UI to search for modules and providers that are available\n  across your organization.\n* It implements the official Terraform registry protocols\n  * modules and providers supported\n* It scans the module source code on push, you will have insights about the code quality and security measures\n  * Tapir integrates [Trivy](https://trivy.dev/) for that purpose\n* It generates documentation and stats for the module \n  * See module dependencies, inputs, outputs and resources that will be generated\n  * Tapir integrates [terraform-docs](https://terraform-docs.io/) for that purpose\n* It provides several storage adapters\n  * currently S3, AzureBlob and Local\n* It provides several database adapters for the data\n  * currently Dynamodb (default), Elasticsearch, CosmosDb\n* It provides a REST-API for custom integrations and further automation\n  Tapir is build on [Quarkus](https://quarkus.io/) and [ReactJS](https://reactjs.org/). You can run Tapir wherever you can run Docker images.\n* If you run Tapir with local storage, it can even be operated in an **air-gaped** environment, with no internet access \n\nApart from the above, [this is what Wikipedia knows about Tapirs](https://en.wikipedia.org/wiki/Tapir).\n\n## Overview\n\n### Deployment\n\n**NOTE** starting with version `0.6.0` authentication is required. Hence, you need an OIDC IDP to run Tapir. \nRead more about the [authentication](./docs/configuration.md#authentication) below.\n\nYou can run Tapir wherever you can run Docker images.\nImages are available on [DockerHub](https://hub.docker.com/r/pacovk/tapir) `pacovk/tapir` and [AWS Elastic Container Registry](https://gallery.ecr.aws/pacovk/tapir) `public.ecr.aws/pacovk/tapir`.\nThere are samples with Terraform in `examples/`.\n* [AWS AppRunner](./examples/aws/apprunner)\n* [AWS EKS](./examples/aws/eks)\n* [Azure Containers](./examples/azure/containerapps)\n\nOther deployment options available are:\n* [Helm Chart](https://github.com/PacoVK/tapir-helm)\n\n### Configure\n\nTapir is configured via environment variables. You can learn how to set up Tapir [here](./docs/configuration.md).\n\n### How-to\n\nTo see how to use Tapir, please read the [usage docs](./docs/usage.md).\n\n## Troubleshoot\n\nSee [troubleshooting docs](./docs/TROUBLESHOOT.md)\n\n## Roadmap\n\n* Add more storage adapter\n  * GCP\n* Add more Database adapter\n  * Postgresql\n* Provide a Github/ Gitlab integration to crawl for additional code metrics and ownership informations\n\n## Contribution\n\nIf you want to contribute to this project, please read the [contribution guidelines](./CONTRIBUTING.md).\nA detailed How-to guide on local development can be found in the [docs](dev/docs/RUNBOOK.md).\n\n**Actively searching** for contributors. \u003cbr/\u003e\n**Feedback** is always appreciated :rainbow: \u003cbr/\u003e\nFeel free to open an Issue (Bug- /Feature-Request)\nor provide a Pull request. :wrench:\n\n## Contributors ✨\n\nThanks go to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://pascal.euhus.dev/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/27785614?v=4?s=100\" width=\"100px;\" alt=\"PacoVK\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ePacoVK\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/PacoVK/tapir/pulls?q=is%3Apr+reviewed-by%3APacoVK\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e \u003ca href=\"#projectManagement-PacoVK\" title=\"Project Management\"\u003e📆\u003c/a\u003e \u003ca href=\"#maintenance-PacoVK\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e \u003ca href=\"#example-PacoVK\" title=\"Examples\"\u003e💡\u003c/a\u003e \u003ca href=\"https://github.com/PacoVK/tapir/commits?author=PacoVK\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/PacoVK/tapir/commits?author=PacoVK\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/andrea-defraia\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/56583671?v=4?s=100\" width=\"100px;\" alt=\"Andrea Defraia\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAndrea Defraia\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#example-andrea-defraia\" title=\"Examples\"\u003e💡\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/WeiMengXS\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/54929266?v=4?s=100\" width=\"100px;\" alt=\"Wmxs\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eWmxs\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/PacoVK/tapir/issues?q=author%3AWeiMengXS\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"#ideas-WeiMengXS\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/jonasz-lasut\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/93281932?v=4?s=100\" width=\"100px;\" alt=\"Jonasz Łasut-Balcerzak\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJonasz Łasut-Balcerzak\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#example-jonasz-lasut\" title=\"Examples\"\u003e💡\u003c/a\u003e \u003ca href=\"https://github.com/PacoVK/tapir/commits?author=jonasz-lasut\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/tlchaffi\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/128724533?v=4?s=100\" width=\"100px;\" alt=\"Tim Chaffin\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eTim Chaffin\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/PacoVK/tapir/pulls?q=is%3Apr+reviewed-by%3Atlchaffi\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/tim-chaffin\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/128724533?v=4?s=100\" width=\"100px;\" alt=\"Tim Chaffin\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eTim Chaffin\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/PacoVK/tapir/commits?author=tim-chaffin\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/TomBeckett\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/10406453?v=4?s=100\" width=\"100px;\" alt=\"Tom Beckett\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eTom Beckett\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#example-TomBeckett\" title=\"Examples\"\u003e💡\u003c/a\u003e \u003ca href=\"https://github.com/PacoVK/tapir/commits?author=TomBeckett\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/akuzminsky\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1763754?v=4?s=100\" width=\"100px;\" alt=\"Oleksandr Kuzminskyi\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eOleksandr Kuzminskyi\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/PacoVK/tapir/issues?q=author%3Aakuzminsky\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/GrzegorzHejman\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/55591451?v=4?s=100\" width=\"100px;\" alt=\"GrzegorzHejman\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eGrzegorzHejman\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/PacoVK/tapir/issues?q=author%3AGrzegorzHejman\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://hybridbrothers.com\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/26713978?v=4?s=100\" width=\"100px;\" alt=\"Cédric Braekevelt\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eCédric Braekevelt\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/PacoVK/tapir/issues?q=author%3Acedricbraekevelt\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://lois.postu.la\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1423612?v=4?s=100\" width=\"100px;\" alt=\"Loïs Postula\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eLoïs Postula\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/PacoVK/tapir/commits?author=loispostula\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/PacoVK/tapir/commits?author=loispostula\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#ideas-loispostula\" title=\"Ideas, Planning, \u0026 Feedback\"\u003e🤔\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FPacoVK%2Ftapir","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FPacoVK%2Ftapir","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FPacoVK%2Ftapir/lists"}