{"id":48873080,"url":"https://github.com/fenio/terrarium","last_synced_at":"2026-04-15T23:00:59.272Z","repository":{"id":351637669,"uuid":"1211841687","full_name":"fenio/terrarium","owner":"fenio","description":"TUI for managing tofu-controller resources","archived":false,"fork":false,"pushed_at":"2026-04-15T21:05:30.000Z","size":3293,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-15T22:17:22.813Z","etag":null,"topics":["fluxcd","gitops","kubernetes","ratatui","rust","terraform"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fenio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-15T19:59:51.000Z","updated_at":"2026-04-15T21:40:00.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/fenio/terrarium","commit_stats":null,"previous_names":["fenio/terrarium"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/fenio/terrarium","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fenio%2Fterrarium","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fenio%2Fterrarium/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fenio%2Fterrarium/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fenio%2Fterrarium/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fenio","download_url":"https://codeload.github.com/fenio/terrarium/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fenio%2Fterrarium/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31863499,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"ssl_error","status_checked_at":"2026-04-15T15:24:39.138Z","response_time":63,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["fluxcd","gitops","kubernetes","ratatui","rust","terraform"],"created_at":"2026-04-15T23:00:39.666Z","updated_at":"2026-04-15T23:00:59.260Z","avatar_url":"https://github.com/fenio.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Terrarium\n\nA terminal dashboard for managing [tofu-controller](https://github.com/flux-iac/tofu-controller) Terraform and [Flux](https://fluxcd.io/) Kustomization resources in Kubernetes.\n\n```\n ▄▖          ▘\n ▐ █▌▛▘▛▘▀▌▛▘▌▌▌▛▛▌\n ▐ ▙▖▌ ▌ █▌▌ ▌▙▌▌▌▌\n```\n\n## Features\n\n- **Real-time monitoring** of Terraform and Kustomization resources across all namespaces\n- **Controller health dashboard** with replica status, runner concurrency, and reconciliation backlog\n- **Resource management** — approve plans, reconcile, replan, suspend/resume, force unlock, delete\n- **Live runner log streaming** with multi-container switching\n- **Content viewers** for plans, outputs, JSON resources, and events with search and line wrap\n- **Filtering** — search, namespace picker, failures-only, waiting-only (stale resources)\n- **Sorting** by namespace, name, ready status, or age\n- **Configurable custom tabs** — filter resources by annotation with custom columns\n- **Configurable detail fields** — show extra data from Terraform outputs in the detail view\n- **Custom keyboard shortcuts** — open URLs in the browser with template variables\n- **Vim-style navigation** throughout — press `?` for the full help screen\n- **Mouse support** — optional, toggle with `m` or start with `--mouse`\n\n## Prerequisites\n\n- Access to a Kubernetes cluster with tofu-controller installed\n- A valid kubeconfig (`~/.kube/config` or `KUBECONFIG`)\n\n## Installation\n\n### Homebrew (macOS \u0026 Linux)\n\n```sh\nbrew install fenio/tap/terrarium\n```\n\n### Download binary\n\nPre-built binaries for Linux and macOS (amd64/arm64) are available on the\n[Releases](https://github.com/fenio/terrarium/releases) page.\n\n### Build from source\n\nRequires Rust 1.88+ (automatically managed via `rust-toolchain.toml`).\n\n```sh\ncargo build --release\ncp target/release/terrarium /usr/local/bin/\n```\n\n### CLI Options\n\n| Flag | Description |\n|------|-------------|\n| `-n, --namespace \u003cNS\u003e` | Filter to a specific namespace (default: all) |\n| `-c, --context \u003cCTX\u003e` | Kubeconfig context to use |\n| `--controller-ns \u003cNS\u003e` | Namespace where tofu-controller runs (default: `flux-system`) |\n| `--mouse` | Enable mouse support (click, scroll; requires Shift for copy) |\n\n## Keyboard Shortcuts\n\nPress `?` at any time to see the full help overlay. Here's a summary:\n\n### Navigation\n\n| Key | Action |\n|-----|--------|\n| `j` / `k` / `↑` / `↓` | Move selection up/down |\n| `Enter` / `l` | Open detail view / stream logs |\n| `Esc` | Go back / clear active filter |\n| `Ctrl-d` / `PgDn` | Half page down |\n| `Ctrl-u` / `PgUp` | Half page up |\n| `g` / `G` | Jump to top / bottom of list |\n| `q` | Quit |\n| `Ctrl+C` | Quit immediately |\n\n### Tabs\n\n| Key | Action |\n|-----|--------|\n| `1`-`9` | Jump to tab by number |\n| `Tab` / `Shift+Tab` | Next / previous tab |\n\n### Filtering \u0026 Search\n\n| Key | Action |\n|-----|--------|\n| `/` | Search / filter by name or namespace |\n| `f` | Toggle failures-only filter (Ready != True) |\n| `w` | Toggle waiting-only filter (Ready but past reconciliation interval) |\n| `n` | Open namespace picker |\n| `o` | Cycle sort column (namespace / name / ready / age) |\n| `!` | Jump to first failure in the list |\n\n### Terraform Actions\n\nThese work in both the Terraform list and detail views:\n\n| Key | Action |\n|-----|--------|\n| `a` | Approve a pending plan |\n| `r` | Trigger reconciliation |\n| `R` | Force a replan |\n| `p` | View the Terraform plan |\n| `O` | View outputs from the outputs secret |\n| `y` | View the full resource as JSON |\n| `e` | View Kubernetes events |\n| `s` / `u` | Suspend / Resume |\n| `F` | Force unlock state (with confirmation) |\n| `x` | Break the glass — drop into `tfctl` shell |\n| `d` | Delete the resource (with confirmation) |\n\n### Kustomization Actions\n\n| Key | Action |\n|-----|--------|\n| `r` | Trigger reconciliation |\n| `y` | View the full resource as JSON |\n| `e` | View Kubernetes events |\n| `s` / `u` | Suspend / Resume |\n\n### Runner Actions\n\n| Key | Action |\n|-----|--------|\n| `Enter` | Stream live logs from the runner pod |\n| `d` | Kill the runner pod (with confirmation) |\n\n### Viewer (Plan / Logs / JSON / Events / Outputs)\n\n| Key | Action |\n|-----|--------|\n| `j` / `k` | Scroll up / down |\n| `h` / `l` | Scroll left / right |\n| `g` / `G` | Jump to top / bottom (in logs, `G` enables auto-follow) |\n| `/` | Search within content |\n| `n` / `N` | Jump to next / previous search match |\n| `w` | Toggle line wrap |\n| `S` | Save content to file (`terrarium_\u003ctype\u003e_\u003ctimestamp\u003e.txt`) |\n| `Tab` | Switch container (log viewer with multiple containers) |\n\n### General\n\n| Key | Action |\n|-----|--------|\n| `m` | Toggle mouse support on/off |\n| `?` | Toggle help overlay |\n\n## Configuration\n\nTerrarium is configurable via a TOML file. It looks for configuration in this order:\n\n1. `TERRARIUM_CONFIG` environment variable (path to config file)\n2. `~/.config/terrarium/config.toml`\n\nWith no config file, Terrarium shows four built-in tabs (Controller, Terraform,\nKustomizations, Runners) and no extra detail fields. All config sections are optional.\n\n### Detail Fields\n\nShow extra values from the Terraform outputs secret in the detail view Status panel.\nWhen no detail fields are configured, Terrarium lists available output keys to help\nyou discover what's available.\n\n```toml\n[[detail_fields]]\nlabel = \"Cluster ID\"\nsource = \"cluster_id\"        # key in the outputs secret\ncolor = [240, 200, 60]       # RGB color (optional, default: white)\nbold = true                  # optional, default: false\n```\n\nFields are displayed two per line in the Status panel. See\n[examples/custom-tab.toml](examples/custom-tab.toml) for a working example.\n\n### Custom Tabs\n\nCreate additional tabs that filter Terraform resources by annotation and display\ncustom columns. Useful for tracking deployments, upgrades, team ownership, or any\nworkflow driven by annotations.\n\n```toml\n[[custom_tabs]]\nname = \"Deployments\"\nannotation = \"scheduled-deployment\"   # only show resources with this annotation\nexpand_json_map = true                # parse annotation value as JSON map\nsort_by = \"DATE\"                      # sort by this column label\n\n[[custom_tabs.columns]]\nlabel = \"NAMESPACE\"\nsource = \"namespace\"\nwidth = 15\n\n[[custom_tabs.columns]]\nlabel = \"VERSION\"\nsource = \"annotation_key\"             # the JSON key when expand_json_map is true\ncolor = [140, 200, 255]\nbold = true\nwidth = 20\n\n[[custom_tabs.columns]]\nlabel = \"DATE\"\nsource = \"annotation_value\"           # the JSON value (or raw annotation value)\ndate_highlight = true                 # color by proximity: red/yellow/green\nwidth = 15\n```\n\n**Column sources:**\n\n| Source | Description |\n|--------|-------------|\n| `namespace` | Resource namespace |\n| `name` | Resource name |\n| `ready` | Ready condition status (True/False/Unknown), colored automatically |\n| `age` | Time since resource creation |\n| `annotation_key` | JSON map key (requires `expand_json_map = true`) |\n| `annotation_value` | Raw annotation value, or JSON map value if expanded |\n\nSee [examples/custom-tab.toml](examples/custom-tab.toml) for complete examples\nincluding a deployment tracker and a team-ownership tab.\n\n### Custom Shortcuts\n\nDefine keyboard shortcuts that open URLs in the browser. Useful for linking to\ndashboards, log viewers, secret managers, or cloud consoles.\n\n```toml\n[[shortcuts]]\nkey = \"b\"                    # single character, case-sensitive\nlabel = \"Grafana\"            # shown in the status bar\nurl = \"https://grafana.example.com/explore?cluster={context}\u0026namespace={namespace}\u0026pod={name}-tf-runner\"\n```\n\n**Template variables:**\n\n| Variable | Description | Available |\n|----------|-------------|-----------|\n| `{context}` | Kubeconfig context name | Always |\n| `{namespace}` | Resource namespace | Always |\n| `{name}` | Resource name | Always |\n| `{output.KEY}` | Value from the Terraform outputs secret | Detail view only |\n\nWhen using `{output.KEY}`, the outputs must be loaded first by opening the detail\nview. If outputs aren't cached, Terrarium shows an error flash.\n\nShortcuts appear in the status bar when viewing Terraform resources. Multiple\nshortcuts can be defined with different keys.\n\nSee [examples/shortcuts.toml](examples/shortcuts.toml) for examples including\nGrafana, Vault, and cloud console links.\n\n## Examples\n\nThe [examples/](examples/) directory contains ready-to-use configuration snippets:\n\n| File | Description |\n|------|-------------|\n| [custom-tab.toml](examples/custom-tab.toml) | Custom tabs with annotation filtering and column definitions |\n| [shortcuts.toml](examples/shortcuts.toml) | Browser shortcuts with URL templates |\n\nTo use an example, copy the relevant sections into `~/.config/terrarium/config.toml`\nor point to it directly:\n\n```sh\nTERRARIUM_CONFIG=examples/shortcuts.toml terrarium\n```\n\n## Screenshots\n\n![Controller Dashboard](screenshots/controller.png)\n![Terraform List](screenshots/terraform-list.png)\n![Terraform Detail](screenshots/terraform-detail.png)\n![Runners](screenshots/runners.png)\n\n## Troubleshooting\n\nIf you get errors about unsupported edition or compilation failures, make sure\nyou're using `rustup`-managed Rust (not Homebrew's `rust` formula). Run `rustup show` —\nit should show the toolchain from `rust-toolchain.toml`. If not, remove `rust`\n(`brew uninstall rust`) and use `rustup` instead.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffenio%2Fterrarium","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffenio%2Fterrarium","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffenio%2Fterrarium/lists"}