v0.9.0-rc.1
Pre-releaseThis 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 thebindle
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
andKeyRingSaver
. These can be implemented for types that may load a KeyRing from a remote source. Default implementations for any types that implementAsRef<Path>
have been provided.
Breaking Changes
bindle create-key
has been moved under the newbindle keys
subcommand asbindle keys create
bindle print-key
has been moved under the newbindle keys
subcommand asbindle keys print
- The
SecretKeyStorage
trait now has an additional methodget_all_matching
. Both methods of the trait now have an additionalOption
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 thecreator
role.bindle key create
without any additional arguments will create a key with thecreator
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 runningbindle 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)