cargo-size

Crates.iocargo-size
lib.rscargo-size
version0.1.1
created_at2025-10-18 12:43:50.334053+00
updated_at2025-10-18 12:51:20.453336+00
descriptionTool to check and compare binary sizes of Rust projects
homepagehttps://github.com/abhinav-1305/cargo-size
repositoryhttps://github.com/abhinav-1305/cargo-size
max_upload_size
id1889177
size97,022
Abhinav Kumar (abhinav-1305)

documentation

https://docs.rs/cargo-size

README

cargo-size

Tool to check and compare binary sizes of Rust projects. Interact with Cargo APIs to analyze and track binary size changes over time.

Features

  • Size Analysis: Check binary sizes for individual packages or entire workspaces
  • Comparison: Compare sizes between different packages, builds, or versions
  • History Tracking: View size history and trends over time
  • Multiple Output Formats: Table, JSON, and CSV output formats
  • Build Type Support: Analyze both debug and release builds
  • Cross-Platform: Support for different target architectures

Installation

cargo install cargo-size

Or build from source:

git clone https://github.com/yourusername/cargo-size
cd cargo-size
cargo build --release

Usage

Check Package Size

Check the size of a specific package or all packages in the workspace:

# Check current package size (debug build)
cargo size

# Check specific package
cargo size check --package my-package

# Check release build
cargo size check --release

# Check with specific target
cargo size check --target x86_64-unknown-linux-gnu

Compare Package Sizes

Compare sizes between different packages or builds:

# Compare two packages
cargo size compare --packages package-a package-b

# Compare with specific baseline
cargo size compare --packages package-a package-b --baseline package-a

# Compare release builds
cargo size compare --packages package-a package-b --release

View Size History

Track size changes over time:

# View size history for current package
cargo size history

# View history for specific package
cargo size history --package my-package

# Limit history entries
cargo size history --limit 20

Output Formats

Choose from different output formats:

# Table format (default)
cargo size check

# JSON format
cargo size check --output-format json

# CSV format
cargo size check --output-format csv

Examples

Basic Size Check

$ cargo size check
┌─────────────┬──────────────┬─────────┬────────────┬─────────┬─────────────────────┐
│ Package     │ Binary       │ Size    │ Build Type │ Target  │ Timestamp           │
├─────────────┼──────────────┼─────────┼────────────┼─────────┼─────────────────────┤
│ my-app      │ my-app       │ 2.45 MB │ debug      │ host    │ 2024-01-15 10:30:45 │
└─────────────┴──────────────┴─────────┴────────────┴─────────┴─────────────────────┘

Size Comparison

$ cargo size compare --packages old-version new-version --release
┌─────────────┬─────────┬──────────────┬────────────┬───────────┬────────────┐
│ Package     │ Size    │ vs Baseline  │ Difference │ Change %  │ Build Type │
├─────────────┼─────────┼──────────────┼────────────┼───────────┼────────────┤
│ new-version │ 1.2 MB  │ 1.0 MB       │ +200 KB    │ 🔴+20.00% │ release    │
└─────────────┴─────────┴──────────────┴────────────┴───────────┴────────────┘

JSON Output

$ cargo size check --output-format json
[
  {
    "package_name": "my-app",
    "binary_name": "my-app",
    "size": 2568192,
    "size_formatted": "2.45 MB",
    "build_type": "debug",
    "target": "host",
    "timestamp": "2024-01-15T10:30:45.123Z"
  }
]

Command Reference

Global Options

  • --output-format <FORMAT>: Output format (table, json, csv)

Subcommands

check

Check the size of packages.

  • --package <NAME>: Package name to check
  • --manifest-path <PATH>: Path to Cargo.toml
  • --release: Check release build instead of debug
  • --target <TRIPLE>: Target triple to build for

compare

Compare sizes between packages or builds.

  • --packages <NAMES>...: Package names to compare
  • --manifest-path <PATH>: Path to Cargo.toml
  • --release: Compare release builds
  • --target <TRIPLE>: Target triple to build for
  • --baseline <NAME>: Use specific package as baseline

history

Show size history for a package.

  • --package <NAME>: Package name to check history for
  • --manifest-path <PATH>: Path to Cargo.toml
  • --target <TRIPLE>: Target triple to build for
  • --limit <NUMBER>: Limit number of history entries (default: 10)

Integration with CI/CD

You can integrate cargo-size into your CI/CD pipeline to track binary size changes:

# GitHub Actions example
- name: Check binary size
  run: |
    cargo size check --release --output-format json > size-report.json
    # Compare with baseline or fail if size increase is too large

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Development Setup

  1. Clone the repository
  2. Install dependencies: cargo build
  3. Run tests: cargo test
  4. Run the tool: cargo run -- check

License

This project is licensed under either of

at your option.

Acknowledgments

Inspired by the webbrowser crate's approach to consistent behavior across platforms and comprehensive documentation.

Commit count: 0

cargo fmt