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 -- -DwarningsThere 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-musleabihfRelease 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.mdis hand-maintained.CHANGELOG.mdis hand-maintained, contributors update the Unreleased section as part of their PR.doc/fd.1is the groff man page, hand-maintained and installed by the Makefile.doc/screencast.shplusdoc/screencast.svgproduce the demo SVG used in the README.
What is not in the repo
- No
.editorconfig, no.pre-commit-config.yaml, no.deny.toml, noJustfile, noTaskfile, 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.