Skip to content

v0.2.0

Pre-release
Pre-release
Compare
Choose a tag to compare
@thomastaylor312 thomastaylor312 released this 14 Jan 23:38
40b5529

This is the 0.2 feature release for Bindle. This release contains several large breaking changes in both the protocol specification and some of the Rust APIs. Those changes are described in the "Breaking Changes" section.

Installing

You can download the prebuilt binaries for the Bindle CLI client, the Bindle server, and 2 helper CLI tools 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.

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.

Major Features

  • A renamed and better defined Provider trait that replaces the Storage trait
  • A new proxy module that includes a Proxy type. This type takes a configured Bindle client and then implements a Provider, proxying all requests to another Bindle server

Known Issues/Missing Features

  • The standalone bindle implementation does not currently handle tarballs. This will be added in a future release

Breaking Changes

Spec Changes

There was a major spec change in the protocol around how parcels are accessed. Due to the need for signed bundles and role specific authorization (i.e. Alice can only access bindles and parcels in the example.com/foo namespace), parcels are no longer accessed using the _p endpoint. The _p endpoint has been removed and parcels are now subpathed under their particular bindles:

Old

https://bindle.example.com/v1/_p/deadbeef

New

https://bindle.example.com/v1/_i/example.com/foo/1.0.0@deadbeef

This also had the additional benefit of removing the need for separate label files stored alongside parcel.dat files, which means the standalone bindle spec no longer has those as a requirement. The client has been updated to handle these new APIs.

API changes

Provider replacing Storage trait

The largest breaking change of this release is the renaming and modification of the Storage trait to now be a Provider trait. This change was made primarily to model that anything can provide a Bindle. This could be a proxy (which just contacts an upstream server), a cache, or an actual "terminal" provider that stores Bindle in a database or blob store somewhere. The old trait definition was written primarily as a storage access layer rather than something that provides Bindles for a consumer.

As part of this work, most of the parcel related function signatures have changed to require an ID parameter like the invoice methods. This reflects the change made in the spec. The storage module is now called provider as well. You can see the full trait definition here.

This should be the last massive change to the trait, although there could be some more small changes as we work on implementing signing

Other Breaking Changes

  • DumbCache now takes two different Providers. One to serve as local storage and another to serve as a remote provider (likely fetching from an upstream Bindle server)
  • Everything now uses Stream. Before, the Storage trait and other methods that interfaced with it were using AsyncRead implementors. After using this in practice, we realized it was clunky, so everything now deals with Streams

What's next?

Our next anticipated version is 0.3.0 (although we will cut a 0.3.1 if necessary). Our main focus for 0.3 will be around spec improvements, signing, caching, and additional features. 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!