[PM-27382] [Offline Editing] Add core infrastructure for offline-safe edits and version history #6494
+1,232
−66
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
🎟️ Tracking
https://bitwarden.atlassian.net/browse/PM-27382
📔 Objective
This PR is the first step of adding Offline Editing capabilities to Bitwarden, which is one of the highest requested features by the community:
https://community.bitwarden.com/t/offline-editing-management-of-writeable-vault-items/107
This work implements the foundation for conflict detection, conflict-safe sync, and item history/restore.
High-level goal
Enable Bitwarden clients to safely sync edits made offline or concurrently on multiple devices without losing data, while keeping full end-to-end encryption and zero-knowledge guarantees.
This PR introduces:
This is the enabling infrastructure for Offline Editing. It is intentionally easy to implement for all clients (mobile, desktop, browser).
Clients only need to:
It is also backwards compatible: Existing clients that do not support conflict resolution continue to function.
Behavioral summary
RevisionDate.This approach:
📸 Screenshots
No UI changes in this PR. The new history/restore endpoints will allow future clients to present item history and conflict views, but no user-facing UI is added here.
Changes
New internal logic
New API endpoints
GET /ciphers/{id}/historyPOST /ciphers/{id}/history/{historyId}/restoreData access
⏰ Reminders before review
🦮 Reviewer guidelines
:+1:) or similar for great changes:memo:) or ℹ️ (:information_source:) for notes or general info:question:) for questions:thinking:) or 💭 (:thought_balloon:) for more open inquiry that's not quite a confirmed issue and could potentially benefit from discussion:art:) for suggestions / improvements:x:) or:warning:) for more significant problems or concerns needing attention:seedling:) or ♻️ (:recycle:) for future improvements or indications of technical debt:pick:) for minor or nitpick changes