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 infoStyle

View on GitHub (pinned to bd4efa277b)

Solutions

  1. Use exactly one of: default, reverse, reverse-list
  2. Upgrade fzf if 'reverse-list' is rejected by an old binary
  3. 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

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


AI-assisted analysis of junegunn/fzf@bd4efa277b (2026-08-15). Data as JSON: /api/errors/10bf54d7ca1e6a67. Report an issue: GitHub.