junegunn/fzf
How to contribute
This section covers the practical mechanics of working in the fzf repository: where to start, how to run tests, how to debug issues, and the conventions to follow.
Picking up work
- Check open issues on
https://github.com/junegunn/fzf/issuesforhelp wantedand confirmed-bug labels. - For new features, open an issue first so the design can be discussed before code is written. fzf is intentionally conservative about adding new flags — there are already many.
- The CODEOWNERS file (
.github/CODEOWNERS) lists@junegunnas the sole owner; expect review by the maintainer.
Sub-pages
- Development workflow — branch, format, build, PR.
- Testing — Go unit tests and Ruby + tmux integration tests.
- Debugging — profiling builds, diagnostic flags, common pitfalls.
- Patterns and conventions — error handling, event coordination, action wiring.
- Tooling — the build system, linters, code generators.
Definition of done
A change is mergeable when:
make lintpasses (gofmt clean, rubocop clean, shell scripts passshell/update.sh --check).make testpasses (Go unit tests acrosssrc/,src/algo/,src/tui/,src/util/).make itestpasses for any UI-affecting change (Ruby integration tests through tmux). Adjusttest/test_core.rb/test/test_layout.rbetc. so the new behavior is covered.- The man page (
man/man1/fzf.1) is updated for any user-visible flag, action, or placeholder. CHANGELOG.mdhas an entry under the unreleased version, in the same style as previous entries.- If a new placeholder, action, or option is added, the help text in
Usageconstant insrc/options.gois updated.
Style highlights
- All Go code uses tabs and is
gofmt -sclean —make lintenforces this. - Ruby tests use Rubocop with the project config in
.rubocop.yml. - Shell scripts use 2-space indentation and pass
shfmt. The repo'sshell/update.shis the source of truth: shared snippets live inshell/common.shand are spliced into the per-shell scripts via--BEGIN INCLUDE/--END INCLUDEmarkers; runningmake fmtre-syncs them. - Commit messages follow the existing log style: short imperative subject ("Add X", "Fix Y when Z"), optional body, no Conventional Commits prefixes.
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.