1Password→Bitwarden−$8/mo · −$96/yr
Unlimited devices, self-hostable vault, importer that actually works.
Easy1 hourdocker compose ready
Why switch
- ▸1Password Families is $8/user-ish with device limits on lower tiers.
- ▸Bitwarden is free for unlimited devices, has official self-hosting (Vaultwarden for small teams), and annual exports keep you exit-ready.
- ▸Browser extension and mobile apps are mature — the team stops noticing the change within a week.
The migration
- 01
Deploy Vaultwarden (small teams) or Bitwarden RS
Vaultwarden is a lightweight Rust server compatible with all Bitwarden clients — perfect under 50 users. Put it behind your reverse proxy with TLS.
bashrun on your servermkdir vaultwarden && cd vaultwarden curl -O https://raw.githubusercontent.com/aa-humaaan/thealtstack/main/docker-deploy/vaultwarden/docker-compose.yml docker compose up -d - 02
Export from 1Password
1Password → File → Export → All items → 1PUX/CSV per vault. Export each vault separately to preserve structure.
- 03
Import into Bitwarden
Web vault → Tools → Import data → format 1Password (1pux/ifm). Folders map to folders; attachments need a manual pass.
- 04
Roll out clients
Point the Bitwarden extensions/apps at your server URL, enable TOTP autofill, and turn on the emergency kit/export policy so the vault never becomes a new lock-in.
Gotchas — read before you cancel
- ⚠Passkeys and SSH agent support: Bitwarden has them, Vaultwarden tracks upstream with a lag — check before you rely on them.
- ⚠1Password Travel Mode has no equivalent; plan offline access via client cache instead.
- ⚠Set a backup cron of the vaultwarden data directory — a vault is the one database you always back up.
Only cancel when this is true
- ✓A credential autofills in the browser from your server
- ✓TOTP codes generate for a test entry
- ✓A vault backup file exists outside the server
Replacing more than one tool?
The Stack Composer bundles Bitwarden with the rest of your open-source stack into one docker-compose file.
Open in Stack Composer →