v0.2.0
Pre-releaseThis 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 theStorage
trait - A new
proxy
module that includes aProxy
type. This type takes a configured Bindle client and then implements aProvider
, 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 differentProvider
s. 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, theStorage
trait and other methods that interfaced with it were usingAsyncRead
implementors. After using this in practice, we realized it was clunky, so everything now deals withStream
s
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!