jesseduffield/lazygit · error

git.diffRenderers: 'command' must be specified for diff rend

Error message

git.diffRenderers: 'command' must be specified for diff renderer type 'stdinFilter'.

What it means

Validation error from validateDiffRenderers (user_config_validation.go:118). A diff renderer entry with type 'stdinFilter' (the default when type is empty) must specify 'command' — the external filter program that reads a git diff on stdin and writes the rendered output. Without a command there is nothing to execute, so config load fails.

Source

Thrown at pkg/config/user_config_validation.go:118

func validateSpinner(spinner SpinnerConfig) error {
	if len(spinner.Frames) == 0 {
		return errors.New("gui.spinner.frames must not be empty.")
	}
	firstWidth := utils.StringWidth(spinner.Frames[0])
	if lo.SomeBy(spinner.Frames, func(frame string) bool {
		return utils.StringWidth(frame) != firstWidth
	}) {
		return errors.New("All gui.spinner.frames entries must have the same width.")
	}
	return nil
}

func validateDiffRenderers(diffRenderers []DiffRendererConfig) error {
	for _, diffRenderer := range diffRenderers {
		switch diffRenderer.Type {
		case "stdinFilter", "":
			if diffRenderer.Command == "" {
				return errors.New("git.diffRenderers: 'command' must be specified for diff renderer type 'stdinFilter'.")
			}
			if len(diffRenderer.Args) > 0 {
				return errors.New("git.diffRenderers: 'args' cannot be used with diff renderer type 'stdinFilter'.")
			}
		case "extDiff":
			if len(diffRenderer.Args) > 0 {
				return errors.New("git.diffRenderers: 'args' cannot be used with diff renderer type 'extDiff'.")
			}
		case "rawGit":
			if diffRenderer.Command != "" {
				return errors.New("git.diffRenderers: 'command' cannot be used with diff renderer type 'rawGit'.")
			}
		default:
			return fmt.Errorf("git.diffRenderers: unknown type '%s'. Allowed values: stdinFilter, extDiff, rawGit", diffRenderer.Type)
		}
	}
	return nil
}

View on GitHub (pinned to c477a2959b)

Solutions

  1. Add the 'command' field naming the filter executable, e.g. command: delta
  2. Verify the executable is on PATH with 'which delta'
  3. If you wanted lazygit's raw git diff instead, set type: rawGit and remove command
  4. Check YAML indentation so command sits under the correct list item

Example fix

# before
git:
  diffRenderers:
    - type: stdinFilter

# after
git:
  diffRenderers:
    - type: stdinFilter
      command: delta
Defensive patterns

Strategy: validation

Validate before calling

function diffRendererEntryValid(e DiffRendererEntry) string | null {
    if (e.type === "stdinFilter" || e.type === "") && !e.command) return "stdinFilter needs command";
    return null;
}

Prevention

When it happens

Trigger: Adding a git.diffRenderers entry with type stdinFilter (or omitting type) and no command field, e.g. 'diffRenderers: [{type: stdinFilter}]'. Validation runs at startup before the GUI appears.

Common situations: Configuring delta/difftastic as a stdin filter and forgetting the command; YAML indentation putting command at the wrong nesting level so the field is never set.

Related errors


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