Terrain icon

Terrain

A native GNOME GUI for Terraform and OpenTofu.

Workspaces, streamed runs, plan diffs, state viewer, variable management — git-cloned local projects (with terraform workspace support) alongside remote backends (HCP, Terraform Enterprise, OTF) under one roof.

Workspace overview with the runs tab populated
Workspace overview
Plan diff viewer showing per-resource changes
Per-resource plan diff
State tree with attribute viewer
State tree with attributes
Workspace variables with sensitive values masked
Variables with sensitive masking

What it does

Local projects from git

Point at a git@… or https://… URL with an optional subpath; Terrain clones into its own data dir — no ~/code access required. Multiple subpaths share one clone.

Tofu workspaces

Discovered via tofu workspace list and surfaced as nested rows under each project. Create or delete from the sidebar; runs are pinned via TF_WORKSPACE.

Streamed runs

tofu plan / apply / destroy with live coloured logs and a working cancel button. Remote runs fetched via API polling.

Plan diff

TFE-style per-resource changes with action badges (+ / ~ / / −/+) and attribute-level before/after.

State viewer

Resource tree with attributes, history of past state versions, side-by-side diff between any two versions.

Variables

Read and edit; sensitive values masked and persisted to the system keyring (libsecret), never plaintext on disk. Variable sets too.

Managed binaries

Default for new workspaces. Terrain downloads + caches official OpenTofu / Terraform releases per workspace, verified against upstream _SHA256SUMS — no host install required.

Git auth in-app

Generate or import ed25519 SSH keys from Preferences; HTTPS tokens stored in libsecret. Both stay inside the sandbox — no ~/.ssh or ssh-agent socket needed.

Hybrid backends

Local CLI runner alongside HCP Terraform, self-hosted Terraform Enterprise, and OTF — same UI, no branching on backend kind.

Install

Flatpak recommended

Works on any modern Linux desktop. Carries its own runtime.

flatpak install --user --bundle \
  ./terrain-x86_64.flatpak

Download for x86_64 or aarch64

Pre-built host binary

For glibc distros (Fedora 41+, Debian Trixie+, Ubuntu 24.10+, Arch) or musl (Alpine, Void). Needs GTK 4 + libadwaita 1.6+ on the host.

tar xzf terrain-linux-amd64-glibc.tar.gz
./terrain

Download tarballs

From source

Go 1.26+, GTK 4.10+, libadwaita 1.6+, blueprint-compiler, meson.

meson setup build
meson compile -C build
./build/terrain

Build instructions

Status & help wanted

Workspace management, runs, plan diff, state, variable management, variable sets, and remote backends (HCP / TFE / OTF) all work. Flathub submission is queued.

The current app icon is a placeholder. Terrain wants a proper GNOME-style app icon; the plan is to apply to GNOME Circle. If you have design chops and want to help — icon, mockups, anything visual — PRs and suggestions are very welcome.