Merge Kdbx databases
masterKdbxWeb supports conflict-free merging. To merge a remote database into a local one while preserving edit state (useful for P2P or sync scenarios):
- Save the local database.
- Capture the local edit state using
db.getLocalEditState()(this is JSON serializable). - Close the local database.
- Reopen the local database and restore the state using
db.setLocalEditState(state). - Load the remote database and call
db.merge(remoteDb). - Save the merged local database.
let db = await kdbxweb.Kdbx.load(data, credentials); // load local db
// work with db
db.save(); // save local db
let editStateBeforeSave = db.getLocalEditState(); // save local editing state (serializable to JSON)
db.close(); // close local db
// reopen it again
db = kdbxweb.Kdbx.load(data, credentials);
db.setLocalEditState(editStateBeforeSave); // assign edit state obtained before save
// work with db
let remoteDb = await kdbxweb.Kdbx.load(remoteData, credentials);
db.merge(remoteDb); // merge remote into local
delete remoteDb;
let saved = await db.save(); // save local db