pass-import-1pux#
Import 1Password 1pux exports to passwordstore with full history, attachments, and metadata preservation.
Getting Started#
- Install
uvfrom https://docs.astral.sh/uv/getting-started/installation/. - Export your 1Password data: File → Export → 1PUX format (⚠️ unencrypted - handle securely).
- Ensure
gpgis configured with a key pair (gpg --gen-keyif needed). - Run
uv run pass-import-1pux --input export.1pux --store ~/.password-store --gpg-id your@email.comto import. - Access passwords with
passorpass -c path/to/entry(copies to clipboard). - Shred the
.1puxfile when finished:shred -u export.1pux.
Architecture#
- Frameworks: Python 3.8+ managed with
uv. Entry point insrc/pass_1pux_import/cli.pywires the import pipeline; core logic lives inparser.py,transformer.py,importer.py, andverifier.py. - Parser:
OnePasswordParser(inparser.py) unpacks.1puxarchives, extracts account/vault/item JSON, and resolves attachment file handles to their encrypted blobs. - Transformer:
PassStoreTransformer(intransformer.py) maps 1Password items (Login/Password/SecureNote/Document/CreditCard) to passwordstore text format. Sanitizes vault/category names into filesystem paths (vault/category/title-username.gpg), handles collisions with UUID suffixes, and formats URLs/usernames/TOTP/tags/notes/attachments into structured entries. - Importer:
PassStoreImporter(inimporter.py) initializes the passwordstore git repo, commits transformed entries withpass insert, and replays password history by committing older versions first with backdated timestamps (GIT_AUTHOR_DATE/GIT_COMMITTER_DATE). - Verifier:
PassStoreVerifier(inverifier.py) performs lossless-transfer checks after import: item count, UUID presence, attachment existence, password history depth, and critical field preservation (URLs/tags/notes). - Password history: Instead of inline text, the importer replays password changes as git commits with original timestamps. Retrieve old passwords via
git log -p entry.gpg | gpg -dorgit show HEAD~2:entry.gpg | gpg -d. - Attachments: Extracted from 1pux bundle and stored encrypted in
<entry>.attachments/<filename>.gpgalongside their parent entry. Verifier confirms all attachment metadata points to real files.
Security Considerations#
- The
.1puxexport is unencrypted. Store outside the repo, shred after import, never commit to version control. - Passwordstore entries and attachments are GPG-encrypted with your key. Confirm
gpg -dworks before relying on the store.
Disclaimer#
This software was vibe-coded with Anthropic's Sonnet 4.5 using Claude Code and OpenAI's Codex 🤖. Contributor and automation guidelines live in AGENTS.md.