Migrating from tfv
tfv is now teriac. What changed in the CLI, the server, the image and the chart, and how to move over step by step.
teriac is the new name of tfv. It's published as a new project: a new npm package, image, chart and repo. Nothing from tfv is read or reused, so tfv keeps working as it is until you switch, and you can run both side by side while you move over.
What changed
CLI
| tfv | teriac |
|---|---|
npm install -g tfv |
npm install -g @marcdomain/teriac |
tfv <command> |
teriac <command> |
~/.tfv/ |
~/.teriac/ (or TERIAC_HOME) |
~/.tfv/bin on PATH |
~/.teriac/bin on PATH |
TFV_HASHICORP_MIRROR, TFV_GITHUB_MIRROR |
TERIAC_HASHICORP_MIRROR, TERIAC_GITHUB_MIRROR |
eval "$(tfv shell-init zsh)" |
eval "$(teriac shell-init zsh)" |
| postinstall script | none: setup runs on the first teriac run |
The commands, flags and version files are the same. .terraform-version, .opentofu-version,
.terragrunt-version, .tool-versions and the rest are tool files, not tfv files, so your repos
need no changes.
Server, image and chart
| tfv | teriac |
|---|---|
ghcr.io/marcdomain/tfv-server |
ghcr.io/marcdomain/teriac-server |
oci://ghcr.io/marcdomain/charts/tfv-server |
oci://ghcr.io/marcdomain/charts/teriac-server |
TFV_* environment variables |
TERIAC_* environment variables |
tfv plan, tfv apply in PR comments |
teriac plan, teriac apply |
tfv.yaml in a repo |
teriac.yaml (or teriac.yml) |
# tfv:watch … |
# teriac:watch … |
tfv_watch = [...] in Terragrunt locals |
teriac_watch = [...] |
check runs named tfv: <project> |
teriac: <project> |
brand/tfv-avatar.png |
brand/teriac-avatar.png |
Move the CLI over
1. Install teriac and run it once, so it sets up ~/.teriac and your PATH:
npm install -g @marcdomain/teriac
teriac --version2. Reinstall the versions you use. Downloads are cached per version and checked against their checksums, so this is quick:
tfv list # what you had
teriac install 1.9.0
teriac install 1.8.0 -p tofu
teriac install 1.2.1 -p tg
teriac use 1.9.0Or, inside a project, let teriac pick the version for you with teriac auto-switch.
3. Swap the shell hook in your shell config:
- eval "$(tfv shell-init zsh)"
+ eval "$(teriac shell-init zsh)"4. Rename mirror variables, if you use them:
- export TFV_HASHICORP_MIRROR=https://artifactory.example.com/artifactory/hashicorp
+ export TERIAC_HASHICORP_MIRROR=https://artifactory.example.com/artifactory/hashicorp5. Restart your terminal and check:
teriac doctor
teriac currentdoctor warns you if terraform still resolves to ~/.tfv/bin/terraform.
6. Remove tfv once you're happy:
npm uninstall -g tfv
rm -rf ~/.tfvThen delete tfv's PATH block from your shell configs (the line that adds ~/.tfv/bin, and the
comment above it), and ~/.config/fish/conf.d/tfv.fish if you use fish.
Move the server over
The server keeps locks, history and saved plans in SQLite on its data volume. teriac server starts with a fresh one, so plan the switch for a quiet moment:
- Apply or unlock open PRs on the tfv server, so no locks are left behind.
- Rename settings: every
TFV_*variable becomesTERIAC_*, for exampleTFV_GITHUB_APP_ID→TERIAC_GITHUB_APP_IDandTFV_REPO_ALLOWLIST→TERIAC_REPO_ALLOWLIST. Secrets in files keep working with the_FILEsuffix (TERIAC_GITHUB_PRIVATE_KEY_FILE). Chat tokens referenced fromrepos.yamlwithtoken_envorwebhook_url_envcan keep their names, but renaming them toTERIAC_*keeps things consistent. - Keep
repos.yaml. Its format hasn't changed; pointTERIAC_REPOS_CONFIGat it, or put it in the chart'sreposvalue. - Rename
tfv.yamltoteriac.yamlin each repo, andtfv:watch/tfv_watchtoteriac:watch/teriac_watch. Merge this before you switch, since teriac readsteriac.yamlfrom the base branch. - Deploy teriac server with the quick start or the
Helm chart. You can reuse the same GitHub App: point its webhook at the new
server, and upload
brand/teriac-avatar.pngas its logo. - Update branch protection if it requires check runs by name:
tfv: <project>is nowteriac: <project>. - Tell your team to comment
teriac planinstead oftfv plan.
Helm values
The chart's values are the same apart from names. A typical diff:
github:
appId: "123456"
- existingSecret: tfv-github
+ existingSecret: teriac-github
httpRoute:
- hostnames: [tfv.acme.dev]
+ hostnames: [teriac.acme.dev]
extraEnvFrom:
- - secretRef: { name: tfv-chat-tokens }
+ - secretRef: { name: teriac-chat-tokens }helm install teriac oci://ghcr.io/marcdomain/charts/teriac-server --version 0.2.1 -n teriac -f values.yaml
helm uninstall tfv -n tfv # once teriac is running