jesseduffield/lazygit · critical
invalid diff renderer type: %s
Error message
invalid diff renderer type: %s
What it means
A panic (not a returned error) in pkg/config/diff_renderer_config_manager.go: DiffRendererConfig.getType maps the config's diff renderer 'type' string to an enum via a switch with cases 'stdinFilter' (and empty string), 'extDiff', and 'rawGit'. Any other value falls out of the switch and hits panic, crashing lazygit at startup or on first diff render.
Source
Thrown at pkg/config/diff_renderer_config_manager.go:52
// Guard against the diff renderer index being out of range, which can happen if the user
// has removed diff renderers from their config file while lazygit is running.
if self.diffRendererIndex >= len(diffRenderers) {
self.diffRendererIndex = 0
}
return &diffRenderers[self.diffRendererIndex]
}
func (self *DiffRendererConfig) getType() DiffRendererType {
switch self.Type {
case "stdinFilter", "":
return DiffRendererType_StdinFilter
case "extDiff":
return DiffRendererType_ExtDiff
case "rawGit":
return DiffRendererType_RawGit
}
panic("invalid diff renderer type: " + self.Type)
}
func (self *DiffRendererConfigManager) GetDiffRendererType() DiffRendererType {
currentDiffRendererConfig := self.currentDiffRendererConfig()
if currentDiffRendererConfig == nil {
return DiffRendererType_RawGit
}
return currentDiffRendererConfig.getType()
}
func (self *DiffRendererConfigManager) GetStdinFilterCommand(width int) string {
currentDiffRendererConfig := self.currentDiffRendererConfig()
if currentDiffRendererConfig == nil || currentDiffRendererConfig.getType() != DiffRendererType_StdinFilter {
return ""
}
templateValues := map[string]string{
"columnWidth": strconv.Itoa(width/2 - 6),View on GitHub (pinned to c477a2959b)
Solutions
- Fix config.yml: set the diff renderer type to one of stdinFilter, extDiff, or rawGit (or delete the field to default to stdinFilter)
- Delete the whole diff renderer entry to fall back to DiffRendererType_RawGit when no config is present
- Never rely on recovery — this is a panic, so validate the value before it reaches lazygit
Example fix
# before diffRenderers: - type: 'stdin-filter' # after diffRenderers: - type: 'stdinFilter'
Defensive patterns
Strategy: validation
Validate before calling
# yq validation before launching lazygit yq '.diffRenderers[].type? | select(. != "stdinFilter" and . != "extDiff" and . != "rawGit" and . != null)' ~/.config/lazygit/config.yml
Type guard
func validDiffRendererType(t string) bool {
switch t {
case "stdinFilter", "", "extDiff", "rawGit":
return true
}
return false
} Prevention
- This is a panic, not an error return — validate the config value before lazygit loads it
- Copy diff renderer config blocks only from docs matching your installed version
When it happens
Trigger: Setting a diff renderer entry's Type to anything else: 'stdin-filter', 'external', 'rawgit', or a typo. getType is called through GetDiffRendererType the first time lazygit resolves the active renderer.
Common situations: Typos in config.yml; using a renderer type from incompatible documentation or a different lazygit version; leaving a stray experimental value behind after downgrading.
Related errors
- gui.sidePanels: a side panel must have at least one tab.
- gui.sidePanels must not be empty.
- gui.spinner.frames must not be empty.
- All gui.spinner.frames entries must have the same width.
- git.diffRenderers: 'command' must be specified for diff rend
AI-assisted analysis of jesseduffield/lazygit@c477a2959b (2026-08-15).
Data as JSON: /api/errors/27addd56a967a7c1.
Report an issue: GitHub.