Shared SQL database
Live propagation of changes
req~shared-database.live-propagation~1
Changes made by one client — entry modifications, groups, and library settings — appear in all other connected clients without any manual action.
Needs: impl
Change content travels in the notification
req~shared-database.change-content-in-notification~1
A field change notification carries the change itself (entry id, field, old and new value, entry version), so receivers apply it directly. Receivers fall back to pulling from the database whenever the notification does not exactly match their local state.
Needs: impl
Micro-edits are batched
req~shared-database.micro-edit-batching~1
Keystroke-level edits are not written per keystroke: they are buffered and flushed on the next major change or when the library is closed. A flush notifies the other clients.
Needs: impl
Concurrent edits of one entry are detected
req~shared-database.concurrent-edit-detection~1
Two clients editing the same entry cannot overwrite each other unnoticed: the second write is refused and offered for merging, even if both writes happen at the same moment. A refused edit keeps its local state until it is merged.
Needs: impl
Conflicts are resolved by the user in the merge dialog
req~shared-database.conflict-merge-dialog~1
When a local change is refused because the shared entry has a newer version, the user is told which versions collide and is offered the merge entries dialog showing the local and the shared entry side by side. The merged entry replaces the shared one and becomes the local one. Until the user has decided, the local entry keeps its unsynchronized state; cancelling leaves it unsynchronized.
Needs: impl
Existing databases are migrated
req~shared-database.migration~1
Connecting to a database created by an earlier JabRef version copies its content into the current table structure. The old tables are kept, so older JabRef versions continue to work.
Needs: impl
Connection details can be pasted as a URL
req~shared-database.connection-url~1
The login dialog accepts a connection URL as handed out by hosting providers (postgres://user:password@host:port/database?...) or a JDBC URL and fills in the connection details from it. Parameters JabRef has no dedicated setting for are passed on to the driver unchanged.
Needs: impl