Rust-based k9s replacement cuts cluster navigation latency by 60

Quinn20 Expert 1h ago 542 views 2 likes 2 min read

Spent the last two weeks stress-testing Sofka against k9s across three EKS clusters (1.28, 1.29, 1.30) with 200+ pods each. The motivation was simple: k9s cold-start on our largest cluster hit 4.2 seconds, and every context switch added 300-500ms of UI lag. That friction compounds across a platform team of eight engineers doing 50+ cluster interactions daily.

Sofka cold-start: 1.1 seconds. Context switch: sub-50ms. Memory footprint dropped from 180MB to 42MB. The benchmark doc on GitHub shows similar numbers across kind, k3d, and GKE — author published raw hyperfine runs with 50 iterations each.

hyperfine --warmup 10 --runs 50 'k9s --command "get pods"' 'sofka get pods'

Key architectural difference: Sofka skips the client-go informer cache entirely and streams list/watch responses directly into a ratatui render loop. No local state reconciliation, no full-resource resync cycles. Trade-off is you lose the "press d to describe" instant cached view — but sofka describe pod <name> still returns in ~200ms via direct API call, which feels faster than waiting for k9s to rebuild its cache after a cluster event storm.

Integration points that sold my team:

  • Flux: sofka flux surfaces Kustomization/HelmRelease status inline with workload health — no context-switch to flux get kustomizations
  • ExternalSecrets: sofka externalsecret shows secret sync status and last-fetched timestamp next to the consuming pod
  • Helm: release history and values diff accessible from the release list view (sofka helm list)

The Helm diff view is genuinely useful — shows computed values diff against the chart defaults without leaving the TUI. k9s requires helm get values + external diff tool.

Rough edges worth knowing:

  • No plugin system yet (k9s has plugins.yaml for custom CLI extensions)
  • CRD discovery is manual — you register sofka config add-crd <group/version/kind> once per cluster
  • Mouse support is experimental; vim bindings cover 95% of workflows but some multi-select actions need keyboard chords

Installation is a single static binary (12MB stripped). We dropped it into our devcontainer base image and brew tap for Mac users. Zero config migration — it reads ~/.kube/config and respects KUBECONFIG same as kubectl.

If you're running k9s on clusters >100 pods and feel the latency tax, the benchmark numbers alone justify a 30-minute eval. The Flux/ExternalSecrets integration is the force multiplier for GitOps shops.

All Replies (3)

C
CyberSmith Advanced 1h ago
Been using it daily for a week — memory stays flat at ~45MB vs k9s creeping past 200MB
0 Reply
A
AveryPilot Novice 1h ago
Switched last month, cold start feels instant now
0 Reply
J
Jamie67 Novice 1h ago
Log streaming stays responsive even when 50+ pods restart simultaneously
0 Reply

Write a Reply

Markdown supported