Skip to content

v3.3.0

Choose a tag to compare

@kjanat kjanat released this 08 Jun 10:48
· 49 commits to master since this release
v3.3.0
254105b

PyPI

Added

  • In-place updates for changed entries -- re-running kp2bw now syncs
    KeePass edits onto existing Bitwarden items instead of skipping them. Changed
    notes, passwords, usernames, URIs and custom fields are written via an
    idempotent PUT (an unchanged entry issues no request). Collection
    membership is only ever added, never removed, and a Bitwarden-side favorite
    flag or a passkey absent from KeePass is preserved. Opt out with --no-update
    (env: KP2BW_UPDATE=0) to restore the previous skip-only behavior.

Fixed

  • Updated KeePass notes never reached Bitwarden (#11) -- editing an entry's
    notes (e.g. pasting in new recovery keys) without touching credentials left
    the existing Bitwarden item unchanged, forcing a full vault purge to
    re-import. Existing items are now updated in place on re-run.
  • Long notes not attached to (or refreshed on) previously imported entries
    (#11) -- notes over 10k chars migrate to a notes.txt attachment, but
    previously imported (skipped) entries never received it, and an edited
    attachment that kept the same filename was never updated. Re-runs now upload
    any attachment an existing item is missing and refresh one whose content
    changed (the stale copy is removed only after the replacement uploads), all
    without creating duplicates. Applies to every attachment kp2bw manages --
    long notes, long custom fields, and real KeePass file attachments.
  • A single rejected attachment aborted the whole migration (#11) -- an
    attachment the server refused (for example a .jpg rejected for premium or
    storage-quota reasons) raised an opaque HTTP 400 that stopped everything.
    Upload failures are now non-fatal: the real server message is surfaced
    instead of just the status code, and the migration continues with the
    remaining entries.

What's Changed

Full Changelog: v3.2.0...v3.3.0