ferrflowby ferrlabs

Benchmarks

How fast is FerrFlow?

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 ms 21.1 MB
Monorepo · small (5 packages) 17 ms 18.9 MB
Monorepo · medium (20 packages) 60 ms 19.0 MB
Monorepo · large (50 packages) 1.06 s 29.2 MB
Monorepo · 50 packages × 5k commits 525 ms 25.1 MB
Monorepo · 100 packages × 1k commits 112 ms 23.1 MB

release --dry-run

Fixture ferrflow
Single package 16 ms 21.1 MB
Monorepo · small (5 packages) 17 ms 19.2 MB
Monorepo · medium (20 packages) 60 ms 19.1 MB
Monorepo · large (50 packages) 1.06 s 29.0 MB
Monorepo · 50 packages × 5k commits 523 ms 25.3 MB
Monorepo · 100 packages × 1k commits 113 ms 23.1 MB

tag

Fixture ferrflow
Single package 4 ms 12.2 MB
Monorepo · small (5 packages) 5 ms 12.2 MB
Monorepo · medium (20 packages) 14 ms 12.3 MB
Monorepo · large (50 packages) 220 ms 18.3 MB
Monorepo · 50 packages × 5k commits 105 ms 14.2 MB
Monorepo · 100 packages × 1k commits 26 ms 12.3 MB

validate

Fixture ferrflow
Single package 2 ms 12.1 MB
Monorepo · small (5 packages) 2 ms 12.2 MB
Monorepo · medium (20 packages) 3 ms 12.1 MB
Monorepo · large (50 packages) 4 ms 12.3 MB
Monorepo · 50 packages × 5k commits 3 ms 11.9 MB
Monorepo · 100 packages × 1k commits 3 ms 12.2 MB

version

Fixture ferrflow
Single package 2 ms 12.1 MB
Monorepo · small (5 packages) 2 ms 12.1 MB
Monorepo · medium (20 packages) 3 ms 12.2 MB
Monorepo · large (50 packages) 4 ms 12.3 MB
Monorepo · 50 packages × 5k commits 3 ms 11.9 MB
Monorepo · 100 packages × 1k commits 3 ms 12.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.

№ 04 — Get started

Ready to ship without the ceremony?

Open source. Runs in your own CI. Your code never leaves your infrastructure.