{"id":13505812,"url":"https://github.com/paraterraform/para","last_synced_at":"2025-09-04T02:04:21.892Z","repository":{"id":57728530,"uuid":"191857724","full_name":"paraterraform/para","owner":"paraterraform","description":"Para - community plugin manager and a \"swiss army knife\" for Terraform/Terragrunt - just 1 tool to facilitate all your workflows.","archived":false,"fork":false,"pushed_at":"2019-09-09T16:25:54.000Z","size":1944,"stargazers_count":58,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-30T00:31:58.849Z","etag":null,"topics":["cli","community","devops","plugin-manager","terraform","terragrunt"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/paraterraform.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-06-14T01:42:03.000Z","updated_at":"2025-03-14T17:04:04.000Z","dependencies_parsed_at":"2022-09-09T09:30:57.928Z","dependency_job_id":null,"html_url":"https://github.com/paraterraform/para","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/paraterraform/para","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paraterraform%2Fpara","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paraterraform%2Fpara/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paraterraform%2Fpara/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paraterraform%2Fpara/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/paraterraform","download_url":"https://codeload.github.com/paraterraform/para/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/paraterraform%2Fpara/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273539317,"owners_count":25123499,"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","status":"online","status_checked_at":"2025-09-04T02:00:08.968Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["cli","community","devops","plugin-manager","terraform","terragrunt"],"created_at":"2024-08-01T00:01:14.430Z","updated_at":"2025-09-04T02:04:21.863Z","avatar_url":"https://github.com/paraterraform.png","language":"Go","funding_links":[],"categories":["Tools","Go"],"sub_categories":["Miscellaneous","Community providers"],"readme":"# Para\n\n\u003e Para - community plugin manager for Terraform.\n\u003e A \"swiss army knife\" for [Terraform] and [Terragrunt] - just 1 tool to facilitate all your workflows.\n \n## Overview\n\n\u003ca href=\"https://en.wiktionary.org/wiki/paraterraform#English\" target=\"_blank\"\u003e\u003cimg align=\"right\" src=\"docs/para.png\"\u003e\u003c/a\u003e\nPara, together with Terraform, is a reference to the concept of [paraterraforming](https://en.wikipedia.org/wiki/Terraforming#Paraterraforming).\n\nAs paraterraforming is an option until terraforming is possible - Para takes care of distributing community plugins\nfor Terraform until it's implemented in Terraform.\n\nPara uses FUSE to mount a virtual file system over well-known Terraform plugin locations (such as `terraform.d/plugins`\nand `~/.terraform.d/plugins` - see [official docs](https://www.terraform.io/docs/extend/how-terraform-works.html#plugin-locations) for\ndetails) and downloads them on demand (with optional caching) using a [curated index](https://github.com/paraterraform/index) (or your own).\n\nPlease note that FUSE must be available (macOS requires [OSXFUSE](https://osxfuse.github.io)).\n\n## Capabilities\n\n* Download [community plugins](https://www.terraform.io/docs/providers/type/community-index.html) for [Terraform] on demand using a [curated default index](https://github.com/paraterraform/index) or your own\n* Download [Terraform] on demand (just run it as though it's there `para terraform ...`)\n* Download [Terragrunt] on demand (just run it as though it's there `para terragrunt ...`)\n\n## Examples\n\nPlease see [examples](./examples) for complete setups showcasing Para's usage.  \n\n## Installation\n\n### Automatic\n\nThere is an automatic [launcher script](https://github.com/paraterraform/para/blob/master/para) that in about 80 lines of\nBash would download (and cache!) the right (or the latest) version of `para` whenever you need it (and check for updates).\nIt's suggested way of installing `para` - just download the launcher script to your Terraform/Terragrunt config dir\n(dont' forget to check it into your version control system) and make it executable:\n```bash\ncurl -Lo para https://raw.githubusercontent.com/paraterraform/para/master/para \u0026\u0026 chmod +x para \n``` \nFrom there on just always invoke Para as `./para`:\n```bash\n$ ./para terraform init\nPara Launcher Activated!\n- Checking para.cfg.yaml in current directory for 'version: X.Y.Z'\n- Desired version: latest (latest is used when no version specified)\n- Downloading Para checksums for version 'latest' to '$TMPDIR/para-501/para/latest'\n- Downloading Para 'darwin' binary for version 'latest' to '$TMPDIR/para-501/para/latest'\n- Starting Para from '$TMPDIR/para-501/para/latest/para_v0.4.3_darwin-amd64'\n\n------------------------------------------------------------------------\n\nPara is being initialized...\n\u003crest is omitted for brevity\u003e\n```\n\nYou can request a specific version of Para by adding a `version` field to `para.cfg.yaml` next to the launcher script.\n\n### Manual\n\nJust download the binary for your platform from the [latest release page](https://github.com/github.com/paraterraform/para/releases/latest) with `curl`:\n```bash\ncurl -Lo para \"https://github.com/paraterraform/para/releases/latest/download/$(curl -L https://github.com/paraterraform/para/releases/latest/download/SHA256SUMS | grep -i $(uname -s) | awk '{ print $2 }')\"\nchmod +x para\n```\n\nIt's advised to make sure that `para` is on your `$PATH` for convenience.\n\n## Usage\n\nPara serves as a process wrapper so just prepend it to every `terraforrm` (or `terragrunt`) command.\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"docs/demo.svg\"\u003e\n\u003c/div\u003e\n\nThe step-by-step instruction for the demo are available [here](./docs/demo.md). \n\nFor the rest, check the [short help output](./docs/help/short.md) or [long help output](./docs/help/long.md) by running `para` or `para -h` respectively!\n\n## Index\n\nPara relies heavily on a special plugin index for discovery of 3rd party plugins.\n\n### Primary\n\nIt's the main source of truth for Para. Always just 1 file is used. Unless overridden, Para uses 1st available from\nthe list of pre-defined locations:\n* `para.idx.yaml`\n* `~/.para/para.idx.yaml`\n* `/etc/para/para.idx.yaml`\n* `https://raw.githubusercontent.com/paraterraform/index/master/para.idx.yaml`\n\nAs you can see, even by default `para` will always prefer your local index if there is one before falling back on the\n[default one]((https://github.com/paraterraform/index)). Alternatively, you can override it via a config, environment\nvariable or a command line flag. \n\nPrimary index file should be a YAML in the format of:\n\n```yaml\n\u003ckind\u003e:\n  \u003cname\u003e:\n   \u003cvX.Y.Z\u003e:\n     \u003cplatform\u003e:\n       url: \u003cfile://...|http://...|https://...\u003e\n       size: \u003csize of the provider binary in bytes\u003e\n       digest: \u003cmd5|sha1|sha256|sha512\u003e:\u003chash of the file that will be download - verified before extraction\u003e\n```\n\nAll strings (key \u0026 values, except for URLs) must be lowercase. All fields are required (url, size, digest).\n\nURLs may point to archives and they will be automatically extracted (size MUST be always derived from the actual\nplugin binary and digest MUST be derived from the archive in such cases) if supported (determined by the extension\nat the end of the Url):\n  * .zip\n  * .tar\n  * .tar.gz  or .tgz\n  * .tar.bz2 or .tbz2\n  * .tar.xz  or .txz\n  * .tar.lz4 or .tlz4\n  * .tar.sz  or .tsz\n  * .rar\n\n### Extensions\n\nYou may like the primary index in general but what if:\n* something is missing from the primary index?\n* you would rather use some other version for one particular plugin?\n* there is a plugin that is only available in your corporate network?\n* you want to have some special plugins for this particular project?\n* you'd rather curate your plugins explicitly?\n\nThose and many other use-cases can be addressed with index extensions!\n\nBy default (which you can change to your liking!) they are loaded from one of the following dirs:\n* `para.idx.d`\n* `~/.para/para.idx.d`\n* `/etc/para/para.idx.d`\n\nBoth file names and file content are used when processing index extensions\nOnly files matching the pattern `\u003ckind\u003e.\u003cname\u003e.yaml` are loaded.\nEach index extension file should be one of the following:\n* a valid single-document YAMLs with the following structure\n```yaml\n\u003cvX.Y.Z\u003e:\n   \u003cplatform\u003e:\n     url: \u003cfile://...|http://...|https://...\u003e\n     size: \u003csize of the provider binary in bytes\u003e\n     digest: \u003cmd5|sha1|sha256|sha512\u003e:\u003chash of the file that will be download - verified before extraction\u003e\n```\n* a single line with a URL like `file://...|http://...|https://...` pointing to a file with the content as described above.\n\nThe former may come handy if you'd rather have your index in-place and the latter may be useful for plugin developers if\nthey want to maintain their own feed of plugin versions as seen in [terraform-provider-yaml](https://github.com/ashald/terraform-provider-yaml/blob/master/provider.yaml.yaml).\n\nAlternatively, it can be used to block certain plugins as putting an empty file like `provider.foo.yaml` would wipe out\nall known versions of the `prrovider` plugin named `foo` from the primary index.  \n\n## Development\n\n### Roadmap\n\nFuture is not set in stone but might as well look like:\n* testing ¯\\\\\\_(ツ)_/¯\n* logging/tracing for debugging\n* helper commands to analyze/verify indices\n* helper commands to control cache state  \n* serve as an adaptor for arbitrary state management backends (leverage `http` backend to convert API calls into command line calls)\n* you name it!\n\n### Guidelines\n\nPara is written and maintained by [Borys Pierov](https://github.com/ashald).\nContributions are welcome and should follow [development guidelines](./docs/development.md).\nAll contributors are honored in [CONTRIBUTORS.md](./CONTRIBUTORS.md).\n\n## License\n\nSee [LICENSE.txt](./LICENSE.txt)\n\n[Terraform]: https://www.terraform.io\n[Terragrunt]: https://github.com/gruntwork-io/terragrunt","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparaterraform%2Fpara","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fparaterraform%2Fpara","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fparaterraform%2Fpara/lists"}