Index Migrations
SeedPass stores its password index in an encrypted JSON file. Each index contains
a schema_version
field so the application knows how to upgrade older files.
How migrations work
When the vault loads the index, Vault.load_index()
checks the version and
applies migrations defined in password_manager/migrations.py
. The
apply_migrations()
function iterates through registered migrations until the
file reaches LATEST_VERSION
.
If an old file lacks schema_version
, it is treated as version 0 and upgraded
to the latest format. Attempting to load an index from a future version will
raise an error.
Upgrading an index
- The JSON is decrypted and parsed.
apply_migrations()
applies any necessary steps, such as injecting theschema_version
field on first upgrade.- After migration, the updated index is saved back to disk.
This process happens automatically; users only need to open their vault to upgrade older indices.
Legacy Fernet migration
Older versions stored the vault index in a file named
seedpass_passwords_db.json.enc
encrypted with Fernet. When opening such a
vault, SeedPass now automatically decrypts the legacy file, re‑encrypts it using
AES‑GCM, and saves it under the new name seedpass_entries_db.json.enc
.
The original Fernet file is preserved as
seedpass_entries_db.json.enc.fernet
and the legacy checksum file, if present,
is renamed to seedpass_entries_db_checksum.txt.fernet
.
No additional command is required – simply open your existing vault and the conversion happens transparently.
Parent seed backup migration
If your vault contains a parent_seed.enc
file that was encrypted with Fernet,
SeedPass performs a similar upgrade. Upon loading the vault, the application
decrypts the old file, re‑encrypts it with AES‑GCM, and writes the result back to
parent_seed.enc
. The legacy Fernet file is preserved as
parent_seed.enc.fernet
so you can revert if needed. No manual steps are
required – simply unlock your vault and the conversion runs automatically.