# cargo-packager cargo-packager splash Executable packager, bundler and updater. A cli tool and library to generate installers or app bundles for your executables. It also comes with useful addons: - an [updater](https://docs.rs/cargo-packager-updater) - a [resource resolver](https://docs.rs/cargo-packager-resource-resolver) #### Supported packages: - macOS - DMG (.dmg) - Bundle (.app) - Linux - Debian package (.deb) - AppImage (.AppImage) - Pacman (.tar.gz and PKGBUILD) - Windows - NSIS (.exe) - MSI using WiX Toolset (.msi) ### CLI The packager is distributed on crates.io as a cargo subcommand, you can install it using cargo: ```sh cargo install cargo-packager --locked ``` You then need to configure your app so the cli can recognize it. Configuration can be done in `Packager.toml` or `packager.json` in your project or modify Cargo.toml and include this snippet: ```toml [package.metadata.packager] before-packaging-command = "cargo build --release" ``` Once, you are done configuring your app, run: ```sh cargo packager --release ``` ### Configuration By default, the packager reads its configuration from `Packager.toml` or `packager.json` if it exists, and from `package.metadata.packager` table in `Cargo.toml`. You can also specify a custom configuration using the `-c/--config` cli argument. For a full list of configuration options, see https://docs.rs/cargo-packager/latest/cargo_packager/config/struct.Config.html. You could also use the [schema](./schema.json) file from GitHub to validate your configuration or have auto completions in your IDE. ### Building your application before packaging By default, the packager doesn't build your application, so if your app requires a compilation step, the packager has an option to specify a shell command to be executed before packaing your app, `beforePackagingCommand`. ### Cargo profiles By default, the packager looks for binaries built using the `debug` profile, if your `beforePackagingCommand` builds your app using `cargo build --release`, you will also need to run the packager in release mode `cargo packager --release`, otherwise, if you have a custom cargo profile, you will need to specify it using `--profile` cli arg `cargo packager --profile custom-release-profile`. ### Library This crate is also published to crates.io as a library that you can integrate into your tooling, just make sure to disable the default-feature flags. ```sh cargo add cargo-packager --no-default-features ``` #### Feature flags - **`cli`**: Enables the cli specifc features and dependencies. Enabled by default. - **`tracing`**: Enables `tracing` crate integration. ## Licenses MIT or MIT/Apache 2.0 where applicable.