Binary installation for rust projects
  • Rust 92.5%
  • Shell 3.7%
  • Just 2.8%
  • Assembly 0.4%
  • PowerShell 0.4%
Find a file
dependabot[bot] 57726869e2
build(deps): bump the deps group across 1 directory with 2 updates (#2612)
Bumps the deps group with 2 updates in the / directory:
[compact_str](https://github.com/ParkMyCar/compact_str) and
[tokio](https://github.com/tokio-rs/tokio).

Updates `compact_str` from 0.9.1 to 0.10.0
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/ParkMyCar/compact_str/blob/main/CHANGELOG.md">compact_str's
changelog</a>.</em></p>
<blockquote>
<h1>0.10.0</h1>
<h3>July 12, 2026</h3>
<h2>Changes</h2>
<ul>
<li>Minimum supported Rust version (MSRV) was bumped to
<code>v1.71</code>.</li>
<li>The <code>Error</code> trait impls once again require the
<code>std</code> feature. This reverts the (unreleased)
no-std <code>core::error::Error</code> support from <a
href="https://redirect.github.com/ParkMyCar/compact_str/pull/443">#443</a>,
which required Rust <code>v1.81</code>, it can return once the MSRV
reaches <code>v1.81</code>.</li>
<li>Added support for the <a
href="https://crates.io/crates/garde"><code>garde</code></a> validation
crate under an
optional feature, implementing its string rule traits for
<code>CompactString</code>.
<ul>
<li>Implemented in <a
href="https://redirect.github.com/ParkMyCar/compact_str/pull/471"><code>feat:
add garde validation support</code></a>.</li>
</ul>
</li>
<li>Added support for the <a
href="https://crates.io/crates/schemars"><code>schemars</code></a> crate
under an optional
feature, implementing <code>JsonSchema</code> for
<code>CompactString</code>. Every method delegates to
<code>String</code>'s
impl, so the generated schema is identical to a <code>String</code>'s.
<ul>
<li>Implemented in <a
href="https://redirect.github.com/ParkMyCar/compact_str/pull/454"><code>feat:
support schemars</code></a>.</li>
</ul>
</li>
<li>Added support for the <a
href="https://crates.io/crates/valuable"><code>valuable</code></a> crate
under an optional
feature, implementing the <code>Valuable</code> trait for
<code>CompactString</code> so it presents as a
<code>Value::String</code>.
<ul>
<li>Implemented in <a
href="https://redirect.github.com/ParkMyCar/compact_str/pull/451"><code>Add
impl Valuable</code></a>.</li>
</ul>
</li>
<li>Added a <code>pyo3</code> feature which implements <a
href="https://docs.rs/pyo3/0.29/pyo3/conversion/trait.FromPyObject.html"><code>FromPyObject</code></a>
and <a
href="https://docs.rs/pyo3/0.29/pyo3/conversion/trait.IntoPyObject.html"><code>IntoPyObject</code></a>
for <code>CompactString</code>, so it can
be used seamlessly with <a
href="https://crates.io/crates/pyo3"><code>pyo3</code></a> v0.29.
<ul>
<li>Implemented in <a
href="https://redirect.github.com/ParkMyCar/compact_str/pull/446"><code>feat:
add pyo3 feature</code></a>.</li>
</ul>
</li>
<li>Added support for the <a
href="https://crates.io/crates/defmt"><code>defmt</code></a> crate under
an optional feature,
implementing <code>defmt::Format</code> for <code>CompactString</code>.
<ul>
<li>Implemented in <a
href="https://redirect.github.com/ParkMyCar/compact_str/pull/438"><code>feat:
Add support for defmt</code></a>.</li>
</ul>
</li>
<li>Added a <code>bevy-reflect</code> feature which implements <a
href="https://crates.io/crates/bevy_reflect"><code>bevy_reflect</code></a>'s
reflection traits for <code>CompactString</code> (as an opaque type).
<ul>
<li>Implemented in <a
href="https://redirect.github.com/ParkMyCar/compact_str/pull/439"><code>feat:
Add bevy-reflect feature</code></a>.</li>
</ul>
</li>
<li>Added a <code>utoipa</code> feature which implements <a
href="https://crates.io/crates/utoipa"><code>utoipa</code></a>'s
<code>PartialSchema</code> and <code>ToSchema</code> traits for
<code>CompactString</code>.
<ul>
<li>Implemented in <a
href="https://redirect.github.com/ParkMyCar/compact_str/pull/442"><code>fix
sqlx type impl, add utoipa feature</code></a>
and <a
href="https://redirect.github.com/ParkMyCar/compact_str/pull/445"><code>feat:
fixup the utoipa feature</code></a>.</li>
</ul>
</li>
<li>Removed <code>#[must_use]</code> from the <code>Drain</code>
iterator.
<ul>
<li>Implemented in <a
href="https://redirect.github.com/ParkMyCar/compact_str/pull/486"><code>fix:
remove #[must_use] from Drain</code></a>.</li>
</ul>
</li>
<li>Added <a href="https://github.com/model-checking/kani">Kani</a>
proof harnesses to formally verify the crate's
unsafe code.
<ul>
<li>Implemented in <a
href="https://redirect.github.com/ParkMyCar/compact_str/pull/480"><code>feat:
add kani proof harnesses to verify unsafe code</code></a>.</li>
</ul>
</li>
<li>Bump the <a
href="https://crates.io/crates/sqlx"><code>sqlx</code></a> dependency to
<code>v0.9</code>. Enabling the <code>sqlx</code>
feature now requires Rust <code>v1.94</code>.
<ul>
<li>Implemented in <a
href="https://redirect.github.com/ParkMyCar/compact_str/pull/474"><code>deps:
bump sqlx to 0.9</code></a>.</li>
</ul>
</li>
<li>Bump the <a
href="https://crates.io/crates/bevy_reflect"><code>bevy_reflect</code></a>
dependency to <code>v0.19</code>.
<ul>
<li>Implemented in <a
href="https://redirect.github.com/ParkMyCar/compact_str/pull/490"><code>deps:
update optional deps to latest</code></a>.</li>
</ul>
</li>
<li>Bump the <a
href="https://crates.io/crates/markup"><code>markup</code></a>
dependency to <code>v0.16</code>.
<ul>
<li>Implemented in <a
href="https://redirect.github.com/ParkMyCar/compact_str/pull/490"><code>deps:
update optional deps to latest</code></a>.</li>
</ul>
</li>
</ul>
<h2>Bug Fixes</h2>
<ul>
<li>Fixed possible undefined behavior when reallocating a heap-allocated
<code>CompactString</code>.
<ul>
<li>Implemented in <a
href="https://redirect.github.com/ParkMyCar/compact_str/pull/459"><code>fix:
possible undefined behavior with realloc in a
HeapString</code></a>.</li>
</ul>
</li>
<li>Fixed <code>CompactString::retain</code> to avoid briefly creating
references to invalid UTF-8.
<ul>
<li>Implemented in <a
href="https://redirect.github.com/ParkMyCar/compact_str/pull/469"><code>Avoid
invalid UTF-8 references in retain</code></a>.</li>
</ul>
</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="9696af7f7a"><code>9696af7</code></a>
perf: optimize several parts of the creation code path (<a
href="https://redirect.github.com/ParkMyCar/compact_str/issues/494">#494</a>)</li>
<li><a
href="a7ef9b121a"><code>a7ef9b1</code></a>
start, gate defmt to non-windows (<a
href="https://redirect.github.com/ParkMyCar/compact_str/issues/493">#493</a>)</li>
<li><a
href="6d56de62f3"><code>6d56de6</code></a>
start, bump to v0.10, update the CHANGELOG, README, and examples (<a
href="https://redirect.github.com/ParkMyCar/compact_str/issues/492">#492</a>)</li>
<li><a
href="0e9802a16d"><code>0e9802a</code></a>
docs: catch up CHANGELOG with everything merged since v0.9 (<a
href="https://redirect.github.com/ParkMyCar/compact_str/issues/491">#491</a>)</li>
<li><a
href="696d9e371f"><code>696d9e3</code></a>
deps: update optional deps to latest (bevy_reflect 0.19, markup 0.16)
(<a
href="https://redirect.github.com/ParkMyCar/compact_str/issues/490">#490</a>)</li>
<li><a
href="2b7cda19a5"><code>2b7cda1</code></a>
chore: fix CI, pin zmij for tests (<a
href="https://redirect.github.com/ParkMyCar/compact_str/issues/489">#489</a>)</li>
<li><a
href="252827c668"><code>252827c</code></a>
perf: several small improvements (<a
href="https://redirect.github.com/ParkMyCar/compact_str/issues/488">#488</a>)</li>
<li><a
href="f46409522b"><code>f464095</code></a>
fix: remove <code>#[must_use]</code> from <code>Drain</code> (<a
href="https://redirect.github.com/ParkMyCar/compact_str/issues/486">#486</a>)</li>
<li><a
href="b566442725"><code>b566442</code></a>
deps: replace ryu with zmij for float formatting (<a
href="https://redirect.github.com/ParkMyCar/compact_str/issues/485">#485</a>)</li>
<li><a
href="f5b166b41f"><code>f5b166b</code></a>
perf: bulk-copy valid runs in from_utf8_lossy (<a
href="https://redirect.github.com/ParkMyCar/compact_str/issues/484">#484</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/ParkMyCar/compact_str/compare/v0.9.1...v0.10.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `tokio` from 1.52.4 to 1.53.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/tokio-rs/tokio/releases">tokio's
releases</a>.</em></p>
<blockquote>
<h2>Tokio v1.53.0</h2>
<h1>1.53.0 (July 17th, 2026)</h1>
<h3>Added</h3>
<ul>
<li>fs: implement <code>From&lt;OwnedFd&gt;</code> and
<code>From&lt;OwnedHandle&gt;</code> for <code>File</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8266">#8266</a>)</li>
<li>metrics: add task schedule latency metric (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7986">#7986</a>)</li>
<li>net: add <code>SocketAddr</code> methods to Unix sockets (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8144">#8144</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li>io: add <code>#[inline]</code> to IO trait impls for in-memory types
(<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8242">#8242</a>)</li>
<li>net: implement UCred::pid on FreeBSD (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8086">#8086</a>)</li>
<li>net: support Nuttx target os (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8259">#8259</a>)</li>
<li>signal: refactor global variables on Windows (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8231">#8231</a>)</li>
<li>sync: <code>mpsc::{Receiver,UnboundedReceiver}</code> now drops
waker on drop, even if there are still senders (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8095">#8095</a>)</li>
<li>taskdump: support taskdumps on s390x (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8192">#8192</a>)</li>
<li>time: add <code>#[track_caller]</code> to <code>timeout_at()</code>
(<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8077">#8077</a>)</li>
<li>time: consolidate mutex locks on spurious poll (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8124">#8124</a>)</li>
<li>time: defer waker clone on spurious poll (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8107">#8107</a>)</li>
<li>time: move lazy-registration state into <code>Sleep</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8132">#8132</a>)</li>
<li>tracing: remove unnecessary span clone (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8126">#8126</a>)</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>io: do not treat zero-length reads as EOF in <code>Chain</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8251">#8251</a>)</li>
<li>net: use getpeereid for QNX peer credentials (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8270">#8270</a>)</li>
<li>runtime: avoid illegal state in <code>FastRand</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8078">#8078</a>)</li>
<li>sync: wake mpsc receiver when a queued <code>reserve[_many]</code>
returns permits (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8260">#8260</a>)</li>
<li>taskdump: skip double wake on
<code>Trace::capture</code>/<code>Trace::trace_with</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8043">#8043</a>)</li>
<li>time: avoid stack overflow in runtime constructor (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8093">#8093</a>)</li>
<li>time (alt timer): ensure timers stay in the same runtime after
<code>.reset()</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8169">#8169</a>)</li>
</ul>
<h3>IO uring (unstable)</h3>
<ul>
<li>fs: use io-uring for <code>fs::try_exists</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8080">#8080</a>)</li>
<li>fs: use io-uring for renaming files (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/7800">#7800</a>)</li>
<li>rt: flush io-uring CQE in case of CQE overflow (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8277">#8277</a>)</li>
</ul>
<h3>Documented</h3>
<ul>
<li>docs: clarify cancel safety wording (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8181">#8181</a>)</li>
<li>fs: clarify <code>create_dir_all</code> succeeds if path exists (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8149">#8149</a>)</li>
<li>io: add warning about stdout reordering with multiple handles (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8276">#8276</a>)</li>
<li>net: document pipe <code>try_read*</code>/<code>try_write*</code>
readiness behavior (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8032">#8032</a>)</li>
<li>runtime: document interaction with fork() (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8202">#8202</a>)</li>
<li>sync: clarify broadcast lagging semantics (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8239">#8239</a>)</li>
<li>sync: document memory ordering guarantees for Semaphore (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8119">#8119</a>)</li>
<li>task: explain why <code>yield_now</code> defers its waker (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8254">#8254</a>)</li>
<li>time: add panic docs to <code>timeout_at()</code> (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8077">#8077</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="be689a35f5"><code>be689a3</code></a>
chore: prepare Tokio v1.53.0 (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8294">#8294</a>)</li>
<li><a
href="50f76c71ec"><code>50f76c7</code></a>
chore: prepare tokio-macros v2.7.1 (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8295">#8295</a>)</li>
<li><a
href="f61fccad3c"><code>f61fcca</code></a>
Merge 'tokio-1.52.4' into 'master' (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8290">#8290</a>)</li>
<li><a
href="5e16ee00fa"><code>5e16ee0</code></a>
task: avoid replacing the JoinQueue waker in <code>try_join_next</code>
(<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8279">#8279</a>)</li>
<li><a
href="88212ab64a"><code>88212ab</code></a>
sync: document memory ordering guarantees for Semaphore (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8119">#8119</a>)</li>
<li><a
href="9cae638de6"><code>9cae638</code></a>
examples: add UDP binding to all interfaces docs (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8283">#8283</a>)</li>
<li><a
href="315a320e96"><code>315a320</code></a>
io: fix typo in <code>SimplexStream</code> docs (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8284">#8284</a>)</li>
<li><a
href="dac81bf8c8"><code>dac81bf</code></a>
sync: wake mpsc receiver when a queued <code>reserve[_many]</code>
returns permits (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8260">#8260</a>)</li>
<li><a
href="145f124d98"><code>145f124</code></a>
ci: preserve QEMU exit status in uring kernel tests (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8271">#8271</a>)</li>
<li><a
href="6e8475dd60"><code>6e8475d</code></a>
time: wake <code>DelayQueue</code> after resetting to expired (<a
href="https://redirect.github.com/tokio-rs/tokio/issues/8274">#8274</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/tokio-rs/tokio/compare/tokio-1.52.4...tokio-1.53.0">compare
view</a></li>
</ul>
</details>
<br />

<details>
<summary>Most Recent Ignore Conditions Applied to This Pull
Request</summary>

| Dependency Name | Ignore Conditions |
| --- | --- |
| tokio | [>= 1.36.a, < 1.37] |
</details>


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-18 03:53:34 +00:00
.config
.github
crates
docs
e2e-tests
.editorconfig
.gitignore
.ignore
action.yml
Cargo.lock
Cargo.toml
cleanup-cache.sh
HELP.md
install-from-binstall-release.ps1
install-from-binstall-release.sh
justfile
README.md
release-plz.toml
rust-toolchain.toml
SIGNING.md
SUPPORT.md
zigbuild-requirements.txt

Cargo B(inary)Install

Binstall provides a low-complexity mechanism for installing Rust binaries as an alternative to building from source (via cargo install) or manually downloading packages. This is intended to work with existing CI artifacts and infrastructure, and with minimal overhead for package maintainers.

Binstall works by fetching the crate information from crates.io and searching the linked repository for matching releases and artifacts, falling back to the quickinstall third-party artifact host, to alternate targets as supported, and finally to cargo install as a last resort.

CI build GitHub tag Crates.io

You may want to see this page as it was when the latest version was published.

Usage

$ cargo binstall radio-sx128x@0.14.1-alpha.5
 INFO resolve: Resolving package: 'radio-sx128x@=0.14.1-alpha.5'
 WARN The package radio-sx128x v0.14.1-alpha.5 (x86_64-unknown-linux-gnu) has been downloaded from github.com
 INFO This will install the following binaries:
 INFO   - sx128x-util (sx128x-util-x86_64-unknown-linux-gnu -> /home/.cargo/bin/sx128x-util)
Do you wish to continue? [yes]/no
? yes
 INFO Installing binaries...
 INFO Done in 2.838798298s

Binstall aims to be a drop-in replacement for cargo install in many cases, and supports similar options.

For unattended use (e.g. in CI), use the --no-confirm flag. For additional options please see cargo binstall --help.

Installation

If you already have it

To upgrade cargo-binstall, use cargo binstall cargo-binstall!

Quickly

Here are one-liners for downloading and installing a pre-compiled cargo-binstall binary.

Linux and macOS

curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash

or if you have homebrew installed:

brew install cargo-binstall

Windows

Set-ExecutionPolicy Unrestricted -Scope Process; iex (iwr "https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.ps1").Content

Manually

Download the relevant package for your system below, unpack it, and move the cargo-binstall executable into $HOME/.cargo/bin:

OS Arch URL
Linux x86_64 https://github.com/cargo-bins/cargo-binstall/releases/latest/download/cargo-binstall-x86_64-unknown-linux-musl.tgz
Linux armv7 https://github.com/cargo-bins/cargo-binstall/releases/latest/download/cargo-binstall-armv7-unknown-linux-musleabihf.tgz
Linux arm64 https://github.com/cargo-bins/cargo-binstall/releases/latest/download/cargo-binstall-aarch64-unknown-linux-musl.tgz
Mac Intel https://github.com/cargo-bins/cargo-binstall/releases/latest/download/cargo-binstall-x86_64-apple-darwin.zip
Mac Apple Silicon https://github.com/cargo-bins/cargo-binstall/releases/latest/download/cargo-binstall-aarch64-apple-darwin.zip
Mac Universal
(both archs)
https://github.com/cargo-bins/cargo-binstall/releases/latest/download/cargo-binstall-universal-apple-darwin.zip
Windows Intel/AMD https://github.com/cargo-bins/cargo-binstall/releases/latest/download/cargo-binstall-x86_64-pc-windows-msvc.zip
Windows ARM 64 https://github.com/cargo-bins/cargo-binstall/releases/latest/download/cargo-binstall-aarch64-pc-windows-msvc.zip

From source

With a recent Rust installed:

cargo install cargo-binstall --locked

In GitHub Actions

We provide a first-party, minimal action that installs Binstall:

  - uses: cargo-bins/cargo-binstall@main
    with:
      version: "1.2.3" # optional; defaults to latest

For more features, we recommend the excellent taiki-e/install-action, which has dedicated support for selected tools and uses Binstall for everything else.

Companion tools

These are useful third-party tools which work well with Binstall.

cargo-update

While you can upgrade crates explicitly by running cargo binstall again, cargo-update takes care of updating all tools as needed. It automatically uses Binstall to install the updates if it is present.

cargo-run-bin

Binstall and cargo install both install tools globally by default, which is fine for system-wide tools. When installing tooling for a project, however, you may prefer to both scope the tools to that project and control their versions in code. That's where cargo-run-bin comes in, with a dedicated section in your Cargo.toml and a short cargo subcommand. When Binstall is available, it installs from binary whenever possible... and you can even manage Binstall itself with cargo-run-bin!

Unsupported crates

Binstall is generally smart enough to auto-detect artifacts in most situations. However, if a package fails to install, you can manually specify the pkg-url, bin-dir, and pkg-fmt as needed at the command line, with values as documented in SUPPORT.md.

$ cargo-binstall \
  --pkg-url="{ repo }/releases/download/{ version }/{ name }-{ version }-{ target }.{ archive-format }" \
  --pkg-fmt="txz" \
  crate_name

Maintainers wanting to make their users' life easier can add explicit Binstall metadata to Cargo.toml to locate the appropriate binary package for a given version and target.

Signatures

We have initial, limited support for maintainers to specify a signing public key and where to find package signatures. With this enabled, Binstall will download and verify signatures for that package.

You can use --only-signed to refuse to install packages if they're not signed.

If you like to live dangerously (please don't use this outside testing), you can use --skip-signatures to disable checking or even downloading signatures at all.

FAQ

Why use this?

Because wget-ing releases is frustrating, cargo install takes a not inconsequential portion of forever on constrained devices, and often putting together actual packages is overkill.

Why use the cargo manifest?

Crates already have these, and they already contain a significant portion of the required information. Also, there's this great and woefully underused (IMO) [package.metadata] field.

Is this secure?

Yes and also no?

We have initial support for verifying signatures, but not a lot of the ecosystem produces signatures at the moment. See #1 to discuss more on this.

We always pull the metadata from crates.io over HTTPS, and verify the checksum of the crate tar. We also enforce using HTTPS with TLS >= 1.2 for the actual download of the package files.

Compared to something like a curl ... | sh script, we're not running arbitrary code, but of course the crate you're downloading a package for might itself be malicious!

What do the error codes mean?

You can find a full description of errors including exit codes here: https://docs.rs/binstalk/latest/binstalk/errors/enum.BinstallError.html

Are debug symbols available?

Yes! Extra pre-built packages with a .full suffix are available and contain split debuginfo, documentation files, and extra binaries like the detect-wasi utility.

Telemetry collection

Some crate installation strategies may collect anonymized usage statistics by default. Currently, only the name of the crate to be installed, its version, the target platform triple, and the collecting user agent are sent to endpoints under the https://cargo-quickinstall-stats-server.fly.dev/record-install URL when the quickinstall artifact host is used. The maintainers of the quickinstall project use this data to determine which crate versions are most worthwhile to build and host. The aggregated collected telemetry is publicly accessible at https://alsuren.grafana.net/public-dashboards/12d4ec3edf2548a1850a813e00592b53. Should you be interested on it, the backend code for these endpoints can be found at https://github.com/cargo-bins/cargo-quickinstall/tree/main/stats-server.

If you prefer not to participate in this data collection, you can opt out by any of the following methods:

  • Setting the --disable-telemetry flag in the command line interface.
  • Setting the BINSTALL_DISABLE_TELEMETRY environment variable to true.
  • Disabling the quickinstall strategy with --disable-strategies quick-install, or if specifying a list of strategies to use with --strategies, avoiding including quickinstall in that list.
  • Adding quick-install to the disabled-strategies configuration key in the crate metadata (refer to the related support documentation for more details).

If you have ideas/contributions or anything is not working the way you expect (in which case, please include an output with --log-level debug) and feel free to open an issue or PR.