jesseduffield/lazygit · error

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

Error message

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

What it means

Validation error from validateDiffRenderers (user_config_validation.go:125). For type 'extDiff' (external whole-file diff tool, mirroring git's extDiff config), lazygit does not support per-entry args — the tool is invoked like git's difftool and must be configured via its own config file or a wrapper script. A non-empty args list fails config validation.

Source

Thrown at pkg/config/user_config_validation.go:125

	}) {
		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) {
		return nil
	}
	allowedValuesStr := strings.Join(allowedValues, ", ")
	return fmt.Errorf("Unexpected value '%s' for '%s'. Allowed values: %s", value, name, allowedValuesStr)

View on GitHub (pinned to c477a2959b)

Solutions

  1. Create a small wrapper script that invokes the tool with the flags, and set command to the wrapper path
  2. Or configure the tool's own config file (delta: ~/.gitconfig-delta; difftastic: env vars) to carry the options
  3. Remove the args field and restart lazygit

Example fix

# before
git:
  diffRenderers:
    - type: extDiff
      command: meld
      args: ['--newtab']

# after
# ~/bin/meld-wrap: exec meld --newtab "$@"
git:
  diffRenderers:
    - type: extDiff
      command: ~/bin/meld-wrap
Defensive patterns

Strategy: validation

Validate before calling

func extDiffHasNoArgs(e DiffRendererConfig) bool {
    return e.Type == "extDiff" && len(e.Args) == 0
}

Prevention

When it happens

Trigger: A git.diffRenderers entry with type extDiff and an args list, e.g. type: extDiff, command: meld, args: ['--newtab'].

Common situations: Porting a .gitconfig difftool entry that used cmd with flags into lazygit's structured fields; wanting to pass flags to meld/kdiff3/difftastic.

Related errors


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