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

  1. Fix config.yml: set the diff renderer type to one of stdinFilter, extDiff, or rawGit (or delete the field to default to stdinFilter)
  2. Delete the whole diff renderer entry to fall back to DiffRendererType_RawGit when no config is present
  3. 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

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


AI-assisted analysis of jesseduffield/lazygit@c477a2959b (2026-08-15). Data as JSON: /api/errors/27addd56a967a7c1. Report an issue: GitHub.