jesseduffield/lazygit · error

gui.spinner.frames must not be empty.

Error message

gui.spinner.frames must not be empty.

What it means

Validation error from validateSpinner (user_config_validation.go:102). gui.spinner.frames customizes the loading spinner animation; an empty frames list would give the spinner nothing to animate, so config load fails immediately.

Source

Thrown at pkg/config/user_config_validation.go:102

		}
	}
	if total == 0 {
		return errors.New("gui.sidePanels must not be empty.")
	}
	// A lot of code focuses these panels directly (e.g. after resolving a
	// conflict or popping a stash), so they must always be present; otherwise
	// that code would focus a hidden panel.
	for _, required := range []string{"files", "branches", "commits"} {
		if !seen[required] {
			return fmt.Errorf("gui.sidePanels: '%s' must be included; it can't be hidden.", required)
		}
	}
	return nil
}

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 {

View on GitHub (pinned to c477a2959b)

Solutions

  1. Provide at least one frame string, e.g. frames: ['⠋','⠙','⠹','⠸','⠼','⠴','⠦','⠧','⠇','⠏']
  2. To disable the spinner, set gui.spinner.enabled: false rather than emptying frames
  3. Re-run lazygit to confirm validation passes

Example fix

# before
gui:
  spinner:
    frames: []

# after
gui:
  spinner:
    enabled: false  # to disable; or provide frames:
    # frames: ['|','/','-','\\']
Defensive patterns

Strategy: validation

Validate before calling

function validSpinnerFrames(frames []string) bool { return len(frames) > 0 }

Prevention

When it happens

Trigger: Setting 'gui: spinner: frames: []' in config.yml. The frames field is a user-overridable list, and the validator rejects zero entries before startup.

Common situations: Attempting to disable the spinner by emptying the list (use gui.spinner.enabled instead); YAML indentation putting frames under the wrong key; partial paste of a shared config.

Related errors


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