#cargo #profile #template #build #optimization #cargo-subcommand

bin+lib cargo-kit

Cargo subcommand to apply performance, compile-time, or size-optimized profiles and configs to your Rust project for enhanced build efficiency

7 releases

0.1.6 Dec 9, 2024
0.1.5 Dec 9, 2024
0.1.4 Nov 1, 2024
0.1.2 Oct 31, 2024

#186 in Cargo plugins

Download history 356/week @ 2024-10-28 53/week @ 2024-11-04 3/week @ 2024-11-18 298/week @ 2024-12-09

301 downloads per month

MIT license

91KB
2.5K SLoC

๐Ÿงน cargo-kit

                                   _     _  _
  ___   __ _  _ __   __ _   ___   | | __(_)| |_
 / __| / _` || '__| / _` | / _ \  | |/ /| || __|
| (__ | (_| || |   | (_| || (_) | |   < | || |_
 \___| \__,_||_|    \__, | \___/  |_|\_\|_| \__|
                    |___/

This tool automates that setup process, making configuration simpler and faster.

โœจ Features

cargo-kit can create or modify Cargo profiles in your Cargo.toml manifest and RUSTFLAGS in the .cargo/config.toml file, based on a set of predefined templates:

  • fast-compile - minimizes compilation times
  • fast-runtime - maximizes runtime performance
    • Enables LTO and other settings designed to maximize runtime performance.
  • min-size - minimizes binary size
    • Similar to fast-runtime, but uses optimization flags designed for small binary size.

You can also modify these templates in the interactive mode to build your own custom template.

๐Ÿš€ Installation

To install cargo-kit, simply clone the repository and follow the instructions below:

git clone git@github.com:trinhminhtriet/cargo-kit.git
cd cargo-kit

cargo build --release
cp target/release/cargo-kit /usr/local/bin/cargo-kit

Alternatively, you can install the binary directly from the repository:

cargo install --path .

Running the below command will globally install the cargo-kit binary.

cargo install cargo-kit

Optionally, you can add ~/.cargo/bin to your PATH if it's not already there

echo 'export PATH="$HOME/.cargo/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

๐Ÿ’ก Usage

  • Interactive mode (CLI dialog that guides you through the process):
$ cargo kit
  • Non-interactive mode (directly apply a predefined template to your Cargo workspace):
$ cargo kit apply <template> <profile>
# For example, apply `fast-runtime` template to the `dist` profile
$ cargo kit apply fast-runtime dist

You can enable additional configuration options that require a nightly compiler by running cargo-kit with a nightly Cargo (e.g. cargo +nightly kit) or by using the --nightly flag.

Note that you should be executing cargo kit inside a directory that is a part of a Cargo workspace. It will then apply the configuration options to that workspace.

Caveats

  • The configuration applied by this tool is quite opinionated and might not fit all use-cases perfectly. cargo-kit mostly serves to improve discoverability of possible Cargo profile and config options, to help you find the ideal settings for your use-cases.
  • cargo-kit currently only modifies Cargo.toml and config.toml. There are other things that can be configured to achieve e.g. even smaller binaries, but these are out of scope for this tool, at least at the moment.
  • cargo-kit currently ignores Cargo settings that are not relevant to performance.
  • Cargo config (config.toml) changes are applied to the global build.hostflags setting, because per-profile RUSTFLAGS are still unstable.

๐Ÿ—‘๏ธ Uninstallation

Running the below command will globally uninstall the cargo-kit binary.

cargo uninstall cargo-kit

Remove the project repo

rm -rf /path/to/git/clone/cargo-kit

๐Ÿค How to contribute

We welcome contributions!

  • Fork this repository;
  • Create a branch with your feature: git checkout -b my-feature;
  • Commit your changes: git commit -m "feat: my new feature";
  • Push to your branch: git push origin my-feature.

Once your pull request has been merged, you can delete your branch.

๐Ÿ“ License

This project is licensed under the MIT License - see the LICENSE file for details.

Dependencies

~8โ€“22MB
~281K SLoC