Skip to main content

Imports and existing KeePass db with REF fields into Bitwarden

Project description

KP2BW - KeePass 2.x to Bitwarden Converter

Fork of jampe/kp2bw, modernized.

Migrates KeePass databases to Bitwarden via the bw CLI, with advantages over the built-in Bitwarden importer:

  • Encrypted in-memory transfer -- data never hits disk unencrypted (except attachments, which are cleaned up after upload)
  • KeePass REF resolution -- username/password references are resolved: matching credentials merge URLs into one entry; differing ones create new entries
  • Passkey migration -- KeePassXC FIDO2/passkey credentials (KPEX_PASSKEY_*) are converted to Bitwarden fido2Credentials
  • Custom properties & attachments -- imported as Bitwarden custom fields or attachments (values > 10k chars auto-upload as files)
  • Long notes handling -- notes exceeding 10k chars are uploaded as notes.txt attachments
  • Idempotent -- safe to run multiple times without duplicating entries
  • Nested folders -- KeePass folder hierarchy is recreated in Bitwarden
  • Recycle Bin filtering -- deleted entries are automatically excluded
  • Expiry awareness -- expired entries are marked [EXPIRED] in notes; optionally skip them entirely with -skip-expired
  • Metadata preservation -- KeePass tags, expiry dates, and created/modified timestamps are stored as Bitwarden custom fields
  • Tag filtering -- import only entries matching specific tags
  • Organization & collection support -- upload into a Bitwarden organization with automatic or manual collection assignment
  • Full UTF-8 & cross-platform -- works on Windows, macOS, and Linux

Installation

# install with:
uv tool install kp2bw
kp2bw passwords.kdbx

# or run directly without installing:
uvx kp2bw

or from a GitHub URL:

# install with:
uv tool install git+https://github.com/kjanat/kp2bw
kp2bw passwords.kdbx

# run directly without installing:
uvx --from git+https://github.com/kjanat/kp2bw kp2bw passwords.kdbx

Prerequisites

Install the Bitwarden CLI and log in once before using kp2bw:

# optional: point to a self-hosted instance
bw config server https://your-domain.com/

# log in (only needed once; kp2bw uses `bw unlock` afterwards)
bw login <user>

Usage

kp2bw [-h] [-kppw KP_PW] [-kpkf KP_KEYFILE] [-bwpw BW_PW]
       [-bworg BW_ORG] [-bwcoll BW_COLL] [-import_tags TAG ...]
       [-path2name] [-path2nameskip N]
       [-skip-expired] [-include-recyclebin] [-no-metadata]
       [-y] [-v] keepass_file
Flag Description
keepass_file Path to your KeePass 2.x database
-kppw KeePass password (prompted if omitted)
-kpkf KeePass key file
-bwpw Bitwarden password (prompted if omitted)
-bworg Bitwarden Organization ID
-bwcoll Collection ID, or auto to derive from top-level folder names
-import_tags Only import entries with these tags
-path2name Prepend folder path to entry names
-path2nameskip Skip first N folders in path prefix (default: 1)
-skip-expired Skip entries that have expired in KeePass
-include-recyclebin Include Recycle Bin entries (excluded by default)
-no-metadata Don't add tags/expiry/timestamps as custom fields
-y Skip the Bitwarden CLI setup confirmation prompt
-v Verbose output

Troubleshooting

"Invalid master password" on bw unlock

If your password contains special shell characters (?, >, &, etc.), wrap it in double quotes when prompted. See jampe/kp2bw#10 and libkeepass/pykeepass#254 for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

kp2bw-2.0.0rc1.tar.gz (11.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

kp2bw-2.0.0rc1-py3-none-any.whl (13.3 kB view details)

Uploaded Python 3

File details

Details for the file kp2bw-2.0.0rc1.tar.gz.

File metadata

  • Download URL: kp2bw-2.0.0rc1.tar.gz
  • Upload date:
  • Size: 11.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for kp2bw-2.0.0rc1.tar.gz
Algorithm Hash digest
SHA256 6201916e9fcd631fc50e18e6147a6c1c3f4410adb45927d2f9b0d1dc16f48329
MD5 f4ed873d16deaf75a9c8aa55bdf199e5
BLAKE2b-256 ad668d1de2e5548ce1cb3bdb4db555e97adfb4d272f4c6284fe6535c2e7c8672

See more details on using hashes here.

File details

Details for the file kp2bw-2.0.0rc1-py3-none-any.whl.

File metadata

  • Download URL: kp2bw-2.0.0rc1-py3-none-any.whl
  • Upload date:
  • Size: 13.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.4 {"installer":{"name":"uv","version":"0.10.4","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for kp2bw-2.0.0rc1-py3-none-any.whl
Algorithm Hash digest
SHA256 952b379f73b70edeaf87711b9008e480862c6912be3b3e70eb1d2fc096f6b6ca
MD5 0fb1e984661727cb9e10d72d6701716b
BLAKE2b-256 d753f6464e602e76267f692152473013c23bbae56788424ed0044b2bd95722ce

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page