Repository navigation
bb 0.14.4: downloads straight from storage
bb pull and bb sync can now fetch a file's encrypted chunks directly from Beebeeb's object storage instead of streaming every byte through the API. The server hands out short-lived links for one file at a time. The CLI authenticates and decrypts every chunk on your machine exactly as before: the links carry ciphertext only, and your keys never leave the device. When the server does not offer direct downloads, or refuses a link, the file comes through the API as it did in 0.14.3.
What's New
- Direct downloads. The CLI uses time-limited storage links when the server advertises direct downloads (
GET /api/v1/transfer/capabilities). Chunks are decrypted in order, and the file only appears once it is complete and authenticated. - Automatic fallback. A file that storage cannot serve before the download starts goes through the API instead. A file that fails partway continues on the API's pinned per-chunk route and keeps what was already written.
bb pull --jsonreportstransport(direct,mixedorapi). This is an additive key; existing keys are unchanged.BB_TRANSPORT=api(or--transport api) forces the API for every file.BB_TRANSPORT_TRACE=1prints each transport decision to stderr, never a URL.bb sync --daemonpasses the chosen transport on to its child process.- Uploads still go through the API in this release.
Bug Fixes / Hardening
- A sync pass no longer aborts on a file it cannot read, or on a file that changes during its download. It defers that file and carries on. Under launchd or systemd an aborted pass meant a restart every 30 seconds.
bb pull <file>starts over once from fresh metadata when the file changes mid-download, then says "changed again" if it changes a second time.- The pinned per-chunk route retries rate limits (429), server errors (5xx), a file that is still being written (409) and a broken read: 4 attempts, at most 60 seconds of waiting, honouring
Retry-After. A body of the wrong length, an authorization answer and a vanished version are final. bb syncno longer mistakes a file ID containing409inside a decrypt error for "still uploading". This could make a failed pass exit 0.- Storage requests use an HTTP client of their own, with no cookies, no
Authorizationheader, no redirects and https only. Their error messages never contain a storage URL. bbrefuses to install or remove a LaunchAgent or systemd unit whenHOMEis not your account's home directory (on Linux, also whenXDG_CONFIG_HOMEpoints elsewhere), because the service would run against a different configuration than the one you see. If your home directory is intentionally relocated (for examplesudo -E), run the command again withBB_SERVICE_INSTALL_ALLOW_CUSTOM_HOME=1. Removing a service that is not installed is never refused.- A folder pull reads a file that changed during the pull again once instead of aborting, and the retry does not ask the overwrite question twice.
Compatibility
- This CLI with an older server: the server advertises no direct downloads, so every file uses the API, exactly as in 0.14.3.
- An older CLI with a newer server: unchanged. 0.14.3 and earlier never ask for storage links.
- Dependency change:
beebeeb-core/beebeeb-typespinned to3235dc15(the shared direct-transfer rules). No other dependency versions changed.
Verification
- Full test suite on Linux, at the commit this release is built from, in a sandbox with no network access and an egress recorder: 730 passed, 0 failed, 4 ignored across 24 test binaries; 0 outbound connection attempts; no service manager touched. Clippy with warnings denied and rustfmt are clean.
tests/direct_download.rsruns the realbbbinary against a mock API and a hand-written storage socket. It covers faults, redirects, tampered chunks, expired links, the mixed fallback, and that no link signature appears in any output.tests/service_guard.rsputs recordinglaunchctl/systemctlstubs ahead of the real tools onPATHand scanssrc/for any unguarded call.- Release gates: full required CLI CI, five platform builds, and draft asset readback with checksum assertions before publishing.
Install / Update
bb update
bb --version # bb 0.14.4Homebrew: brew upgrade beebeeb-io/tap/bb. Scoop: scoop update bb. New installs: curl -fsSL https://get.beebeeb.io | sh. Restart a running bb sync daemon after updating.
Full changelog: v0.14.3...v0.14.4