derailed/k9s · error
no describer for %q
Error message
no describer for %q
What it means
Tree.Describe looks up the meta/DAO for a GVR and requires dao.Describer to serve describe text from a tree browser. If the accessor lacks the interface, the tree describe action fails with the offending GVR.
Source
Thrown at internal/model/tree.go:144
func (t *Tree) Empty() bool {
return t.root.IsLeaf()
}
// Peek returns model data.
func (t *Tree) Peek() *xray.TreeNode {
return t.root
}
// Describe describes a given resource.
func (t *Tree) Describe(ctx context.Context, gvr *client.GVR, path string) (string, error) {
meta, err := t.getMeta(ctx, gvr)
if err != nil {
return "", err
}
desc, ok := meta.DAO.(dao.Describer)
if !ok {
return "", fmt.Errorf("no describer for %q", meta.DAO.GVR())
}
return desc.Describe(path)
}
// ToYAML returns a resource yaml.
func (t *Tree) ToYAML(ctx context.Context, gvr *client.GVR, path string) (string, error) {
meta, err := t.getMeta(ctx, gvr)
if err != nil {
return "", err
}
desc, ok := meta.DAO.(dao.Describer)
if !ok {
return "", fmt.Errorf("no describer for %q", meta.DAO.GVR())
}
return desc.ToYAML(path, false)View on GitHub (pinned to 2d3ccc6ba2)
Solutions
- Describe the same resource from its flat list view, which may route to a different accessor
- Ensure the accessor for that GVR implements dao.Describer (embed dao.Resource)
- Use kubectl describe <gvr> <name> as an external fallback
Defensive patterns
Strategy: type-guard
Type guard
func describerFor(accessor dao.Accessor) (dao.Describer, bool) {
d, ok := accessor.(dao.Describer)
return d, ok
} Try / catch
out, err := t.Describe(ctx, gvr, path)
if err != nil && strings.Contains(err.Error(), "no describer for") {
out, err = kubectlDescribeFallback(gvr, path) // shell out or refuse with a hint
}
if err != nil { return "", err } Prevention
- Validate tree node GVRs against registered accessors when building custom tree views
- Keep a capability matrix (GVR -> interfaces) asserted in tests
When it happens
Trigger: Triggering describe on a tree node whose GVR resolves to an accessor without Describe — custom resources mapped to bare accessors, or tree views configured for resources without describe support.
Common situations: Browsing resource graphs/trees (references between objects) and describing a node for an exotic or custom resource; plugins registering DAOs without describe.
Related errors
- no describer for %q
- no describer for %q
- resource %s is not Loggable
- no nuker for %q
- no tree renderer defined for this resource
AI-assisted analysis of derailed/k9s@2d3ccc6ba2 (2026-08-15).
Data as JSON: /api/errors/54066d3b7c85297d.
Report an issue: GitHub.