jesseduffield/lazygit · error

git.diffRenderers: unknown type '%s'. Allowed values: stdinF

Error message

git.diffRenderers: unknown type '%s'. Allowed values: stdinFilter, extDiff, rawGit

What it means

Raised by the diff-renderer validation in pkg/config/user_config_validation.go. Each entry in git.diffRenderers must declare one of the exact types 'stdinFilter', 'extDiff' or 'rawGit' (enforced by a switch whose default branch throws); each type also has field constraints ('args' forbidden for stdinFilter/extDiff, 'command' forbidden for rawGit).

Source

Thrown at pkg/config/user_config_validation.go:132

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

func validateKeybindingsRecurse(path string, node any) error {
	value := reflect.ValueOf(node)
	if value.Kind() == reflect.Struct {
		for _, field := range reflect.VisibleFields(reflect.TypeOf(node)) {
			var newPath string

View on GitHub (pinned to c477a2959b)

Solutions

  1. Set type to exactly one of: stdinFilter, extDiff, rawGit.
  2. Also satisfy the per-type constraints: no 'args' with stdinFilter/extDiff, no 'command' with rawGit.
  3. Trim whitespace and check casing — the switch is case-sensitive.
  4. Restart lazygit to re-run validation.

Example fix

# before
git:
  diffRenderers:
    - type: externalDiff
      command: delta

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

Strategy: validation

Validate before calling

allowed := map[string]bool{"stdinFilter": true, "extDiff": true, "rawGit": true}
for _, dr := range cfg.Git.DiffRenderers {
	if !allowed[dr.Type] {
		return fmt.Errorf("bad diff renderer type %q", dr.Type)
	}
}

Prevention

When it happens

Trigger: Setting git.diffRenderers[i].type to anything other than stdinFilter/extDiff/rawGit — a typo like 'extDiff ' with trailing space, 'external', or a type from older docs — during config validation at startup.

Common situations: Migrating from the older git.paging.externalDiffPage config to the diffRenderers schema and guessing the type name; trailing whitespace or casing mistakes; configs written against a different lazygit version.

Related errors


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