JanDeDobbeleer/oh-my-posh · error
unable to create text based on template
Error message
unable to create text based on template
What it means
After a template parses successfully, execute() runs tmpl.Execute against the template context. When execution fails (e.g. calling a method on nil, a function returning an error, index out of range at runtime) the renderer logs the cause and throws the generic 'unable to create text based on template'.
Source
Thrown at src/template/render.go:131
// Store; if another goroutine already stored an equivalent template, use theirs.
actual, _ := parsedTemplates.LoadOrStore(key, tmpl)
return actual.(*template.Template), nil
}
func (t *renderer) execute(text *Text) (string, error) {
tmpl, err := parsedTemplate(text)
if err != nil {
log.Error(err)
return "", errors.New(InvalidTemplate)
}
t.context.init(text)
err = tmpl.Execute(&t.buffer, t.context)
if err != nil {
log.Error(err)
return "", errors.New(IncorrectTemplate)
}
output := t.buffer.String()
// issue with missingkey=zero ignored for map[string]any
// https://github.com/golang/go/issues/24963
output = strings.ReplaceAll(output, "<no value>", "")
return output, nil
}
View on GitHub (pinned to 0976794618)
Solutions
- Inspect the log output immediately preceding the error for the real execution cause
- Run `oh-my-posh debug` to see which segment/template fails at runtime
- Fix function arguments in the template (types, counts, values)
- Guard risky property accesses with `if` checks or default values
- Pin/upgrade oh-my-posh if a context field changed between versions
Example fix
// before
{{ random .MaybeNilList }}
// after
{{ if .MaybeNilList }}{{ random .MaybeNilList }}{{ end }} Defensive patterns
Strategy: try-catch
Validate before calling
// pre-render check: exercise the template in debug mode oh-my-posh debug # shows the underlying execution error per segment
Try / catch
// catch and fall back to a safe static prompt
out, err := renderer.render(text)
if err != nil {
if err.Error() == "unable to create text based on template" {
out = fallbackText
}
} Prevention
- Guard nil-able properties with if checks in templates
- Match function signatures exactly (arg types/counts)
- Run `oh-my-posh debug` when changing template context usage
- Check changelogs for template context field renames when upgrading
When it happens
Trigger: A syntactically valid template whose execution panics or errors: invoking a template function with bad arguments (like random on wrong input), accessing fields of a nil pointer, wrong argument counts to funcs, or errors returned by custom funcs.
Common situations: Calling functions with invalid arguments at render time; template referencing properties absent on the segment's context in a way that errors rather than yielding <no value>; version changes that altered template context fields.
Related errors
- input must be a slice or array
- input slice or array is empty
- no valid terraform files found
- empty m_EditorVersion
- ProjectSettings/ProjectVersion.txt is missing m_EditorVersio
AI-assisted analysis of JanDeDobbeleer/oh-my-posh@0976794618 (2026-08-31).
Data as JSON: /api/errors/b96edee46753a9bc.
Report an issue: GitHub.