Skip to content

v0.9.0-rc.1

Pre-release
Pre-release
Compare
Choose a tag to compare
@thomastaylor312 thomastaylor312 released this 14 Jul 20:12
· 41 commits to main since this release
v0.9.0-rc.1
92a8dac

This is the first RC (release candidate) 0.9 release for Bindle! The update contains fixes, improvements, and one significant breaking change. Due to this breaking change, we thought it would be appropriate to release this first as an RC, even though it is pre-1.0. There are various people across the WebAssembly community who have started using Bindle, and we want to give those users time to prepare an upgrade to the latest version of Bindle.

Installing

You can download the prebuilt binaries for the Bindle CLI client and the Bindle server from the following links:

Once downloaded, you can follow the installation and getting started instructions

Using as a crate

Besides the pre-compiled binaries, we also publish a fully featured crate (that the binaries also use). You can find docs here.

Major Features

Spec/Server Changes

  • A new optional KeyRing Protocol Specification has been added to the Bindle Spec and to the bindle server implementation. This enables easier fetching of host keys for validation now that signing and verification is required (see Breaking Changes for more details)
  • Clients are now required to follow redirects for parcel GET requests. This enables servers to serve parcels from alternate storage locations.

CLI

  • Key creation and management functions (including KeyRing management) has been added to a new bindle keys subcommand. This command makes it much easier to fetch, create, and manage keys for signing and verifying Bindles
  • There is a new bindle clean subcommand for cleaning up local caches. This is very useful for developers of bindle or those iterating on bindles with a local server
  • bindle sign has new --label and --label-matching flags to select which key to use for signing

Crate

  • Better cargo feature management. Now, if you import the bindle crate with no default features, only the core types and necessary dependencies are pulled in.
  • OpenSSL is no longer required as a transitive dependency if the rustls-tls feature is enabled
  • MSRV is now 1.60+
  • 2 new helper traits for loading and saving KeyRings have been added: KeyRingLoader and KeyRingSaver. These can be implemented for types that may load a KeyRing from a remote source. Default implementations for any types that implement AsRef<Path> have been provided.

Breaking Changes

  • bindle create-key has been moved under the new bindle keys subcommand as bindle keys create
  • bindle print-key has been moved under the new bindle keys subcommand as bindle keys print
  • The SecretKeyStorage trait now has an additional method get_all_matching. Both methods of the trait now have an additional Option parameter for label matching

Required signing and verification

Since the beginning of the Bindle project, our intent has always been for signing to be required. We've seen multiple times in the past where projects that don't enforce signing, or add it later down the line, never have serious uptake on signing. Cryptographic verification of Bindles has been a core concept since the beginning, but our signing toolchain and early project iteration necessitated flexibility with requiring signing. However, now that the project is starting to stabilize somewhat, and with multiple projects taking a dependency on Bindle, we decided to put in the effort to improve the toolchain and require signing and verification of all Bindles.

So, what does this mean for you? Now there are several requirements that must be observed when using Bindle:

  • You must have a key with which to sign your bindles. This can be done by running bindle key create. See the help text for the command for more advanced options.
  • All bindles must be signed before pushing it to a bindle server. This is done using bindle sign. By default, all that is required is a signature by a key with the creator role. bindle key create without any additional arguments will create a key with the creator role
  • Bindle servers must have a KeyRing that contains the public keys of any creator key your bindles will be signed with. Locally, your bindle server and bindle client share the same keyring, so this is handled for you. For production use cases, you can define how you'd like to expose your keyring.
  • Bindles must always be verified when pulling from a bindle server. By default, the client must validate that it trusts the host. The bindle server automatically creates a signing key with the host role if one is not specified. As a client, you have one additional step of running bindle keys fetch once the bindle server is running to fetch the host's public key from the /bindle-keys endpoint and add it your your keychain

For more information on keyrings, verification, and signing, check out the signing specification

Bug fixes

  • The crate and CLI now return clearer error information in various cases
  • When pushing large bindles, it was possible to get a "too many open files" error due to unlimited concurrency underneath the hood. The concurrent upload limit in the bindle client (CLI and crate) is now set to 1024.

Caveats

Please note that this is NOT production-ready software, but it is in a usable/consumable state. Because this is pre-1.0 software, we make no guarantees about spec, Rust API, or CLI compatibility. However, we will do our best to call out every breaking change in future release notes. Once we hit 1.0, backwards compatibility guarantees will be in effect.

What's next?

Our next anticipated version is the full 0.9.0 release (although we will cut a 0.9.0-rc.2 if necessary). Please give things a try and feel free to open PRs or issues with your feedback. In fact, your feedback is crucial as we continue to solidify the spec and features desired in Bindle!

Changelog

  • Adds client code for fetching and adding host keys 1b0af6a (Taylor Thomas)
  • feat(*): Adds bindle keys endpoint de685f1 (Taylor Thomas)
  • added codec feature for tokio-util, cargo update b195e61 (Brooks Townsend)
  • setup native-tls and rustls-tls features 54e2053 (Brooks Townsend)
  • Replaced reqwest default-tls with rustls-tls 27ba682 (Brooks Townsend)
  • Fixes link on README.md 7680de5 (Mikkel Mork Hegnhoj)
  • fix: address "too many open files" error when pushing large bindles 2b2b104 (Joel Dice)
  • minor fix to include both head and get methods for query '_q' 2025504 (VishnuJin)
  • minor-update keys print command's '--label' argument to '--label-matching' to avoid ambiguity ab0b9b2 (VishnuJin)
  • add label match arguments for sign-invoice a973a72 (VishnuJin)
  • add build support for aarch64 linux binary (#328) f7e31cc (VishnuJin)
  • Remove pinned indexmap dependency b04616e (Lann Martin)
  • add overwrite option 2bf00ee (Matthew Fisher)
  • Make "unknown error" client errors a bit more informative (#323) e6b6851 (itowlson)
  • azure-blob-storage-upload v2.0.0 743158b (Matthew Fisher)
  • potential fix to the anticipated issue that could occur when deleting a larger directory in windows using 'clean' subcommand f323ab2 (VishnuJin)
  • create 'clean' subcommand a58da46 (VishnuJin)
  • spec: Require clients follow redirects from parcel GETs d8839f6 (Lann)
  • update the 'Using Bindle' section to stay current a9890ea (VishnuJin)
  • remove the hard coded Bad request error message and display the actual error occured 4f18615 (VishnuJin)
  • minor fix on typos to improve documentation 362015a (VishnuJin)
  • fix(invoice): makes open options much better c31bcc9 (Taylor Thomas)
  • ref(*): Better organizes features and dependencies 7db571f (Taylor Thomas)
  • docs(*): fix erroneous code comment and docs typo (#305) bf8809b (Vaughn Dice)
  • fix(file): Adds error log when IO errors occur on invoice/parcel create 62c26ce (Taylor Thomas)
  • feat(*): Enforce signatures on server 027f509 (Taylor Thomas)
  • ref(cli): Makes global bindle URL less annoying to work with 024f315 (Taylor Thomas)
  • docs(spec): Adds new Keyring protocol spec 209531a (Taylor Thomas)
  • feat(*): Adds required verification to the client c5416b2 (Taylor Thomas)
  • feat(cli): Adds tests for new key functionality 8ad7285 (Taylor Thomas)
  • feat(*): Updates CLI to automatically manage the keyring 38b7294 (Taylor Thomas)
  • feat(keyring): Adds load and save functions to KeyRing a430b98 (Taylor Thomas)
  • fix(ci): Adds conditional for crate publishing caa0def (Taylor Thomas)