Real-time Editing of Issue Descriptions (REID)
Problem
- It's hard to collaborate on things in GitLab because many views require full page refreshes to get fresh data.
- Only one person can edit an issue description at a time, leading to frequent error messages saying that data is out of date.
Proposal
Once the blocked issues are resolved and we have a performant websocket implementation (conversation thread - #21473 (comment 301908510)), refactor to the Description editor to support real-time collaboration.
Resources
#21473 https://docs.google.com/presentation/d/1Udq3GiA8WGFIFKZry4T54DX5B-zrgq6ALfFIfXRFyuU/edit#slide=id.gc61c3ec9af_0_6 https://www.youtube.com/watch?v=669oha58M_o
Possible Implementation Approaches
Assumptions
- We will need some sort of CRDT or OT model in order achieve true collaborative, conflict free editing.
- We will need to integrate with TipTap as that is what the ~"group::editor" team is leveraging for our eventual new, shared markdown and text editor across the product.
Backend
- Node: Use Operational Transformation (OT) via something like ShareDB. View example PoC
- Pros: It already exists.
- Cons: It is a node service and support for PostgresQL is experimental.
- Node: Use Conflict Free Replicated Data (CRDT) via something like Y.js or Automerge.
- Pros: It already exists, will be natively supported by TipTap, and can be integrated with our existing DB to save state.
- Cons: It is a node service.
- DB: Stream DB changes to the client via something like RethinkDB. (conversation thread: #21473 (comment 301470432))
- Pros: It already exists.
- Cons: It would introduce another database which also introduces other challenges like synchronization between a NoSQL DB and PostgresQL.
- Go + Redis: We implement our own CRDT or OT model and make it compatible TipTap, our websockets implementation, and DB. Example using Redis + Go
- Pros: ?
- Cons: ?
- Ruby: We implement our own CRDT or OT model in Ruby, leverage our existing websocket infrastructure (which also relies on Workhorse), and integrate wit TipTap. example CRDT data types modeled in Ruby
- Pros: ?
- Cons: ?
This page may contain information related to upcoming products, features and functionality. It is important to note that the information presented is for informational purposes only, so please do not rely on the information for purchasing or planning purposes. Just like with all projects, the items mentioned on the page are subject to change or delay, and the development, release, and timing of any products, features, or functionality remain at the sole discretion of GitLab Inc.