junegunn/fzf · error
invalid layout (expected: default / reverse / reverse-list)
Error message
invalid layout (expected: default / reverse / reverse-list)
What it means
Thrown by parseLayout when --layout receives a string that is not one of the three accepted names: 'default', 'reverse', or 'reverse-list'. fzf deliberately rejects unknown layout names instead of silently falling back (the returned layout value is layoutDefault but the error still aborts parsing).
Source
Thrown at src/options.go:2287
size, err := parseSize(str, 100, "height")
if err != nil {
return heightSpec, err
}
heightSpec.size = size.size
heightSpec.percent = size.percent
return heightSpec, nil
}
func parseLayout(str string) (layoutType, error) {
switch str {
case "default":
return layoutDefault, nil
case "reverse":
return layoutReverse, nil
case "reverse-list":
return layoutReverseList, nil
}
return layoutDefault, errors.New("invalid layout (expected: default / reverse / reverse-list)")
}
func parseInfoStyle(str string) (infoStyle, string, error) {
switch str {
case "default":
return infoDefault, "", nil
case "right":
return infoRight, "", nil
case "inline":
return infoInline, defaultInfoPrefix, nil
case "inline-right":
return infoInlineRight, "", nil
case "hidden":
return infoHidden, "", nil
}
type infoSpec struct {
name string
style infoStyleView on GitHub (pinned to bd4efa277b)
Solutions
- Use exactly one of: default, reverse, reverse-list
- Upgrade fzf if 'reverse-list' is rejected by an old binary
- Check for typos and stray whitespace or '=' placement in the option string
Example fix
# before fzf --layout reverse-list2 # after fzf --layout reverse-list
Defensive patterns
Strategy: type-guard
Validate before calling
# bash [[ "$LAYOUT" =~ ^(default|reverse|reverse-list)$ ]] || LAYOUT=default fzf --layout "$LAYOUT"
Type guard
layout_ok() { case "$1" in default|reverse|reverse-list) return 0;; *) return 1;; esac; } Prevention
- Whitelist layout values in wrappers instead of forwarding raw user input
- Check `fzf --man` after upgrades for new layout names
When it happens
Trigger: `--layout reverse-list2`, `--layout=reverse-list` (fine) vs `--layout 'reverse list'` (space), `--layout ra` (abbreviation attempt).
Common situations: Muscle memory from other tools where 'column', 'inline', or abbreviations work; version skew — very old fzf only knew 'reverse' and scripts using 'reverse-list' on it; typos.
Related errors
- unknown action: ${spec}
- invalid info style (expected: default|right|hidden|inline[-r
- history max must be a positive integer
- number of items to keep must be a positive integer
- invalid wrap mode: %s (expected: char or word)
AI-assisted analysis of junegunn/fzf@bd4efa277b (2026-08-15).
Data as JSON: /api/errors/10bf54d7ca1e6a67.
Report an issue: GitHub.