Mirrors, offline and Windows
Download from Artifactory, Nexus or any internal mirror, work behind proxies and offline, raise GitHub's rate limit, and run teriac on Windows without admin rights.
Where downloads come from
| Tool | Version list | Downloads | Checksums |
|---|---|---|---|
| Terraform | releases.hashicorp.com |
releases.hashicorp.com |
SHA256SUMS from the release |
| OpenTofu | GitHub API | github.com releases |
SHA256SUMS from the release |
| Terragrunt | GitHub API | github.com releases |
SHA256SUMS from the release |
Signed downloads
New in 0.2.0 of the CLI and the server.
Before installing, teriac checks that the release's checksum file is signed by the tool's vendor, then checks the download against it. A tampered mirror or download is refused.
| Tool | Signed by | Checked |
|---|---|---|
| Terraform | HashiCorp (PGP) | always |
| OpenTofu | OpenTofu (PGP) | always |
| Terragrunt | Gruntwork (PGP) | when the release publishes a signature (releases from early 2026 on); older ones are checked against their checksum only |
The vendors' public keys ship with teriac. If your mirror doesn't copy the .sig / .gpgsig
files, turn the check off:
export TERIAC_VERIFY_SIGNATURES=falseThe checksum is still checked either way.
Mirrors
Download from an internal mirror (Artifactory, Nexus, …) instead of the public sites. Each variable replaces one host and keeps the rest of the path:
| Variable | Replaces | Used for |
|---|---|---|
TERIAC_HASHICORP_MIRROR |
https://releases.hashicorp.com |
Terraform (downloads and version list) |
TERIAC_GITHUB_MIRROR |
https://github.com |
OpenTofu and Terragrunt downloads |
export TERIAC_HASHICORP_MIRROR=https://artifactory.example.com/artifactory/hashicorp
export TERIAC_GITHUB_MIRROR=https://user:token@nexus.example.com/repository/github- Plain
http://mirrors and credentials in the URL work. - Checksums are still checked, against the mirrored
SHA256SUMSfile, and its signature too, so copy the.sig/.gpgsigfiles into your mirror as well.
How the path is kept
With TERIAC_HASHICORP_MIRROR=https://artifactory.example.com/artifactory/hashicorp:
https://releases.hashicorp.com/terraform/1.9.0/terraform_1.9.0_linux_amd64.zip
→ https://artifactory.example.com/artifactory/hashicorp/terraform/1.9.0/terraform_1.9.0_linux_amd64.zipSo set the mirror up as a remote (proxy) repository of the original host, with the same layout.
The GitHub API and rate limits
OpenTofu and Terragrunt version lists come from the GitHub API. GitHub allows 60 requests an hour
without a token. Set GITHUB_TOKEN (or GH_TOKEN) to raise the limit; the token needs no
permissions:
export GITHUB_TOKEN=ghp_xxxIf the API can't be reached, installing an exact version (teriac install 1.8.0 -p tofu) still
works; latest and ranges like 1.8.^ need the list.
Offline and air-gapped machines
- Version lists are cached for an hour in
~/.teriac/cache/. - Installed versions never need the network again:
use,exec,auto-switch(when the version is installed) and the shell hook all work offline. - For air-gapped networks, point both mirror variables at your internal repository.
Proxies
teriac downloads with Node.js. Behind a proxy, use a mirror inside your network (above), or route traffic through your proxy at the network level.
Windows
Everything works on Windows without administrator rights:
- Store:
%USERPROFILE%\.teriac\ - PATH: set with
[Environment]::SetEnvironmentVariable("PATH", ..., "User")(User scope, no admin) - Shell hook: PowerShell profile, via
teriac shell-init powershell - Plugin cache:
%APPDATA%\terraform.rc
npm install -g @marcdomain/teriac
teriac install latest
teriac use latest
Add-Content $PROFILE "`nInvoke-Expression (teriac shell-init powershell | Out-String)"Open a new terminal after the first run so the User PATH change is picked up.