Open-Source Wikis

/

fzf

/

By the numbers

junegunn/fzf

By the numbers

Data collected on 2026-04-30 from the local checkout (master, commit 6fefe025, tag v0.72.0).

Size

Language / area Files Lines
Go (all) 80 29,799
Go (src/ core) 42 ~21,400
Go (src/algo/) 8 ~6,300
Go (src/tui/) 12 ~5,200
Go (src/util/) 14 ~1,250
Go test files (src/.../*_test.go) 23 ~5,800
Bash key-bindings + completion 2 935
Zsh key-bindings + completion 2 673
Fish key-bindings + completion 2 388
Vim plugin (plugin/fzf.vim) 1 1,157
Ruby integration tests (test/*.rb) 9 8,198
Man page (man/man1/fzf.1) 1 ~21,400 chars

Source totals from find . -name '*.go' -exec wc -l {} + and wc -l shell/*.{bash,zsh,fish} plugin/fzf.vim test/*.rb.

xychart-beta horizontal
    title "Lines of code by area"
    x-axis ["src/* Go core", "Ruby integration tests", "src/algo Go", "src/tui Go", "shell scripts", "plugin/fzf.vim", "src/util Go"]
    y-axis "Lines" 0 --> 22000
    bar [21400, 8198, 6300, 5200, 1996, 1157, 1250]

The Go core is dominated by two files:

File Lines
src/terminal.go 8,205
src/options.go 3,954
src/tui/tui.go 1,510
src/tui/light.go ~1,180
src/algo/algo.go 1,031
src/algo/normalize.go ~860
src/tui/tcell.go ~960
src/core.go ~520

terminal.go and options.go together hold roughly half of the Go core's lines.

Activity

  • First commit: 2013-10-24 ("Initial commit").
  • Latest commit (this checkout): 2026-04-26 ("0.72.0").
  • Span: ~12.5 years of continuous development.
  • Releases: 60+ tagged releases (git tag) including v0.72.0, v0.71.0, v0.70.0, v0.68.0, etc.

Recent churn (last 90 days, derived from git log) is concentrated in:

  • src/terminal.go — most active file by far; receives nearly every UI feature change.
  • src/options.go — every new flag, action, or placeholder lands here.
  • man/man1/fzf.1 and CHANGELOG.md — updated on every user-visible change.
  • test/test_core.rb and test/test_layout.rb — integration tests grow with each feature.

Bot-attributed commits

Out of 3,200+ commits, 98 (~3%) are attributed to dependabot[bot] for dependency bumps. No other bot accounts appear in the top 50 committers. The number is a lower bound on automated activity since inline AI-assisted work leaves no git trace.

Complexity

  • Average Go file size in src/: ~510 lines.
  • Largest Go file: src/terminal.go at 8,205 lines.
  • Deepest single-file complexity: src/options.go (3,954 lines, hand-written parser, 200+ action types in src/actiontype_string.go).
  • Test-to-code ratio (src/): ~5,800 test lines vs ~21,400 production lines — roughly 1 test line per 3.7 source lines, plus ~8,200 lines of Ruby integration tests on top.
  • Action types: 200+ entries in the auto-generated src/actiontype_string.go.
  • Public packages: 4 (src, src/algo, src/tui, src/util) plus src/protector.

Dependencies

go.mod declares 7 direct dependencies and 4 transitive ones:

Direct Purpose
github.com/charlievieth/fastwalk Parallel directory walker
github.com/gdamore/tcell/v2 Optional tcell renderer (build tag)
github.com/junegunn/go-shellwords Shell-style argument splitting
github.com/mattn/go-isatty TTY detection
github.com/rivo/uniseg Unicode grapheme segmentation
golang.org/x/sys OS primitives
golang.org/x/term Raw-mode terminal control

That is a deliberately small dependency footprint for a tool that ships as a single static binary.

Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.

By the numbers – fzf wiki | Factory