Repository navigation
0.12.0 - 2026-09-29
Beebeeb CLI 0.12.0 — accounts are created on the web; bb explains a missing or lapsed plan
Beebeeb no longer has free signups. A new account starts a trial on Starter, Basic or Pro, and
that trial needs a payment method: a card, or iDEAL, which sets up a SEPA direct debit. Only the
web checkout can take that payment. So accounts are now created on the web, and the server
(beebeeb-io/server#125) refuses account creation from the CLI and the mobile apps with
403 signup_web_only. bb does not create accounts. bb signup sends you to the web signup,
and bb login works as before.
The same server change adds two account states that bb now shows and explains:
- no plan yet: an account that never started a trial.
- trial ended unpaid: the vault is read-only and is deleted 60 days later unless you
subscribe.
Existing Free accounts are grandfathered and see no change. This is a minor release (0.11.1 →
0.12.0) because it adds a command and changes what bb prints. Two pull requests merged since
v0.11.1; only one of them (#53) changes the bb binary.
What's New
bb signupopens the web signup instead of creating an account. It prints
"Create your account at https://app.beebeeb.io/signup — then runbb login.", opens that page
in your browser when one is available, and exits 0. It doesn't open a browser under--json
({"url", "next", "note"}), under--quiet(bare URL), or over SSH / without a display.- The web address follows the API
bbis pointed at:APP_URLif set, otherwiseapi.X→
app.X, and a local API →localhost:5173. A--apipointed at a local or staging server
never hands out a production link.bb passkey addnow uses the same logic. bbnever had a working signup command onmain. #34, which would have added
an email-code + OPAQUE registration flow, was closed without merging in favour of this.
(#53)
- The web address follows the API
bb whoami/bb status,bb quotaandbb billing showshow the account state. The
state comes fromGET /api/v1/billing/subscription. An account with no plan yet shows plan
none, stateno plan yet, uploadblockedand "Your account has no plan yet — choose one
at https://app.beebeeb.io/choose-plan". A lapsed account showsread-only (trial ended)and
"Your trial has ended; your vault is read-only and will be deleted on . Subscribe at
https://app.beebeeb.io/billing?view=change".--jsononwhoamiandquotagains
account_state(ok/needs_plan/lapsed) anddata_deletion_at. A server that
predates the change sends neither field, which reads asok, and so does any valuebb
doesn't recognise. (#53)
Bug Fixes / Hardening
- Refused uploads and shares say why and where to fix it. For an account without a plan,
the server refuses upload init and share creation with409 plan_requiredor
409 account_lapsed.bb push,bb sync,bb webdav,bb mount,bb repairand
bb sharenow show the matching message above, with the plan-chooser or billing link,
instead of the server's generic text. The older413 quota_exceededrefusal is explained the
same way when the account state calls for it; on an account whose state isokit is left as
it was.- Any other
409, such as an upload already in progress or a stale base version, reaches you
unchanged. - The error code and HTTP status are kept, so retry behaviour is unchanged. (#53)
- Any other
- No extra round-trip on the happy path.
bb pushchecks the account state from the
subscription it already fetched before uploading. Every other path fetches the subscription
only after a refusal. It skips the fetch forplan_requiredand fetches at most once per run
otherwise, so abb syncof many files doesn't refetch per file. If that fetch fails, the
lapsed message still appears, just without a date. (#53) - An unused
ApiClient::signup(a plain-password/auth/signupcall with no callers) was
removed, so the CLI now has no account-creation code at all. (#53) - #52 bumped the Scoop manifest to the already-released v0.11.1. It doesn't touch
src/or changebb's behavior.
Verification
CI on the code this release ships (175d8f7, main — the release commit on top of it only bumps the version to 0.12.0 and updates this file and the changelog; its own CI run on the release-notes PR carries the same checks):
https://github.com/beebeeb-io/cli/actions/runs/36518562618
cargo build --verbose— succeeds.cargo test --verbose— every test binary green:- main suite (
bb):test result: ok. 317 passed; 0 failed; 2 ignored; 0 measured; 0 filtered out; finished in 76.37s. That is 51 more than 0.11.1's 266. The new tests cover the web-URL
derivation, account-state parsing with missing, null and unknown fields, the signup and
lapsed/no-plan messages, thebb pushpre-check, and mock-server tests of the409/413
mapping. The mock-server tests include no subscription lookup on a successful upload, one
lookup per client, an unrelated409left untouched, and share creation. auth_errors:test result: ok. 6 passed; 0 failedecdh_compat:test result: ok. 4 passed; 0 failedmount_availability:test result: ok. 3 passed; 0 failednon_interactive:test result: ok. 6 passed; 0 failedpull_overwrite:test result: ok. 5 passed; 0 failedshare_resolves_like_pull:test result: ok. 1 passed; 0 failedzero_byte_files:test result: ok. 4 passed; 0 failed- Total: 346 passed, 0 failed, 2 ignored across 8 binaries.
- main suite (
cargo test --bin bb help_links_return_200 -- --ignored --nocapture(network-dependent, run
separately from the main suite) —test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 318 filtered out.cargo clippy --all-targets -- -D warnings— clean (CI job "Clippy & Format", same run).cargo fmt -- --check— clean (same job).- A debug build of this code was run against a local mock API for each account state (not a
real server). For no
plan and for lapsed,bb pushrefused with the messages above and exited 1, and
bb whoami/bb quota/bb billing showshowed the notice. For a pre-0.12 server
response,bb whoamishows stateokand the plan as before. dist planwas not run for this notes PR — cargo-dist isn't installed on the machine that
prepared it. It still runs as the first, fail-closed step of the tag-triggered release
workflow, which also re-validates this file names0.12.0before anything builds.
Install / Update
curl -fsSL https://get.beebeeb.io | sh # macOS / Linux
brew upgrade beebeeb-io/tap/bb # macOS, Homebrew
scoop update bb # Windows, Scoop
macOS and Linux installs (shell installer or Homebrew) self-update on next run via the built-in
OTA updater. Windows installs do not self-update yet — run scoop update bb to get 0.12.0.
The Scoop manifest (scoop/bb.json) is bumped by a follow-up pull request that the release
workflow opens once this release is published. Until that pull request is merged,
scoop update bb still installs 0.11.1. To get 0.12.0 on Windows before then, download it from
the assets below.
Full changelog: v0.11.1...v0.12.0