shuck

Benchmarks

This page publishes the macro CLI benchmark results produced by make bench-macro. It is intended as a technical reference for engineers evaluating runtime characteristics, not as a cross-machine league table.

Two datasets are shown:

  • A checked-in Apple M5 Max snapshot generated from local benchmark exports.
  • A Linux CI snapshot regenerated during the GitHub Pages deploy for the latest published release.

Compare tools within the same snapshot. Absolute numbers across different machines are useful for rough orientation only.

Snapshot Overview

SnapshotEnvironmentCommitshuck (all)Comparison (all)Speedup
Apple M5 Max checked-in snapshot
Checked-in local snapshot
Apple M5 Max macOS snapshot
macOS 26.4 (arm64)
919615b
Apr 20, 2026, 5:18 PM
56.2 ms (+/- 928.7 us)7.95 s (+/- 559.8 ms)141.4x
GitHub Actions latest release snapshot
CI snapshot
GitHub Actions ubuntu-latest
GitHub Actions (x86_64)
n/a
Apr 20, 2026, 12:00 AM
not generated in this buildnot generated in this buildn/a

Methodology

  • The runner is hyperfine with 3 warmups and 10 measured runs per case.
  • shuck is measured with check --no-cache so the results reflect parsing and linting work rather than cache reuse.
  • The comparison command is shellcheck --severity=style <fixture> on the same input.
  • --ignore-failure is intentional. These fixtures contain lint findings, so non-zero exit codes are expected and the benchmark is measuring runtime rather than success state.
  • Each fixture is benchmarked independently, and the all case benchmarks one invocation over the entire vendored corpus.

Reproducing Results

Refresh the checked-in local snapshot

make bench-macro-site-local

Generate a CI-style dataset manually

./scripts/benchmarks/setup.sh hyperfine shellcheck
./scripts/benchmarks/run.sh
python3 ./scripts/benchmarks/export_website_data.py \
  --repo-root . \
  --bench-dir .cache \
  --output website/generated/benchmarks/ci-latest.json \
  --dataset-id ci-latest \
  --dataset-name "GitHub Actions latest release snapshot" \
  --dataset-description "Generated during the website deploy workflow for the latest published release." \
  --environment-kind ci \
  --environment-label "GitHub Actions ubuntu-latest"

Apple M5 Max checked-in snapshot

Checked-in make bench-macro results captured on an Apple M5 Max macOS development machine.

EnvironmentApple M5 Max macOS snapshot
OS / archmacOS 26.4 (arm64)
CPUApple M5 Max
GeneratedApr 20, 2026, 5:18 PM
Commit919615b
Runnerhyperfine 3 warmups / 10 measured runs
shuckshuck 0.0.8
shellcheck0.11.0
Aggregate result56.2 ms (+/- 928.7 us)
Aggregate speedup141.4x faster than shellcheck

Apple M5 results

CaseSizeshuckComparisonSpeedupshuck RSSComparison RSS
all
5 files in one invocation
318.0 KiB
10,671 lines
56.2 ms (+/- 928.7 us)7.95 s (+/- 559.8 ms)141.4x96.7 MiB2.56 GiB
homebrew-install.sh
Homebrew/install
32.4 KiB
1,175 lines
9.0 ms (+/- 151.3 us)312.5 ms (+/- 5.1 ms)34.76x16.3 MiB169.1 MiB
nvm.sh
nvm-sh/nvm
146.7 KiB
4,661 lines
45.7 ms (+/- 567.8 us)6.94 s (+/- 115.2 ms)151.6x59.2 MiB2.63 GiB
pyenv-python-build.sh
pyenv/pyenv
79.8 KiB
2,740 lines
25.3 ms (+/- 301.2 us)33.3 ms (+/- 155.7 us)1.32x33.3 MiB33.4 MiB
ruby-build.sh
rbenv/ruby-build
46.6 KiB
1,643 lines
15.5 ms (+/- 278.1 us)384.9 ms (+/- 12.8 ms)24.78x23.7 MiB123.2 MiB
fzf-install.sh
junegunn/fzf
12.5 KiB
452 lines
6.5 ms (+/- 129.6 us)121.3 ms (+/- 380.8 us)18.80x12.0 MiB57.9 MiB

GitHub Actions latest release snapshot

A fresh Linux snapshot is generated during the GitHub Pages deploy for the latest published release. Local builds and pull request builds use this placeholder instead.

EnvironmentGitHub Actions ubuntu-latest
OS / archGitHub Actions (x86_64)
CPUUnknown
GeneratedApr 20, 2026, 12:00 AM
Commitn/a
Runnerhyperfine 3 warmups / 10 measured runs
shuckUnknown
Comparison toolNot included
Aggregate resultThis build does not include a generated aggregate result.
Aggregate speedupn/a
The checked-in placeholder was used for this build. The GitHub Pages deployment for the latest published release regenerates the CI snapshot before exporting the site.

Benchmark Corpus

The benchmark corpus is vendored into the repository so every run uses the same inputs. The current corpus contains 5 files, 10,671 lines, and 318.0 KiB of shell source.

FixtureSourceSizeLicense
homebrew-install.sh
6d5e267
Homebrew/install
install.sh
32.4 KiB
1,175 lines
BSD-2-Clause
nvm.sh
977563e
nvm-sh/nvm
nvm.sh
146.7 KiB
4,661 lines
MIT
pyenv-python-build.sh
8397a19
pyenv/pyenv
plugins/python-build/bin/python-build
79.8 KiB
2,740 lines
MIT
ruby-build.sh
d099da0
rbenv/ruby-build
bin/ruby-build
46.6 KiB
1,643 lines
MIT
fzf-install.sh
55d5b15
junegunn/fzf
install
12.5 KiB
452 lines
MIT