Side-by-side comparison against the JavaScript ecosystem release tools, measured with
hyperfine on the same hardware, the same commits,
and the same fixtures. Numbers refresh on every FerrFlow release.
Last update: June 6, 2026 · ferrflow v5.2.0
· binary size 8.0 MB
How we measure
Hyperfine with 3 warmup runs and 10 timed runs per (fixture × tool × command)
cell. Median latency reported.
Peak RSS via /usr/bin/time -v on a single subsequent run.
Fixtures are generated from
FerrLabs/Fixtures with deterministic conventional-commit
history (no flaky inputs).
All commands are no-op-ish dry runs: ferrflow check,
semantic-release --dry-run --no-ci, changesets status,
standard-version --dry-run, etc. So we're comparing the planning cost, not
the IO cost of actually mutating files.
Reproducible — the full pipeline is in
FerrLabs/Benchmarks; results land as
artifacts on every main push and in each release notes.
check
Fixture
ferrflow
Single package
16 ms21.1 MB
Monorepo · small (5 packages)
17 ms18.9 MB
Monorepo · medium (20 packages)
60 ms19.0 MB
Monorepo · large (50 packages)
1.06 s29.2 MB
Monorepo · 50 packages × 5k commits
525 ms25.1 MB
Monorepo · 100 packages × 1k commits
112 ms23.1 MB
release --dry-run
Fixture
ferrflow
Single package
16 ms21.1 MB
Monorepo · small (5 packages)
17 ms19.2 MB
Monorepo · medium (20 packages)
60 ms19.1 MB
Monorepo · large (50 packages)
1.06 s29.0 MB
Monorepo · 50 packages × 5k commits
523 ms25.3 MB
Monorepo · 100 packages × 1k commits
113 ms23.1 MB
tag
Fixture
ferrflow
Single package
4 ms12.2 MB
Monorepo · small (5 packages)
5 ms12.2 MB
Monorepo · medium (20 packages)
14 ms12.3 MB
Monorepo · large (50 packages)
220 ms18.3 MB
Monorepo · 50 packages × 5k commits
105 ms14.2 MB
Monorepo · 100 packages × 1k commits
26 ms12.3 MB
validate
Fixture
ferrflow
Single package
2 ms12.1 MB
Monorepo · small (5 packages)
2 ms12.2 MB
Monorepo · medium (20 packages)
3 ms12.1 MB
Monorepo · large (50 packages)
4 ms12.3 MB
Monorepo · 50 packages × 5k commits
3 ms11.9 MB
Monorepo · 100 packages × 1k commits
3 ms12.2 MB
version
Fixture
ferrflow
Single package
2 ms12.1 MB
Monorepo · small (5 packages)
2 ms12.1 MB
Monorepo · medium (20 packages)
3 ms12.2 MB
Monorepo · large (50 packages)
4 ms12.3 MB
Monorepo · 50 packages × 5k commits
3 ms11.9 MB
Monorepo · 100 packages × 1k commits
3 ms12.1 MB
Install footprint
Disk size after install. release-please appears here only — its runtime
can't be benched offline (it needs the GitHub API to resolve the latest release), so
footprint is the fair comparison we can publish.
Tool
npm install
Native binary
ferrflow
13.0 MB
8.0 MB
changesets
26.0 MB
—
commit-and-tag-version
20.0 MB
—
release-please
96.0 MB
—
semantic-release
69.0 MB
—
standard-version
21.0 MB
—
Why FerrFlow ships smaller numbers
Native binary. No Node.js boot, no npm install, no plugin discovery. A ferrflow check on a 50-package monorepo finishes before
node --version would have warmed up.
libgit2 in-process. Tag enumeration and commit walking happen via libgit2 in
the same process. Competitors shell out to git per call; process-spawn overhead
dominates on dense histories.
Single tool, not a plugin tree. semantic-release pulls a chain of analyzers,
notes generators, npm publishers and changelog writers — each with its own require() cost. FerrFlow's
pipeline is one Rust crate.
Numbers updating every release. See the
latest release notes
for the full table including baseline delta.