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) includingv0.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.1andCHANGELOG.md— updated on every user-visible change.test/test_core.rbandtest/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.goat 8,205 lines. - Deepest single-file complexity:
src/options.go(3,954 lines, hand-written parser, 200+ action types insrc/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) plussrc/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.