Skip to content

Releases: cargo-bins/cargo-binstall

v0.13.1

17 Sep 11:50
e8dfbe3
Compare
Choose a tag to compare

Binstall is a tool to fetch and install Rust-based executables as binaries. It aims to be a drop-in replacement for cargo install in most cases. Install it today with cargo install cargo-binstall, from the binaries below, or if you already have it, upgrade with cargo binstall cargo-binstall.

In this release

This is a redo of 0.13.0, which has its own changelog you should consult. As that release broke a few important usecases, it was unmade and this one replaces it.

  • Fix missing info logs, which broke the UI. (#371)
  • pkg-fmt (in manifest and CLI) is now case-insensitive. (#384)
  • New --roots option, same as cargo install's. (#388, #389)
  • Binstall now falls back to other installation strategies if an earlier one doesn't contain all the required binaries (fixes some issues with incomplete packages). (#357, #370, #372, #382)

Other changes

  • Releng fixes for release PR action. (#367, #368, #369)
  • Our prebuilt release now disables trace level logs entirely. (#390)
  • zip dependency has been forked to apply fixes, unblock a feature (streaming decode), and upgrade zstd. (#375)
  • Several changes and fixes to documentation. (#383, #385, #386, #392)

v0.13.0

10 Sep 11:29
037e621
Compare
Choose a tag to compare

Yanked, unreleased. Use 0.13.1 instead.

Binstall is a tool to fetch and install Rust-based executables as binaries. It aims to be a drop-in replacement for cargo install in most cases. Install it today with cargo install cargo-binstall, from the binaries below, or if you already have it, upgrade with cargo binstall cargo-binstall.

In this release:

  • Binstall now aggressively scans the remote for a download URL if not given exact details in the metadata:

    • the filename is guessed from a wider range of version/name/target combinations (#296, #329)
    • the version can be with or without preceding v (#328)
    • the file extension can be any of the standard extensions for the supported archive formats (#295, #310)

    This means that many more packages will install out of the box without needing configuration.

  • Binstall now also tries to guess the download URL for other repositories than GitHub: GitLab, BitBucket, and SourceForge. (#296, #322, #360)

  • Downloads can now only be done over HTTPS, with TLS 1.2 or over. This also deprecates the --secure option, which enabled this; for compatibility it is still accepted but will do nothing. (#124, #343)

  • The source has been broken up into several crates. There are the single-purpose libraries detect-targets, detect-wasi, fs-lock, normalize-path (all licensed as Apache/MIT); and the "binstall library/toolkit", binstalk (GPL). The main interface remains the tool itself, cargo-binstall. (#294, #307, #331, #338, #341, #359, #361)

Other changes:

  • Fix regression where we would prompt even if there was nothing to do. (#291, #293)
  • Improve an error message when an expected file is not found in the downloaded package. (#301)
  • Use Trust DNS for hostname resolution. (#318, #323)
  • Use rustls on all platforms. This notably makes it easier to install on Windows, but also provides consistent TLS 1.3 support everywhere. (#318)
  • Use cargo-bins/release-pr for the release process. (#330, #336, #345, #350, #364)
  • Recommend taiki-e/install-action as the way to use Binstall in CI. (#342)
  • Installing via cargo install cargo-binstall no longer tries to use the high performance zlib-ng, which was causing compile issues on Windows. Instead the pure Rust miniz-oxide implementation is used. Pre-built binaries still use zlib-ng, so do a cargo binstall cargo-binstall immediately after installing from source to get it. (#354)
  • We've forked a couple of crates to apply fixes to them: jobserver (as jobslot), tar (as binstall-tar).
  • The tar fork includes support for PAX, which fixes a longstanding and very annoying bug seen occasionally where a package would fail to install with a confusing error. We hope to upstream the fix, this is not meant to be a permanent fork. (#177, alexcrichton/tar-rs#295, cargo-bins/cargo-quickinstall#87, #301, #358)
  • Various minor optimisations. (#321, #324, #325)
  • The crates.io API calls now share the same HTTP client as the rest of Binstall; this notably enforces HTTPS and TLS version policies globally. (#349)
  • Many dependency updates: clap, miette, serde, and others (#297, #298, #299, #300, #308)

v0.12.0

08 Aug 11:40
4500e4a
Compare
Choose a tag to compare

Binstall is a tool to fetch and install Rust-based executables as binaries. It aims to be a drop-in replacement for cargo install in most cases. Install it today with cargo install cargo-binstall, from the binaries below, or if you already have it, upgrade with cargo binstall cargo-binstall.

In this release:

  • If a crate is already installed and its version is the same as would be installed, we now skip installing it, mirroring cargo-install's behaviour. A new --force option lets you do it anyway. (#282)
  • Binstall writes to its own specific metafile format in $CARGO_HOME/binstall/crates-v1.json for global installs. This new format is better suited to binstall over the .crates2.json data, and lets both Binstall itself and third party tools if they so wish have access to installation information. The classic .crates.toml is still written to too. (#252)
  • We now live in the cargo-bins GitHub organisation. This will let us fork some unmaintained projects that we use in here, and perhaps bring other cargo tools under this umbrella. (#251)

Other changes:

  • New: -V to print version. (#248, #259)
  • New: --quiet as an alias to --log-level=off. (#281, #283)
  • Improved: --manifest-path can take both a crate folder path and a Cargo.toml's path. (#259)
  • Improved: --log-level=off (or --quiet) also passes --quiet to cargo-install when installing from source. (#281, #283)
  • Fix: show help when no arguments are provided. (#244, #245)
  • Fix: $CARGO_HOME and the .crates.toml metafile will be created if they don't exist yet. (#267, #276)
  • Fix: specifying duplicate crates is now handled properly, with the latter specification being used. (#264)
  • Doc: possible values of --log-level are listed out. (#281)
  • Doc: the readme has been streamlined for the use case, rather than the support case (adding binstall configuration to your crate), which has moved to its own dedicated page. (#284)

Plus many performance and CI/CD optimisations.

v0.11.1

24 Jul 08:48
faf4c5e
Compare
Choose a tag to compare

Binstall is a tool to fetch and install Rust-based executables as binaries. It aims to be a drop-in replacement for cargo install in most cases. Install it today with cargo install cargo-binstall, from the binaries below, or if you already have it, upgrade with cargo binstall cargo-binstall.

In this release:

  • Release-related bug fixes in the CI/CD processes, which caused broken builds for 0.11.0 (#241, #242)

v0.11.0

24 Jul 04:35
450e29d
Compare
Choose a tag to compare

Binstall is a tool to fetch and install Rust-based executables as binaries. It aims to be a drop-in replacement for cargo install in most cases. Install it today with cargo install cargo-binstall, from the binaries below, or if you already have it, upgrade with cargo binstall cargo-binstall.

In this release:

  • Installing multiple crates in one go is now possible with crate@version syntax, similar to the cargo add command. When that syntax is used, some overriding options like --version and --manifest-path that only make sense in single-crate context are disabled. (#210, #216, #217, #220)
  • We now prompt only a single time. We resolve all information needed to proceed, then ask for confirmation, and then install. Previously there could be up to three confirmation prompts. (#209)
  • --version 1.2.3 now means --version "=1.2.3". Previously it meant --version "^1.2.3". This was confusing and could result in ambiguity in some cases. The new behaviour aligns more closely with cargo install. This is also the case in the new crate@version syntax. (#210)
  • Alternative extensions are tried when { archive-format } is used, so e.g. writing .tar.gz manually in the template URL is no longer required. (#38, #236)

Other changes:

  • Mimalloc can be chosen to replace the default allocator at build time with the feature mimalloc. This is disabled by default. (#206)
  • Smaller binaries with opt-level = "z". (#218)
  • Enable static linking of xz2. (#219)
  • Disable unused features of zstd. (#219)
  • We now co-operate with make-style process concurrency handling. (#216)
  • Many performance optimisations throughout the above and #221, #222.
  • Temporary files are now created within the installation path, this helps detect out of space and permission errors earlier. (#225)
  • $CARGO_HOME/.crates.toml is no longer modified if --install-path is given, as that's considered a non-global install. We also take a lock on the file like Cargo does. (#227, #228)
  • $CARGO_HOME/.crates2.json is no longer written to, as its data content is not adapted to Binstall's. (#235)
  • The armv7 and aarch64 Linux GNU targets are pre-built for releases again. (#231)
  • @NobodyXu is now officially our third maintainer! 🎉

v0.10.0

05 Jul 10:54
v0.10.0
3348d3d
Compare
Choose a tag to compare

Binstall is a tool to fetch and install Rust-based executables as binaries. It aims to be a drop-in replacement for cargo install in most cases. Install it today with cargo install cargo-binstall, from the binaries below, or if you already have it, upgrade with cargo binstall cargo-binstall.

In this release:

  • Binstall now writes to standard meta files $CARGO_HOME/.crates.toml and $CARGO_HOME/.crates2.json. This improves interoperability with other cargo tools. (#205 by @passcod)
  • We now write binaries and symlinks atomically, to prevent corruption. (#195 by @NobodyXu)
  • In most cases, a single HTTP connection will be opened per remote host and re-used, instead of making a new one for each use. (#198 by @NobodyXu)

Other changes:

  • Windows target detection is improved, with support for gnullvm targets. (#199 by @NobodyXu)
  • Binstall builds are now optimised for size; performance is still great. (#200 by @NobodyXu)

v0.9.2

28 Jun 14:09
v0.9.2
caf6f39
Compare
Choose a tag to compare

Binstall is a tool to fetch and install Rust-based executables as binaries. It aims to be a drop-in replacement for cargo install in most cases. Install it today with cargo install cargo-binstall, from the binaries below, or if you already have it, upgrade with cargo binstall cargo-binstall.

In this release:

  • New: support for Tar+Bzip2 (#181) by @qryxip
  • New: --secure and --min-tls-version options to disable insecure transports (#189) by @NobodyXu and @passcod
  • Improved: streaming downloads and unpacking such that no more data than necessary is held in memory, preventing OOM situations. (#168, #179) by @NobodyXu
  • Improved: target detection on Windows and Mac (#191, #193) by @NobodyXu

Other changes:

  • Various performance improvements courtesy of @NobodyXu:
    • QuickInstall reporting in the background (#166)
    • Fetching metadata from crates.io (#180, #188)
    • Detecting the install target (#192)
    • Performing filesystem I/O (#194)
    • Performing stdout/stderr I/O (#171)
  • CI: unit tests (#169) by @NobodyXu

v0.9.1

08 Jun 05:23
v0.9.1
43d5a6b
Compare
Choose a tag to compare

Binstall is a tool to fetch and install Rust-based executables as binaries. It aims to be a drop-in replacement for cargo install in most cases. Install it today with cargo install cargo-binstall, from the binaries below, or if you already have it, upgrade with cargo binstall cargo-binstall.

In this release:

  • Binaries are now fetched according to the platform, detected at runtime, instead of matching the target triple of Binstall itself. (#155, #160)
  • Binstall may try fetching the best of multiple targets for binaries, depending on platform. (#160, #162)

For example, when using an ARM64 Linux musl build of Binstall on a glibc-based system:

  • Binstall <=0.8 would attempt to download musl binaries, and fail (fallback to source) if none were available
  • Binstall >=0.9 will attempt to download gnu/glibc binaries, then fallback to musl binaries, and then fail (fallback to source).

On Apple M1, M1-native builds will be preferred, with a fallback onto Intel builds (usable via Rosetta); and so on.

Other changes:

  • The --target override option is now an alias to --targets, which takes a comma-separated list of target triples to try fetching in order.
  • The -h and --help outputs have been improved, via an upgrade to Clap 3. -h now shows a terse help page, and --help has longer description and explanations of each option.
  • The code has been updated to Rust 2021, and the minimum version rustc bumped to 1.61. (#154)
  • Several performance improvements were applied (#162, #163, #165)

Many thanks to @NobodyXu who has contributed/collaborated on most of this release and the last!

v0.8.0

31 May 13:32
v0.8.0
6457ab9
Compare
Choose a tag to compare
  • Richer errors, differentiating exit codes, and more (#151)
    • Answering "no" to a confirmation prompt will exit with code 32;
    • An HTTP error is code 69;
    • A crate not found error is 76, and will direct you to lib.rs to search for a similarly-named crate if you so want;
    • and many more errors have gained more verbose descriptions, error codes, exit codes, and help text.
  • Optimised (for size) cargo-binstall binaries (#149, #150)
  • TAR + Zstd support (#148)
  • CLI overrides for bin-dir, pkg-fmt, pkg-url (#147)
  • We no longer fetch or use the local crates index, instead relying only on the crates.io API. (#128, #126)
  • Fix: if the latest version of a crate is yanked, we no longer use it (#122)
  • Warning: when using the --version option, warn and re-prompt if the resolved version may not be the expected one (#116, #122, #125)
  • Warning: when fetching from a non-HTTPS remote (#152).
    • Insecure downloads may become unsupported in the future!
    • If you have a non-HTTPS download URL in your manifest, please switch to an HTTPS one, or consider opening an issue if you have objections.
  • New builds: (#143, #145)
    • Apple M1
    • Linux x86-64 (musl)
    • Linux ARM64 (musl)
    • Linux ARMv7 (musl)
    • 🗑️ Linux ARMv7 (gnu) support dropped
    • We now recommend using static musl builds over gnu libc ones

v0.7.0

28 Apr 22:29
Compare
Choose a tag to compare
  • Fix: linking behaviour on windows (#106, #111, PR #117)
  • Fix: catch more errors so fallback works better (#109, PR #118)
  • Improvement: warn when --version usage may result in unexpected version being installed (#113, PR #116)
  • New: fallback to installing from source (with cargo install) when no binary is available (suggestion by @fasterthanlime and others, #108, PR #114)