Skip to content
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

Collaborative terminals #13339

Open
davidbrochart opened this issue Oct 28, 2022 · 3 comments
Open

Collaborative terminals #13339

davidbrochart opened this issue Oct 28, 2022 · 3 comments

Comments

@davidbrochart
Copy link
Contributor

I also opened this issue in jupyter-server.

Problem

Currently, terminals are rendered in JupterLab with xterm.js, and the backend serves the "terminal protocol" over WebSocket. This allows collaboration, as the back-end broadcasts terminal events to all front-ends, and so everyone sees what others are doing in real-time.
But it doesn't handle conflicts. For instance, imagine a text editing terminal application, like vim. Ultimately, this is equivalent to a shared document, and it will not play well if several users modify it concurrently.

Proposed Solution

I think we could have a "Y shared terminal" document. Actually, it could almost consist of just a YText (plus handling of styling, colors, etc.), as far as the Y structure is concerned. But of course the back-end would need to "speak the terminal protocol", and translate that to cursor movement/character insertion/deletion in the YText. We could use pyte for that.
Then we could get rid of the terminals WebSocket (as it would go through the Y WebSocket), and xterm.js in JupyterLab. We would still need a renderer though, for colors and such, but in principle a simple text editor would be enough.

Additional context

This is going in the same direction as #12867, basically taking advantage of RTC and reducing the complexity of front-ends: they don't need to speak the kernel protocol or the "terminal protocol".

@kzgrzendek
Copy link

kzgrzendek commented Nov 7, 2023

That's super interesting, and for sure be less confusing for the users! :)

Any news on that @davidbrochart ?

@davidbrochart
Copy link
Contributor Author

I'm actually working in that direction in jupyter-server/jupyverse#364. This PR will allow frontends to be pure shared document renderers, they won't have to speak any other protocol than the Y protocol.

@kzgrzendek
Copy link

That is great to know, thank you for the feedback :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants