-
-
Notifications
You must be signed in to change notification settings - Fork 3.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Real Time Collaboration #5382
Comments
Many people, including myself are interested in helping out with this feature. Where can we find some more info on the progress and todo’s of this feature? It seems that the refactoring of the notebook model is an inhibiting factor on the progress. Is it perhaps possible to work on a prototype that supports text documents in JupyterLab? This would enable us to implement other parts of the feature. |
Your assessment is right on - that the refactoring of the notebook model to use a real-time data store is the blocking point. Most of the core work is complete in this branch: https://github.com/phosphorjs/phosphor/tree/feature-tables3/packages/datastore This month, we are developing a plan that will enable others to jump in and help us finish the last few pieces. We will be posting updates here as we get to that point. We are hoping that the work can be done in parallel by a number of folks, so your help would be greatly appreciated. This last year has been rough for the team with a number of our upstream funding sources shifting priorities for reasons unrelated to JupyterLab. In the meantime, beginning to look through the code in that branch would be a good way to get going. |
Just an update: I'm currently putting in some work on that phosphor branch, and I will be adding code for lab to synchronize RTC data (webscoket based exchange of transactions). I'll be linking relevant PRs here as they come along. I guess adding a text editor RTC proof of concept is a decent start there, before transitioning to the notebook model refactor. Some parallel tasks that are up for grabs:
If anybody has the time to sprint on these things, I'd be happy to set up video calls to get people up to speed quickly. |
Me, @ian-r-rose and @afshin had a short talk about the refactoring that needs to happen to best support the phosphor datastore backend. These were some of the main points (cleaned up after the fact by me):
Other inputs to any of these points are very welcome! |
|
I think it would be nice to have a call to slough through some of the main issues for RTC. E.g. about the permissions things that you mentioned with @Zsailer, but also several other points. If I said early next week, late EU / early US time, who would potentially be interested/available? Add a 👍 emoji to this post if interested. |
I would be interested. How about we signal interest in being included by +1'ing your comment above? |
Current status:
More? I'll try to keep this updated. Current lab work is here: https://github.com/vidartf/jupyterlab/tree/rtc |
From a discussion in #6003, I wanted to summarize the UX design and usage cases that are driving the CRDT based real-time approach in JupyterLab. As a number of other groups are working on real time collaboration, I think it is important to clarify the UX design questions and usage cases. Here are some of them:
|
Commands to try out the current notebook RTC (WIP):
Once you have the git branches checked out in a common root (phoshpor and jupyterlab directory as siblings), you can set up the build like normal: cd phosphor
npm install
npm run build
cd ../jupyterlab
pip install -e .
jlpm install
jlpm run build
jupyter lab --dev-mode --dev --no-browse |
Thanks @vidartf |
On the
Thoughts? |
@ellisonbg It is supposed to be |
Yep, brain got rewired typing the phosphor commands... |
@vidartf got a successful build and jupyter lab launch but creating a new notebook gives
but just following the error and changing the line to include |
I am getting the same error when trying to create new notebook:
|
Hmm, I did a complete |
In case it helps, here is the version of everything I can think of that might be involved in the build: tool versions
pip freeze
phosphor generated `package-lock.json`
phosphor datastore generated `package-lock.json`
This was my first time building jupyter lab from source so it might have picked up some newer packages? |
The issue @ellisonbg had was solved by using
|
@vidartf could you please point to any relevant documentation for this feature. I am looking for an architecture/design diagram or such which will be super helpful to understand the implementation details. Also Jupyterlab persists the notebooks on disk, so will this feature introduce a different persistence layer? I see you mention about LFS etc. Any pointers will be very helpful. |
I had to do a |
@EWouters you might want to use the latest alpha release directly which should be more convenient: pip install jupyterlab --pre
jupyter lab --collaborative |
@dmonad Many thanks. Is there an issue or pr where I could monitor that progress? |
Is there a context menu to enable it at the run time? |
Hey guys, the |
The real-time collaboration gives us the foundation to solve #9621, but we haven't solved that issue yet. We still need to build some things on top of RTC to solve that issue. |
Great feature! |
I'd love to test this feature. But even when installing the current beta 3.1.0b0 and running |
Hi @iimog, to get the "Share" entry you also need to install pip install jupyterlab-link-share or conda: conda install -c conda-forge jupyterlab-link-share and then reload JupyterLab. I wonder if it would be a good idea to include it by default in 3.1... |
This issue is meant to track the discussion and implementation of Real Time Collaboration (RTC) in JupyterLab.
Broadly, we wish to enable RTC for state across the application. Specifically, document models such as text and notebook models should be readily shareable.
This sharing of state should scale (Jupyter is regularly deployed to 1k-10k's of users in enterprise or academic settings).
We will move toward a server-side representation of model state, allowing us to handle kernel messages when there is no active front end, and then render an accurate reflection of the document when the UI is loaded.
Additionally, save and load of the document should be done via the RTC server, to prevent conflict with the on-disk representation.
Additional design goals and constraints:
To that end, we have been working on an implementation of the conflict-free replicated data type (CRDT) algorithm that meets our design goals here, with a prototype server implementation here. There is also discussion around the impact to the notebook model (as a representative complex model) here.
The text was updated successfully, but these errors were encountered: