g kubectl get pods -n maple-staging by hand. So I built a browser-based visualizer instead."
---

```bash
kubectl get pods
```

```
No resources found in default namespace.
```

Right. Namespace. Which namespace was it?

```bash
kubectl get pods -n maple-staging
```

Okay, there it is. Now I want to check the same thing in another terminal but I've already forgotten whether it was `maple-staging` or `maple-prod`. I scroll up. I copy. I paste. I add `-n` again.

Then I want to check a rollout.

```bash
kubectl rollout status deploymet/quest-engine -n maple-staging
```

```
error: the server doesn't have a resource type "deploymet"
```

Typo. Fix. Run again. Wait. Is it `deployment` or `deployments`? I always get this wrong.

Twenty minutes in, I have six terminal tabs open, three of them showing the same namespace, and I still don't know if the rollout finished.

I tried k9s. It's genuinely good but I kept thinking: I want to build this myself, and I want it in a browser.

So I did.

---

![Home page](/images/kubecmds-viz/05-home.png)

---

## The problem with "just use kubectl"

470 nodes is not a list problem. It's a mental model problem.

You can `kubectl get all -A` and get 800 lines of text. Every resource is there. Nothing is connected. You still don't know why the staging deployment keeps restarting, which secrets istiod actually depends on, or what's sharing a ServiceAccount with something it shouldn't.

The real question isn't "what exists." It's "how does this connect to that."

---

## The graph

The Universe view renders the entire cluster as a force-directed graph — every namespace, every deployment, every service, every secret, every binding — using WebGL.

![K8s Universe — 470 resources across all namespaces](/images/kubecmds-viz/01-universe-overview.png)

Click a namespace. The graph focuses. The sidebar fills with resource counts: 4 Deployments, 13 ConfigMaps, 6 Secrets, 6 ServiceAccounts.

![K8s Universe — namespace focused view](/images/kubecmds-viz/02-universe-target-ns.png)

The edges tell the real story. Orange edges are dependency relationships — uses-configmap, uses-secret, exposes. Grey edges are ownership. At 3.0x zoom inside istio-system, you see exactly why istiod has 47 connections. That's not something you find in a log.

---

## The terminal

The graph shows structure. The terminal shows state.

![K8s Terminal — multiple resource windows side by side](/images/kubecmds-viz/03-terminal.png)

Select a namespace on the left. Resources load instantly — 13 Deployments, 21 Pods, 3 CronJobs. Click any resource. A window opens: Logs, Previous Logs, Details, YAML, Exec Shell, Delete.

Open multiple windows side by side. Check quest-engine logs while reading replay-pipeline's YAML. kubectl can do this but you need 4 terminal panes and 4 commands to get there.

---

## The part I didn't expect to matter

Snapshot mode was an afterthought. Export the cluster to YAML files, read them offline instead of hitting kubectl live.

Then I used it in a meeting to walk through a production incident. No cluster access needed. No VPN. I zipped the export, sent it to a teammate who doesn't touch terminals, and they opened it in a browser and navigated it themselves.

That's when I realized the actual use case wasn't "offline backup." It was making Kubernetes readable to people who aren't paid to memorize its CLI.

![Export in progress — 23 namespaces, 4 parallel batches](/images/kubecmds-viz/04-export.png)

The export runs `kubectl get` across all resource types, in parallel, across all namespaces. 23 namespaces. 4 parallel batches each. When it finishes, the app switches to Snapshot mode automatically.

---

## What it doesn't do

No CPU/memory metrics. No multi-cluster switching. No RBAC management.

These aren't missing features. This tool is for understanding a cluster, not operating one. k9s is better for power users who live in a terminal. kubecmds-viz is for the moment you need to explain what's running to someone who doesn't.

---

The source is on [GitHub](https://github.com/jialinhuang00/kubevisualizer).
