Experimental native resource descriptions
Sofka can now describe Kubernetes resources using its existing connection and authentication setup, without starting a kubectl process for each request.
This is powered by deskribe, a new Rust library I built on kube-rs. It supports specialized descriptions for 36 resource kinds and a generic format for custom resources, based on Kubernetes' Go describers.
In my GKE benchmarks, descriptions took 100–200 ms with deskribe, compared with 500–1,000 ms through kubectl. Results depend on the resource, cluster, and authentication setup—not a guaranteed speedup everywhere.
Enable it
Native describe is experimental and opt-in. Kubectl remains the default.
For one session:
sofka --experimental-describeOr enable it in config.toml:
[experimental]
native_describe = trueFor YAML configuration:
experimental:
native_describe: trueThen select a resource and press d as usual. Descriptions read fresh resource data, related objects, and events. Refresh keeps the selected backend, and Helm rows still show release notes.
The configuration setting supports cluster/context overrides and :reload. The CLI flag keeps native describe enabled for the entire session, regardless of configuration overrides.
What to expect
- Custom resources use the generic native renderer.
- Resources without an available native description use kubectl, clearly labeled kubectl fallback.
- Native request errors are shown directly. If the kubectl fallback fails, it shows an error rather than cached YAML.
- Exact output compatibility across kubectl versions is still experimental. Please report missing details or unexpected output.
Treat descriptions as sensitive: service-account Secret descriptions can include tokens, just as with kubectl.
Thanks to the kube-rs contributors for making this possible. Deskribe is also available on crates.io for other Rust applications that need Kubernetes resource descriptions.
What's Changed
- fix: resolve Argo CD destination names against every kubeconfig context by @ShmuelOps in #570
- fix: include license notices in release archives by @nklmilojevic in #576
- fix: run the release license correction workflow by @nklmilojevic in #578
- fix: use Flux ownership labels for GitOps owners by @nklmilojevic in #574
- fix: preserve release download names for package managers by @nklmilojevic in #579
- chore(deps): lock file maintenance by @renovate[bot] in #569
- chore(deps): update rust dependencies by @renovate[bot] in #581
- feat: add experimental native resource descriptions by @nklmilojevic in #582
New Contributors
- @ShmuelOps made their first contribution in #570
Full Changelog: v0.27.2...v0.27.3