Skip to content

v3.0.0

Choose a tag to compare

@kjanat kjanat released this 26 Feb 22:33
· 67 commits to master since this release
v3.0.0
59ba3c2

PyPI

Highlights

Stable release of the bw serve HTTP transport rewrite. All features from the 3.0.0a1/a2 prereleases, plus:

  • Strict TypedDict API layerBwItemCreate, BwItemResponse, BwItemLogin, BwUri, BwField, BwFido2Credential, BwFolder, BwCollection. All dict[str, Any] eliminated from transport code. Generated _bw_api_types.py is the canonical source for spec-derived shapes.
  • Org-scoped dedup index — Fixes collection-blind imports where personal-vault entries shadowed an empty org vault. Dedup is now scoped to organizationId and optionally collectionId.
  • Collection-aware import — Items already in the org but in a different collection get a PUT to add the target collection instead of being silently skipped.
  • Rich progress bars — Live progress for processing, creating, and uploading phases, plus a final migration summary.
  • FIDO2/passkey migration — KeePassXC KPEX_PASSKEY_* attributes converted to Bitwarden fido2Credentials.
  • Codegen drift CIcodegen-check.yml fails PRs when _bw_api_types.py drifts from specs/vault-management-api.json.

New since v2.0.0

  • bw serve HTTP transport (persistent process, automatic port, health polling, signal-safe cleanup) by @kjanat in #2
  • Batch import via bw import for bulk creation
  • Async parallel attachment uploads (bounded concurrency)
  • O(1) dedup index (no more per-item API lookups) by @kjanat in #3
  • -d / --debug flag for full DEBUG logging
  • -v now shows kp2bw operational detail only (httpx silenced)
  • KeePass metadata migration (tags, expiry, timestamps) as custom fields
  • --skip-expired / --include-recycle-bin / --metadata flags
  • CLI help metavars improved
  • All env vars documented (KP2BW_*)

Key fixes

  • Shell injection in bw import (replaced shell=True)
  • bw serve IPv6 binding mismatch causing 60s timeout
  • organizationId query param casing on collection list
  • Dedup cache stale after collection PUT
  • Signal handler init race on early timeout
  • close() double-call crash
  • Sensitive secrets redacted from diagnostic output

Breaking changes

  • Requires Python ≥ 3.14
  • New dependencies: httpx>=0.28.0, rich>=13.0.0
  • Transport layer completely replaced — CLI behavior is the same but internal API changed

Full Changelog: v2.0.0...v3.0.0