jesseduffield/lazygit · error

git.diffRenderers: 'args' cannot be used with diff renderer

Error message

git.diffRenderers: 'args' cannot be used with diff renderer type 'stdinFilter'.

What it means

Validation error from validateDiffRenderers (user_config_validation.go:121). A 'stdinFilter' diff renderer pipes the diff on stdin and expects no extra CLI arguments; the filter program's own options belong in the command string itself (e.g. 'delta --dark'). Supplying 'args' is rejected at config load to prevent ambiguity about how args would be appended.

Source

Thrown at pkg/config/user_config_validation.go:121

	}
	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
}

func validateEnum(name string, value string, allowedValues []string) error {
	if slices.Contains(allowedValues, value) {

View on GitHub (pinned to c477a2959b)

Solutions

  1. Fold the arguments into the command string: 'command: delta --side-by-side'
  2. Or switch type to extDiff if you want command+args semantics for a whole-file external diff tool
  3. Restart lazygit to confirm validation passes

Example fix

# before
git:
  diffRenderers:
    - type: stdinFilter
      command: delta
      args: ['--side-by-side']

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

Strategy: validation

Validate before calling

func stdinFilterHasNoArgs(e DiffRendererConfig) bool {
    return (e.Type == "stdinFilter" || e.Type == "") && len(e.Args) == 0
}

Prevention

When it happens

Trigger: A git.diffRenderers entry with type stdinFilter that sets both command and a non-empty args list, e.g. command: delta, args: ['--side-by-side'].

Common situations: Users porting an external diff tool config where args were separate; assuming lazygit passes args through to the filter like git's extDiff does.

Related errors


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