Technology

k10s Loads Kubernetes Data Only When You Need It

Martin HollowayPublished 42m ago3 min readBased on 1 source
Reading level
k10s Loads Kubernetes Data Only When You Need It
source:github.com

k10s, a terminal client for Kubernetes, starts with zero watches and starts each informer only the first time that kind is viewed. The behavior is documented in the project repository published Oct. 8, 2026. k10s repository

Startup stays quiet. No watches are registered until the operator navigates to a resource type. In Kubernetes terms, a watch is a standing subscription for changes, an informer is the local cache that holds those changes, and a kind is a type of object such as pods. For people who manage large or heavily shared clusters, that matters because each watch holds a connection, memory and permission checks on the API server, the central control point.

The client reads the same kubeconfig as kubectl, the standard command-line tool. It uses $KUBECONFIG when set and falls back to ~/.kube/config. When no cluster is reachable, it shows a No cluster panel with retry and context options rather than exiting.

Interaction is built around discoverability and pointer input. Actions for the selected object are listed in their own pane. You can click an action directly or press the letter shown next to it, so nothing is hidden behind memorized keys. Mouse support includes clicking a row, pane, [zoom] button and namespace selector, plus scrolling the table.

Search is unified. A single box opened with ctrl+p searches resource kinds and objects together. That avoids the separate kind-first, object-second flow common in other terminal tools. k10s repository

For extension, k10s provides AI assistance via ctrl+a that injects the current context, namespace, kind and selected object into the prompt. It also supports k9s-style command plugins configured in ~/.k10s/plugins.yaml. Those plugins receive the selected object, namespace, context and column values, which makes it possible to wire external commands to the row under the cursor without custom binary builds.

Installation is kept low friction. On macOS and Linux on amd64 and arm64, the two common processor architectures, an install script at https://p10node.com/k10s/install.sh verifies sha256 and installs to /usr/local/bin or ~/.local/bin. A Go toolchain install is available via go install github.com/p10node/k10s@latest. Once running, the client self-updates through the /update command, which installs the newest release over the running binary with checksum verification.

Evaluation does not require a cluster. The repository ships an opt-in offline demo backend with sample data including a CrashLoopBackOff, a container stuck failing and restarting, runnable via go run . demo after cloning. In k10s, demo is a context, a saved connection entry, not a mode. k10s demo opens on it, /demo switches to it, :ctx lists it as k10s demo · sample data, and the header displays a DEMO marker while it is active.

The broader context here is the accumulated cost of cluster observability. Informers are efficient once running, but broad watch fan-out at launch can be slow and noisy, especially against constrained or distant API servers. Lazy per-kind startup trades immediate completeness for faster launch and less initial load, at the price of a short fetch on first visit to an uncached kind.

In my view, the more interesting bet is on legibility. Terminal tools for Kubernetes tend to reward long-term users who have internalized keymaps, while punishing occasional users. A visible action pane, unified ctrl+p search, and full mouse handling lower that entry cost. The AI hook follows the same logic, since injecting context, namespace, kind and object automatically removes the copy-and-paste work that makes generic chatbots clumsy for incident triage. Worth flagging alongside that convenience is the usual caution around granting AI tooling and external plugins access to live object data, particularly in production contexts where output can include secrets or customer identifiers.