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
- Provide at least one frame string, e.g. frames: ['⠋','⠙','⠹','⠸','⠼','⠴','⠦','⠧','⠇','⠏']
- To disable the spinner, set gui.spinner.enabled: false rather than emptying frames
- 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
- To disable the spinner use gui.spinner.enabled: false, never empty frames
- Start from the documented default frames list when customizing
- Keep a known-good config backup before cosmetic edits
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
- gui.sidePanels: a side panel must have at least one tab.
- gui.sidePanels must not be empty.
- All gui.spinner.frames entries must have the same width.
- git.diffRenderers: 'command' must be specified for diff rend
- custom command prompt must have a type of 'input', 'menu', '
AI-assisted analysis of jesseduffield/lazygit@c477a2959b (2026-08-15).
Data as JSON: /api/errors/6a0014371f4e3f64.
Report an issue: GitHub.