Open-Source Wikis

/

fd

/

How to contribute

/

Tooling

sharkdp/fd

Tooling

The build system and the bits of automation that surround it.

Cargo

Cargo.toml is the source of truth for the package. Notable bits:

Setting Value
edition 2024
rust-version 1.90.0 (the MSRV)
[lib] not present — fd is binary-only
[[bin]] name = "fd", path = "src/main.rs"
[features] use-jemalloc, completions, base, default = ["use-jemalloc", "completions"]
[profile.release] lto = true, strip = true, codegen-units = 1
[profile.debugging] inherits dev, debug = true

Cargo.lock is checked in (this is a binary crate, so a locked dependency graph is appropriate).

Makefile

Makefile provides a few convenience targets on top of cargo:

Target What it does
$(EXE) (default) cargo build --profile $(PROFILE) --locked (release by default)
completions Generate bash/fish/PowerShell completions via fd --gen-completions and copy the zsh + fdfind completions from contrib/completion/.
install Install the binary to $(DESTDIR)$(prefix)/bin, completions to the right per-shell directories under $(datadir), and the man page from doc/fd.1.

The Makefile is what Linux distributions typically run when packaging fd.

rustfmt

rustfmt.toml is checked in and intentionally minimal — fd uses the rustfmt defaults. CI fails the build if cargo fmt -- --check is dirty.

Clippy

CI runs:

cargo clippy --all-targets --all-features -- -Dwarnings

There is no project-specific clippy config; default lints with warnings-as-errors apply.

CI / .github/workflows/CICD.yml

The single workflow handles lint, MSRV check, full test matrix across many targets, and release artifact building. It triggers on push, pull_request, workflow_dispatch, and tag pushes. The release job uses softprops/action-gh-release (recently bumped to v3.0.0 by dependabot) to upload archives to a GitHub Release.

Cross

Cross.toml configures images for less-mainstream targets (musl, BSDs, ARM Linux). Local cross-compilation:

cargo install cross
cross build --release --target armv7-unknown-linux-musleabihf

Release artifacts on the GitHub Releases page are produced through cross for these targets.

Dependabot

.github/dependabot.yml configures dependabot to bump GitHub Actions and cargo dependencies. As of 2250bb0, dependabot is responsible for ~12% of all commits in the project.

Issue templates and security policy

  • .github/ISSUE_TEMPLATE/ — the standard bug/feature templates (boilerplate).
  • SECURITY.md — directs vulnerability reports to the GitHub Security Advisory form. Never open public issues for security problems.

Documentation tooling

  • README.md is hand-maintained.
  • CHANGELOG.md is hand-maintained, contributors update the Unreleased section as part of their PR.
  • doc/fd.1 is the groff man page, hand-maintained and installed by the Makefile.
  • doc/screencast.sh plus doc/screencast.svg produce the demo SVG used in the README.

What is not in the repo

  • No .editorconfig, no .pre-commit-config.yaml, no .deny.toml, no Justfile, no Taskfile, no Nix flake.
  • No language-server configuration; rust-analyzer auto-detects the workspace.
  • No fuzzing setup, no benchmarks in-tree (the benchmark suite lives in https://github.com/sharkdp/fd-benchmarks).

Release checklist

doc/release-checklist.md contains the manual steps for cutting a new release (version bumps, tag conventions, etc.). It is the maintainer-facing companion to the changelog.

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

Tooling – fd wiki | Factory