Performance
"Light" is easy to claim. Here's what Sternpost uses on clusters of 300 to 10,000 pods, next to Headlamp, Freelens and k9s, measured the same way on the same Mac.
591 MB
with 10,100 pods in the list, every one of them live.
0
polling requests a minute. Every list is a watch; nothing else is sent.
1.1 %
of a CPU core while nothing changes, at 10,100 pods.
Side by side.
Four clients, one fake cluster at four sizes. Each sits on the pods list for all namespaces, idle for a minute, then while the cluster changes ten times a second.
- Sternpost591 MB
- Headlamp292 MB1,000 pods, not live
- Freelens1,024 MB
- k9s1,113 MB
- Sternpost701 MB
- Headlamp584 MB1,000 pods, not live
- Freelens1,271 MB
- k9s1,169 MB
| Measure | Sternpostdev build after 0.22.0 | Headlamp0.45.0 | Freelens1.10.3 | k9s0.51.0 |
|---|---|---|---|---|
| Pods the list shows | 10,000 | 1,000 | 10,100 | 10,100 |
| List stays live | yes | no | yes | yes |
| Memory, idle | 591 MB | 292 MB | 1,024 MB | 1,113 MB |
| Memory, changing | 701 MB | 584 MB | 1,271 MB | 1,169 MB |
| CPU, idle | 1.1 % | 3.0 % | 3.1 % | 50.3 % |
| CPU, changing | 26.1 % | 2.6 % | 21.4 % | 55.0 % |
| Polling, requests/min | 0 | 35 | 8 | 4 |
| Launch → all pods fetched | 4.3 s | never | 7.0 s | 4.3 s |
| Launch → pods on screen | 4.7 s | 2.5 s | 8.2 s | 5.2 s |
Sternpost holds all 10,100 pods; its tables stop at 10,000 rows and say so.
Half the memory on a big cluster.
Of the clients that show every pod and keep the list live, Sternpost uses the least memory from 5,000 pods up. At 10,000 it's 591 MB; Freelens needs 1 GB and k9s 1.1 GB. It watches the fourteen kinds you search for, not everything, and memory grows by about 15 MB per 1,000 pods.
Nothing polls.
Sternpost opens its watches and then sends nothing else, idle or busy. k9s makes 4 requests a minute, Freelens 8, Headlamp 35. One client is nothing; a team's worth, all day, on the cluster everyone shares, is load and audit-log noise.
Quiet when nothing happens.
Around 1 % of a core at every size: lists change when the cluster does, so with nothing changing there's next to nothing to do. k9s, the lightest client on a small cluster, uses half a core to sit still at 10,000 pods.
Read Headlamp's column with care.
From 2,000 pods up, Headlamp lists the first 1,000 and stops, and the list isn't live. Its memory is low and its list appears first because it holds less. Below 1,000 pods it shows everything, live.
Where it isn't the lightest.
- On a small cluster, k9s: 81 MB to Sternpost's 307 at 300 pods, and still a little lighter at 2,100. A terminal app doesn't carry a browser engine.
- The first 300 MB. Sternpost is an Electron app, and a Chromium window has a floor before your cluster costs anything.
- CPU on a very big, very busy cluster: 26 % of a core at 10,000 pods and ten changes a second, more than Freelens. Being worked on.
How it was measured.
A KWOK cluster: a real API server with fake nodes, so lists and watches behave as they would on a real one, from 300 pods and 1,900 objects to 10,100 pods and 65,000. Fresh profile per run. Memory is what Activity Monitor shows, summed over all of an app's processes; a proxy between the app and the cluster counts every request. Apple M3 Pro, 36 GB, macOS 14.3. Medians of three runs, the clients taking turns.
macOS only so far. Lens and Aptakube aren't in the tables yet: both need someone to sign in before they'll open a cluster.