Metadata-Version: 2.4
Name: bitwarden-exporter
Version: 1.8.0
Summary: Export Bitwarden vault
Keywords: bitwarden,export,keepass,backup
Author: arpan
Author-email: arpan <me@arpanrec.com>
License-Expression: MIT
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: End Users/Desktop
Classifier: Operating System :: Unix
Classifier: Operating System :: POSIX
Classifier: Operating System :: Microsoft :: Windows
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Topic :: Utilities
Classifier: Topic :: System :: Archiving
Classifier: Topic :: System :: Archiving :: Backup
Classifier: Topic :: Security
Classifier: Topic :: Security :: Cryptography
Classifier: Topic :: System :: Recovery Tools
Requires-Dist: gnupg==2.3.1
Requires-Dist: pydantic==2.12.3
Requires-Dist: pykeepass==4.1.1.post1
Requires-Dist: cachier==4.1.0
Requires-Dist: pyfiglet==1.0.4
Requires-Dist: jmespath>=1.0.1
Requires-Dist: bandit==1.8.6 ; extra == 'dev'
Requires-Dist: black==25.9.0 ; extra == 'dev'
Requires-Dist: isort==7.0.0 ; extra == 'dev'
Requires-Dist: mypy==1.18.2 ; extra == 'dev'
Requires-Dist: neovim==0.3.1 ; extra == 'dev'
Requires-Dist: pylint==4.0.2 ; extra == 'dev'
Requires-Dist: pyright==1.1.407 ; extra == 'dev'
Requires-Dist: types-pyyaml==6.0.12.20250915 ; extra == 'dev'
Requires-Dist: types-requests==2.32.4.20250913 ; extra == 'dev'
Requires-Dist: types-jmespath==1.0.2.20250809 ; extra == 'dev'
Requires-Python: >=3.10
Provides-Extra: dev
Description-Content-Type: text/markdown

# Bitwarden Exporter

Python Wrapper for [Password Manager CLI](https://bitwarden.com/help/cli/) for exporting bitwarden vaults to KeePass.

## Features

- **Comprehensive data mapping**
  - Credentials
  - URIs (Compatible with keepass URL)
  - Notes (Compatible with keepass note)
  - TOTP codes (Compatible with keepass totp)
  - Custom Fields (Compatible with additional attributes)
  - Identity/Cards (Backup only, not supported by Keepass yet)
  - Attachments (Compatible with keepass attachment)
  - SSH keys (Compatible with keepass ssh and attachments)
  - Fido U2F Keys (Backup only, not supported by Keepass yet)
- **Preserves vault structure**
  - Collection and Folder hierarchy is preserved as Keepass groups.
- Built-in JSON snapshot of vault data for auditing.
- Configurable CLI with options for duplicates handling, custom temp directory, debug logging, and Bitwarden CLI path.

Bitwarden Web
![Bitwarden Web](./docs/Screenshot_webvault.png 'Bitwarden Web')

Structure TOTP
![Structure TOTP](./docs/Screenshot_structure_totp.png 'Structure TOTP')

[Other screenshots](./docs/screenshots.md).

## Prerequisites

- [Bitwarden CLI](https://bitwarden.com/help/article/cli/#download-and-install)

- [Python](https://www.python.org/)
  - [uvx](https://docs.astral.sh/uv/guides/tools/) (optional)
  - [pipx](https://github.com/pypa/pipx) (optional)
  - venv (optional)

## Installation

(Recommended) Run with [uvx](https://docs.astral.sh/uv/guides/tools/)
from [PyPI](https://pypi.org/project/bitwarden-exporter/)

```bash
BW_SESSION=<session token> uvx bitwarden-exporter==VERSION --help
```

or

```bash
BW_SESSION=<session token> uvx bitwarden-exporter --help
```

Run it from [source](https://github.com/arpanrec/bitwarden-exporter)

```bash
BW_SESSION=<session token> uvx git+https://github.com/arpanrec/bitwarden-exporter.git@main bitwarden-exporter --help
```

Install with [pipx](https://github.com/pypa/pipx) from [PyPI](https://pypi.org/project/bitwarden-exporter/)

```bash
BW_SESSION=<session token> pipx install bitwarden-exporter
```

## Options

Run `bitwarden-exporter --help` to see all available options.

### Required Options

#### `--export-password`, `-p`

**Required** - Password for the exported KeePass database.

You can provide the password in multiple ways:

- **Direct value**: `--export-password "my-secret-password"`
- **From file**: `--export-password file:secret.txt`
- **From environment**: `--export-password env:SECRET_PASSWORD`
- **From vault** (JMESPath expression):
  `--export-password "jmespath:[?id=='xx-xx-xx-xxx-xxx'].fields[] | [?name=='export-password'].value"`

### Optional Configuration

#### `--export-location`, `-l`

Path for the exported KeePass database file.

- **Default**: `bitwarden_dump_<timestamp>.kdbx`
- **Note**: If the file exists, it will be overwritten.

#### `--allow-duplicates`, `-d`

Allow duplicate entries in the export. Since Bitwarden items can belong to multiple collections, this option controls
whether to create duplicate entries in KeePass.

- **Default**: `--no-allow-duplicates`

#### `--tmp-dir`, `-t`

Custom temporary directory for storing temporary sensitive files during export.

- **Default**: System temporary directory
- **⚠️ Security Note**: Make sure to delete this directory after export.

#### `--bw-executable`, `-e`

Path to the Bitwarden CLI executable.

- **Default**: `bw` (from system PATH)

#### `--debug`

Enable verbose logging for troubleshooting.

- **Default**: `--no-debug`
- **⚠️ Warning**: Debug logs may contain sensitive information. When enabled, the temporary directory will NOT be
  automatically deleted.

## Credits

[@ckabalan](https://github.com/ckabalan)
for [bitwarden-attachment-exporter](https://github.com/ckabalan/bitwarden-attachment-exporter)

## License

MIT
