{"id":50461388,"url":"https://github.com/vulcanshen/km8","last_synced_at":"2026-06-19T00:30:46.870Z","repository":{"id":357982963,"uuid":"1239407490","full_name":"vulcanshen/km8","owner":"vulcanshen","description":"A scout-style Kubernetes TUI built around Relatives navigation — trace ownership and references between resources. Drill, breadcrumb, jump. Helm + persistent shell built in.","archived":false,"fork":false,"pushed_at":"2026-06-10T07:10:07.000Z","size":21743,"stargazers_count":7,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-17T20:06:40.243Z","etag":null,"topics":["bubbletea","cli","devops","go","k8s","kubectl","kubernetes","kubernetes-cli","lazygit","terminal","tui","vim"],"latest_commit_sha":null,"homepage":null,"language":"Go","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/vulcanshen.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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-05-15T04:10:40.000Z","updated_at":"2026-06-10T07:10:11.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/vulcanshen/km8","commit_stats":null,"previous_names":["vulcanshen/km8"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/vulcanshen/km8","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vulcanshen%2Fkm8","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vulcanshen%2Fkm8/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vulcanshen%2Fkm8/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vulcanshen%2Fkm8/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vulcanshen","download_url":"https://codeload.github.com/vulcanshen/km8/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vulcanshen%2Fkm8/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34513020,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-18T02:00:06.871Z","response_time":128,"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":["bubbletea","cli","devops","go","k8s","kubectl","kubernetes","kubernetes-cli","lazygit","terminal","tui","vim"],"created_at":"2026-06-01T05:00:20.018Z","updated_at":"2026-06-19T00:30:46.862Z","avatar_url":"https://github.com/vulcanshen.png","language":"Go","funding_links":[],"categories":["Applications"],"sub_categories":["Cloud and DevOps"],"readme":"# km8 — KubeMate\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/icon.svg\" width=\"128\" alt=\"km8 icon\" /\u003e\n\u003c/p\u003e\n\n[![GitHub Release](https://img.shields.io/github/v/release/vulcanshen/km8)](https://github.com/vulcanshen/km8/releases)\n[![Go Version](https://img.shields.io/github/go-mod/go-version/vulcanshen/km8)](https://go.dev/)\n[![Go Report Card](https://goreportcard.com/badge/github.com/vulcanshen/km8)](https://goreportcard.com/report/github.com/vulcanshen/km8)\n[![License](https://img.shields.io/badge/license-GPL--3.0-blue)](LICENSE)\n[![Kubetools](https://img.shields.io/static/v1?label=Curated\u0026message=Kubetools\u0026color=2a7f62)](https://collabnix.github.io/kubetools/#cluster-with-core-cli-tools)\n[![Charm in the Wild](https://img.shields.io/static/v1?label=Listed%20in\u0026message=Charm%20in%20the%20Wild\u0026color=6B5CE7)](https://github.com/charm-and-friends/charm-in-the-wild#cloud-and-devops)\n\n**Language**: English · [繁體中文](README-zh_TW.md)\n\nA scout-style Kubernetes TUI built around **Relatives navigation**.\n\n## Demo\n\n### Getting around km8\n\n![basics](docs/demo-basics.gif)\n\n### Navigate Kubernetes by relatives\n\n![relatives](docs/demo-relatives.gif)\n\n### Edit live resources via the Space menu\n\n![yaml-edit](docs/demo-yaml-edit.gif)\n\n### Helm as a first-class resource\n\n![helm](docs/demo-helm.gif)\n\n### TUI + persistent shell in one window\n\n![km8erm](docs/demo-km8erm.gif)\n\n## Four keys to drive km8\n\n| Key | Behavior |\n|---|---|\n| **`Tab`** | Switch panel focus (or `1` / `2` / `3` directly) |\n| **`Enter`** | Drill in / commit a choice |\n| **`Space`** | *What can I do here?* — opens a contextual menu or cheatsheet on every panel and every tab |\n| **`Esc`** | Back out — pop one drill level / close any popup |\n\nWhen in doubt, press `Space`. Power-user shortcuts (`Y` YAML / `E` edit / `S` shell / `D` delete / `N` ns / `C` context) exist for speed but every one is also reachable through the `Space` menu — nothing to memorize unless you want it.\n\n## Install\n\n### Quick Install (macOS/Linux)\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/vulcanshen/km8/main/install.sh | sh\n```\n\n### Quick Install (Windows PowerShell)\n\n```powershell\nirm https://raw.githubusercontent.com/vulcanshen/km8/main/install.ps1 | iex\n```\n\n### Homebrew (macOS/Linux)\n\n```bash\nbrew install vulcanshen/tap/km8\n```\n\n### Scoop (Windows)\n\n```powershell\nscoop bucket add vulcanshen https://github.com/vulcanshen/scoop-bucket\nscoop install km8\n```\n\n### From source\n\n```bash\ngo install github.com/vulcanshen/km8/cmd@latest\n```\n\n### Build locally\n\n```bash\ngit clone https://github.com/vulcanshen/km8.git\ncd km8\ngo build -o km8 ./cmd/\n./km8\n```\n\n### Uninstall\n\n```bash\n# macOS/Linux\ncurl -fsSL https://raw.githubusercontent.com/vulcanshen/km8/main/uninstall.sh | sh\n\n# Windows PowerShell\nirm https://raw.githubusercontent.com/vulcanshen/km8/main/uninstall.ps1 | iex\n```\n\n## Quick Start\n\n```bash\nkm8\n```\n\nConnects to your current kubeconfig context. Press `Enter` to drill, `Space` for the contextual menu, `Esc` to back out, `Tab` to move between panels.\n\nInspired by [Lens IDE](https://k8slens.dev/), [lazygit](https://github.com/jesseduffield/lazygit), [lazydocker](https://github.com/jesseduffield/lazydocker), and [k9s](https://github.com/derailed/k9s). Built with Go and [Bubble Tea](https://github.com/charmbracelet/bubbletea).\n\n---\n\n\u003e The rest of this README is the operations manual — read on if you want the full feature surface, every keybinding, and configuration details.\n\n## Features\n\n- **27 built-in resource types + CRD support** -- dynamic discovery of Custom Resources at startup, across Cluster / Workloads / Network / Config / Storage / RBAC / Autoscaling / Helm categories. The Helm category only registers when the `helm` CLI is on `PATH`\n- **Real-time Watch updates** -- resources refresh automatically via Kubernetes Watch API\n- **Vim-style navigation** -- `j`/`k`, `u`/`d` page scroll, `gg`/`G`, `/` search\n- **3-panel lazygit-style layout** -- numbered sidebar, list, and detail panels with scroll indicator\n- **Drill-down navigation** -- Deployment / DaemonSet / StatefulSet / Job → Pods → Containers; CronJob → Jobs; HPA → target workload; PVC → mounting Pods; PDB → protected Pods; Helm Release → each native K8s object the chart deployed\n- **Relatives tab — Lens-style navigation** -- every detail panel (except Namespaces) lists the resource's navigable references (owners, selected pods, scaleTargetRef, mounted-by pods, ...). `Enter` drills into the cursor's ref — the panel re-renders showing *that* resource's Relatives, building a chain (Deployment → Pod → ConfigMap → consumer Pods, ...). `Esc` pops one level. `Space` opens a breadcrumb popup so you can jump panels 1+2 back to any chain ancestor (confirms first). Tab label shows `Relatives N` at depth\u003e1. `Y` opens the YAML of whichever entry the cursor is on. Cycle detection blocks revisiting an ancestor; fetch failures toast and stay put. 26 of 27 resource kinds covered — ConfigMaps / Secrets / ServiceAccounts surface *reverse* refs (which Pods use me, which RoleBindings name this SA as a subject, ...); Helm releases surface their `Deployed Resources` so each chart-deployed K8s object is one drill away\n- **Helm releases (when `helm` is on `PATH`)** -- a dedicated `Helm \u003e Releases` sidebar category lists every release in the cluster (`helm list -A` polled every 3s; no Helm watch API). Panel 2 columns: `NAME / NAMESPACE / CHART / APP VER / REV / STATUS / UPDATED`. Press `Space` on a release row to open a doc menu (Manifest / Creator Notes / User Values / Merged Values / Hooks); pick one with `Enter` to fetch via `helm get ...` and view the result in the YAML popup. The menu stays open behind the YAML so consecutive docs flow without re-opening. Panel 3 carries a `History` tab in place of Events — table view of every revision (REV / STATUS / DATE / CHART / DESCRIPTION) with the current deployed rev marked `●`. `Space` on a non-current row asks to roll back; confirm shows the exact `helm rollback` command and runs it asynchronously, with the result surfaced as a toast. Helm-managed K8s objects (label `app.kubernetes.io/managed-by: Helm` or annotation `meta.helm.sh/release-name`) are marked with a `` glyph in panel 2 and block `E` (kubectl edit) with a \"Helm-managed (read-only)\" toast — use `helm upgrade` / `rollback` instead. Press `.` on any non-Releases list to hide all helm-managed objects (panel 2 bottom-left always shows the `.: toggle helm` hint)\n- **YAML popup (`Y`)** -- raw `kubectl get -o yaml` of the selected resource in a full-screen overlay with `j/k/u/d/gg/G` scroll, `/` search (`n`/`N` step through matches with full-row highlight), `y` to copy the full YAML to your clipboard, and `E` to dispatch `kubectl edit` directly from the popup. YAML lives in the popup, not the detail panel, so vertical layout no longer wraps long YAML lines awkwardly\n- **Pod log streaming with auto-follow** -- multi-container support with `\u003ccontainer\u003e|\u003clog\u003e` format; the Logs tab sticks to the tail by default. When follow is active the `[Logs]` tab label renders in green (Status.Running color). Scroll up (`k`/`↑`/`u`/`gg`) to pause and read history; press `G` to catch up and resume following\n- **Aggregate logs for all workload kinds** -- selecting a workload row streams logs from **every Pod** the workload manages into a single Logs tab. Lines are prefixed `\u003cpod-hash\u003e│\u003ccontainer\u003e│\u003ctext\u003e` with each segment in its own stable color, so during a rollout you can spot at a glance which pod is throwing errors without drill-down. Covers Deployment (current ReplicaSet, falls back to selector on RBAC miss), StatefulSet, DaemonSet, Job, ReplicaSet, CronJob (across all retained Jobs). Pod churn: stream snapshots at row-select; re-select the row to refresh\n- **Aggregate child events for workload kinds** -- the Events tab on a workload row merges events from the workload AND its child Pods, sorted newest first. The Object column (\"`Pod/web-abc-xyz`\" vs \"`Deployment/web`\") names each event's source so the chain is visible inline. CronJob is 3-tier: CronJob's own events + every owned Job's events + every Pod's events, so \"why did last night's cron fail\" reads from one tab instead of `kubectl describe` × N\n- **Conditions tab** -- new detail-panel tab showing `.status.conditions` as a `TYPE / STATUS / REASON / MESSAGE / AGE` table (same as `kubectl describe`'s Conditions section). Status `False` rows highlighted red. Appears for kinds that populate conditions (Pod / Node / PVC / Deployment / StatefulSet / DaemonSet / Job / HPA / Ingress); hidden for kinds without (ConfigMap, Secret, Service, etc.). Critical when events have expired past TTL — conditions reflect *current* state, events reflect *recent* state\n- **Edit \u0026 shell exec via embedded PTY** -- `E` runs `kubectl edit` and `S` runs `kubectl exec -it -- /bin/sh`, both inside an in-app virtual terminal so the editor and shell session never touch the host terminal scrollback. Editor honors `$KUBE_EDITOR` / `$EDITOR` (or `config.yaml editor`)\n- **KM8erm internal terminal** -- `Alt+t` toggles an embedded shell (login shell with full env / cwd) inside km8 — like `ssh localhost` in a popup. Run `kubectl apply -f`, `helm`, anything you'd normally drop out of km8 to do. The shell is **persistent**: pressing `Alt+t` while the popup is visible hides it without killing the shell; pressing it again reattaches (cwd, history, env, background jobs all preserved). A `KM8erm` chip on the right of the status bar shows when the shell is alive in the background. Independent of `kubectl edit` / `kubectl exec` — you can keep KM8erm running while editing a resource or exec'ing into a container in a separate popup\n- **PTY popup borders signal kind at a glance** -- KM8erm is orange, `kubectl exec` is green, `kubectl edit` is sky blue. Useful when KM8erm is hidden behind a transient exec/edit popup\n- **PTY scrollback** -- 10k-line history for all PTY popups (KM8erm, shell exec, edit). `PgUp` / `PgDn` page, `Home` / `End` jump to top / live. Disabled in alt-screen apps (vim, less, htop) so they keep their own paging\n- **Colored Pod status** -- `Running` green, `Pending` yellow, `CrashLoopBackOff` / `ImagePullBackOff` / `OOMKilled` red, `Terminating` gray. STATUS column shows the kubectl-equivalent reason, not raw `Pod.Status.Phase`\n- **Per-container colored log labels** -- multi-container pods are visually distinguishable line-by-line; stable color per container name\n- **Resource deletion** -- `D` (uppercase, both as a hotkey and via the `Space` menu) with confirmation dialog\n- **Search/filter** -- `/` to search in the sidebar and table panels, and in the namespace/context picker popups. Sidebar search also matches category names (e.g. \"cluster\" expands the Cluster category). Search clears automatically when focus moves to another panel — selection persists, the filter doesn't\n- **Clipboard copy (`y`)** -- copies the focused panel's content via OSC 52 (works through tmux/SSH, no `xclip`/`pbcopy` required). Inside the App Log popup (`!`), `y` copies the full log; inside the YAML popup, `y` copies the full YAML\n- **Toast notifications with levels** -- info-level (1s sky-blue) for confirmations like \"Copied!\"; warning-level (2s peach with `󰀦`) for blocked actions like Relatives cycle detection or drill failures\n- **Namespace and context switching** -- `N` for namespace, `C` for context (uppercase — trigger keys are uppercase to avoid mis-triggering while typing search queries)\n- **Session-local context** -- switching context in km8 doesn't touch `~/.kube/config`. Run `kubectl` in another terminal in parallel without interference\n- **Panel-aware selection styling** -- the focused panel's cursor row gets a bright reverse-video highlight; the *unfocused* panel's selected row keeps a softer bg + bold so you can always see which resource each panel \"remembers\" while you work in another. Pod STATUS uses a darker palette variant when it lands on a light-bg highlighted row so the green/yellow/red stays readable\n- **Detail tabs** -- `Relatives` / `Logs` (Pods + Deployments) / `Events` / `Conditions` (for kinds that populate them) for K8s resources; `Relatives` / `History` for Helm releases. Relatives is always first when present, so `Space` jumps land on the same tab you came from. Panel 3 has no `/` search — cursor tabs (Relatives / History) don't tolerate row filtering, and Logs read better as a plain follow-tail view; use `Y` + your editor to grep large content\n- **Long values wrap, never truncate** -- applies to YAML, Events, and Logs; wrap points reflow on panel resize\n- **Panel expand** -- `=`/`-` to toggle full-screen Table or Detail panel\n- **Theme system** -- drop a `theme.yaml` into config directory to override colors\n- **Help \u0026 App Log overlays** -- `?` / `!` popup on top of main UI\n- **Error notifications** -- status bar badge + status line message\n- **Crash logging** -- panics written to the km8 log directory\n- **Audit logging** -- every `kubectl edit` and `kubectl delete` recorded to `audit-*.log`\n\n## Key Bindings\n\n### Primary interaction: four keys\n\nMost of the time you're driving km8 with just four keys:\n\n| Key | Behavior |\n|---|---|\n| **`Tab`** | **Panel** — move focus to the next panel (or use `1` / `2` / `3` to jump directly) |\n| **`Enter`** | **Into** — drill into the selected resource / focus the next panel / commit a popup choice |\n| **`Space`** | **Menu** — open a contextual popup wherever focus is: sidebar cheatsheet (panel 1), per-row action menu / container Shell menu / empty-list hint (panel 2), Logs / Events / Relatives-drill / Relatives-breadcrumb / History rollback (panel 3 by tab). Also closes any open popup (mirror open) |\n| **`Esc`** | **Back** — pop one drill level / close any popup |\n\nWhere a contextual menu exists, `Space` is enough — you don't need to memorize the per-action keys. The sidebar (panel 1) doesn't have an action menu because every row is itself a navigation target; `j`/`k` to move, `Enter` to focus into the table.\n\nTab navigation also responds to `h`/`l` (or `[`/`]`) for switching panel 3 tabs.\n\n### Accelerators — cursor + power triggers\n\n```\n cursor      j k        u d        gg G        / (search inside current panel)\n trigger     Y YAML     E edit     S shell     D delete          N ns    C context\n expand      z          z toggles full-screen on current panel\n helm        .          . toggles helm-managed visibility on panel 2\n```\n\nTrigger keys are deliberately uppercase to avoid misfiring while typing in a `/` search field.\n\n### Global\n\n| Key | Action |\n|---|---|\n| `Alt+t` | Toggle KM8erm (spawn / show / hide; shell stays alive across hide) |\n| `y` | Copy focused panel content to clipboard (OSC 52) |\n| `!` | App log |\n| `?` | Help |\n| `q` | Quit km8 (asks for confirmation) |\n| `Ctrl+C` | Quit km8 immediately (no confirm) |\n\n### Panel 2 context menu (`Space` on any row)\n\nPer-row menu with resource-aware items — `Y` YAML / `E` Edit / `S` Shell / `D` Delete. Use `j`/`k` + `Enter` or hit the letter directly. Helm-managed rows hide `E`/`D` (Rule A: read-only — edits would be overwritten by `helm upgrade`/`rollback`); resources without containers hide `S`.\n\nTwo cursor-only entries are appended for navigation discoverability (no single-letter hotkey, reached via `j`/`k` + `Enter`):\n- `Enter ↘` — drill into the row's children (`pods` / `containers` / `jobs` / etc., per kind). Same action as pressing `Enter` on the row directly.\n- `Esc ↖` — back to the parent list. Only appears when you're already inside a drill chain (e.g. viewing a Deployment's Pods, or a Pod's containers). Same action as pressing `Esc` directly.\n\n### Helm-specific\n\n| Key | Where | Action |\n|---|---|---|\n| `Space` | Panel 2, Release row | Open the doc menu — pick `Manifest` / `Notes` / `User Values` / `Merged Values` / `Hooks` |\n| `Space` | Panel 3, History tab, non-current row | Roll back to that revision (confirm popup shows the exact `helm rollback` command) |\n| `.` | Any non-Releases panel 2 list | Toggle visibility of helm-managed objects |\n\n### PTY popups (KM8erm, edit, shell exec)\n\n| Key | Action |\n|---|---|\n| `PgUp` / `PgDn` | Scroll history by one page |\n| `Home` / `End` | Jump to top of history / back to live |\n| Any other key | Snap back to live, key forwards to subprocess |\n\nScrollback is disabled when a full-screen app (vim, less, htop) takes over the PTY via alt-screen; those keys forward to the app instead so it keeps its own paging.\n\n## Editing Resources\n\nPressing `E` on a resource (or picking `Edit` from the `Space` menu) runs **`kubectl edit \u003ckind\u003e/\u003cname\u003e -n \u003cns\u003e --context \u003cctx\u003e`** inside an embedded PTY popup. Behavior is identical to running the same command in a terminal: strategic merge patch, `resourceVersion` conflict detection, no `last-applied-configuration` annotation side-effect.\n\nThe editor is resolved by kubectl itself in this priority order:\n\n1. `$KUBE_EDITOR` (km8 sets this if `editor` is configured in `config.yaml`)\n2. `$EDITOR`\n3. `vi` (Linux/macOS) or `notepad` (Windows)\n\nWhen the editor exits, the popup closes and the table refreshes via the resource watch — no manual reload needed.\n\n### Why an embedded PTY?\n\nEarlier versions of km8 ran the editor through `tea.ExecProcess` and applied the result with `kubectl apply -f`. That approach leaked kubectl's confirmation messages into the host terminal's scrollback after quitting km8, and the apply-vs-edit semantic mismatch surprised users coming from `kubectl edit`. The PTY popup keeps everything inside km8 and uses `kubectl edit` directly so behavior is exactly what `kubectl edit` users expect.\n\n### Note for nvim users\n\nIf your nvim setup has noticeable shutdown lag inside the popup (LSP attach/detach, plugin teardown), set `editor: \"nvim --noplugin\"` in `config.yaml` to skip plugin loading for the kubectl-edit session only. Your everyday `nvim` is unaffected.\n\n## Context Isolation\n\nkm8 maintains its own **session-local** context. Switching context with `C` inside km8 **does not** modify `~/.kube/config` or the `KUBECONFIG` environment variable in any other terminal.\n\nAll `kubectl` subprocesses spawned by km8 (edit, delete, shell exec) receive an explicit `--context \u003cname\u003e` flag, so they always target the cluster km8 is showing — regardless of what `kubectl`'s default context is set to.\n\nThis means you can safely run km8 in one terminal while using `kubectl` in another without either session interfering with the other's context.\n\n## Configuration\n\nConfig files are in the OS-appropriate config directory. Set `XDG_CONFIG_HOME` to override on any platform:\n\n| OS | Default Path |\n|---|---|\n| Linux | `$XDG_CONFIG_HOME/km8/` or `~/.config/km8/` |\n| macOS | `~/Library/Application Support/km8/` |\n| Windows | `%APPDATA%/km8/` |\n\nLogs (crash and audit) are written to the `logs/` subdirectory of the config directory.\n\n### config.yaml\n\n```yaml\ndefault_context: \"\"      # kubeconfig context (default: current-context)\ndefault_namespace: \"\"    # namespace filter (default: all namespaces)\neditor: \"\"               # exposed to kubectl as $KUBE_EDITOR\n                         # (default: kubectl falls back to $EDITOR → vi / notepad)\n```\n\n### theme.yaml\n\nDrop a `theme.yaml` to customize colors. Only override what you need -- unspecified fields keep defaults.\n\n```yaml\nsidebar:\n  background: \"\"                       # empty = terminal transparent\n  foreground: \"#cdd6f4\"\n  selected_bg: \"#bac2de\"               # focused-panel cursor bg (reverse-video)\n  selected_fg: \"#1e1e2e\"\n  unfocused_selected_bg: \"#353648\"     # other-panel \"remembered\" selection bg\n  unfocused_selected_fg: \"#cdd6f4\"\n  category_fg: \"#89b4fa\"\n\ntable:\n  header_bg: \"#313244\"\n  header_fg: \"#89b4fa\"\n  row_fg: \"#cdd6f4\"\n  selected_row_bg: \"#bac2de\"           # focused-panel cursor bg (reverse-video)\n  selected_row_fg: \"#1e1e2e\"\n  unfocused_selected_row_bg: \"#353648\" # other-panel \"remembered\" selection bg\n  unfocused_selected_row_fg: \"#cdd6f4\"\n  alternating_bg: \"\"\n\ndetail:\n  border_color: \"#585b70\"\n  label_fg: \"#89b4fa\"\n  value_fg: \"#cdd6f4\"\n  tab_active_bg: \"#45475a\"\n  tab_active_fg: \"#cdd6f4\"\n  tab_inactive_fg: \"#6c7086\"\n\nstatus_bar:\n  background: \"#181825\"\n  foreground: \"#cdd6f4\"\n  cluster_fg: \"#a6e3a1\"\n  namespace_fg: \"#f9e2af\"\n  context_fg: \"#89b4fa\"\n\nstatus_line:\n  background: \"#313244\"\n  foreground: \"#a6adc8\"\n\nstatus:\n  running: \"#a6e3a1\"\n  pending: \"#f9e2af\"\n  error: \"#f38ba8\"\n  unknown: \"#6c7086\"\n```\n\n## Requirements\n\n- **kubectl** on `$PATH` (for edit, delete, and shell exec)\n- A valid **kubeconfig** (`~/.kube/config` or `$KUBECONFIG`)\n- A running Kubernetes cluster\n\n## License\n\n[GPL-3.0](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvulcanshen%2Fkm8","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvulcanshen%2Fkm8","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvulcanshen%2Fkm8/lists"}