WEBVTT

00:00.000 --> 00:11.440
So, let me welcome the next speakers. We have Blinri and Moritz and they are going to talk

00:11.440 --> 00:17.000
about Tim Type, really play your mode for your text editor to watch a collaborative editing

00:17.000 --> 00:24.000
protocol. Let's welcome them with a round of applause.

00:25.000 --> 00:32.000
Hi, thanks for the introduction. We kind of split this talk into two parts.

00:32.000 --> 00:37.000
The first part is about showing you a tool that we built over the past two years.

00:37.000 --> 00:45.000
And the other part is about like we want to pitch you an idea that allows you to add your own tools to the mix.

00:45.000 --> 00:49.000
But we're going to start with our tool.

00:49.000 --> 01:00.000
Hi, I'm Moritz, and Tim Type has been inspired by things like ESA PET, where you can type text together.

01:00.000 --> 01:11.000
But we also wanted to co-together, and there's some solution that is a co-life share where you are bound to a specific editor.

01:11.000 --> 01:19.000
So what we want to have instead is something that's interoperable between editors. We like NeoVem, so we are kind of biased.

01:19.000 --> 01:28.000
But we also want to have an e-mix implementation, and we do have the VS Codeum implementation to edit local text files together.

01:28.000 --> 01:32.000
So, especially paper programming and no taking.

01:33.000 --> 01:43.000
I'm open source project that is also funded by an Lnet and a prototype fund, and I think it's a perfect job by Nico in the schedule, because it fits very well with what we've seen before in the talk.

01:43.000 --> 01:46.000
And we used to be called ESA think.

01:46.000 --> 01:49.000
And I think the best is just to show you.

01:49.000 --> 02:01.000
So, this is another demo, and this is quite light, but I hope I cannot change the color, but I will make it bigger.

02:01.000 --> 02:06.000
And to use it, there's a demon that has started with team type share.

02:06.000 --> 02:12.000
And I have to confirm that I want to do this in this empty directory.

02:12.000 --> 02:18.000
And then there's a team type join six conformist facial.

02:18.000 --> 02:26.000
And Blinry is joining, so we will hopefully soon.

02:27.000 --> 02:29.000
So, Blinry joined.

02:29.000 --> 02:30.000
I think I did.

02:30.000 --> 02:31.000
And you didn't?

02:31.000 --> 02:32.000
No.

02:32.000 --> 02:34.000
Okay, someone else did.

02:34.000 --> 02:41.000
So, five to back on off, please let us demo this, and then we can test it together later.

02:41.000 --> 02:46.000
We discussed, can we trust the room to mess with us or not?

02:46.000 --> 02:51.000
So, all we have problems with the internet, that's your other option.

02:51.000 --> 02:53.000
No, I think it's mine.

02:53.000 --> 02:58.000
So, connected, connected, connected, and still no files here.

02:58.000 --> 03:01.000
But now, Blinry opened the file on that system.

03:01.000 --> 03:04.000
So, I see a file I can open it with my new event.

03:04.000 --> 03:09.000
I'm connected, and I can type while Blinry is typing.

03:09.000 --> 03:15.000
So, this is, and we can also have selections.

03:15.000 --> 03:19.000
And we also can have VS Codeium.

03:19.000 --> 03:26.000
So, I can open the file here, and also see the other two cursors.

03:26.000 --> 03:28.000
And we type it at the same time.

03:28.000 --> 03:29.000
Yeah.

03:29.000 --> 03:30.000
So, second file.

03:36.000 --> 03:38.000
Yeah, so we can also have more files.

03:38.000 --> 03:41.000
And there's something like a team type follow if you want to, like,

03:41.000 --> 03:47.000
a paragraph and just watch, or I can jump to the cursor, and no range.

03:47.000 --> 03:51.000
Okay, there's some mysterious error.

03:51.000 --> 03:56.000
So, I want to jump to Blinry, and then I'm in the second file in the event.

03:56.000 --> 03:58.000
Okay.

03:58.000 --> 03:59.000
So, there's a demo part.

03:59.000 --> 04:01.000
Thank you.

04:01.000 --> 04:03.000
And up to Blinry.

04:03.000 --> 04:04.000
All right.

04:04.000 --> 04:08.000
If you're curious how this works, by the way, you can check out the talk from last year.

04:08.000 --> 04:12.000
And where we talked about, like, our basis, we're using AutoMurge, Iro,

04:12.000 --> 04:16.000
and Magic Remholes, so we kind of standing on the shoulders of clients.

04:16.000 --> 04:20.000
And we want to hone in on this very specific part in this talk,

04:20.000 --> 04:25.000
which is about the connection between the editor and the rest of the system.

04:25.000 --> 04:30.000
And currently, what we did is, like, to build individual editor plug-ins, right?

04:30.000 --> 04:32.000
We have one for any of them, for VS Code.

04:32.000 --> 04:36.000
We're starting on the work for a plug-in and e-mix, and to make the others.

04:36.000 --> 04:38.000
And they're talking to a team-type demon.

04:38.000 --> 04:42.000
And the demon then communicates to other demons and other computers.

04:42.000 --> 04:47.000
But now, imagine that he would like to have some other collaborative applications, maybe,

04:47.000 --> 04:49.000
from your text editor.

04:49.000 --> 04:54.000
For example, you want to talk to a hedgehog server, or maybe you want to talk to a peer-to-pender.

04:54.000 --> 04:59.000
You would need currently to have, like, individual plug-ins for all of these arrows, right?

04:59.000 --> 05:03.000
You would need a new plug-in that talks to hedgehog, for example.

05:03.000 --> 05:06.000
And that's kind of inconvenient, and that's a lot of arrows.

05:06.000 --> 05:11.000
And if you think about it, like, in other areas where, like, you want to give capabilities to text editors,

05:11.000 --> 05:14.000
this has been solved already.

05:14.000 --> 05:18.000
For example, if you want to have code computations or diagnostics in editors,

05:18.000 --> 05:23.000
before you had the situation on the left where you need one plug-in per language

05:23.000 --> 05:26.000
on the left and per editor on the right.

05:26.000 --> 05:32.000
But it was solved by the language server protocol, where, like, the editors only need to implement this protocol.

05:32.000 --> 05:37.000
And then, like, the tooling support also need to implement it, and all combinations can talk to each other.

05:37.000 --> 05:40.000
And that seems really convenient for this purpose.

05:40.000 --> 05:45.000
Other areas where similar situations exist are the debug adapter protocol that gives, like,

05:45.000 --> 05:48.000
debugging capabilities to editors.

05:48.000 --> 05:56.000
And more recently, the model context protocol allows adding LLN capabilities to editors.

05:56.000 --> 06:04.000
So we see a gap here where it would be really nice to have something like a collaborative editing protocol for text editors,

06:04.000 --> 06:10.000
that you can implement in one editor once, and, like, maybe once for collaborative application,

06:10.000 --> 06:12.000
and all of those combinations can talk to each other.

06:12.000 --> 06:16.000
So if you take one thing away from this talk, maybe it would be that,

06:16.000 --> 06:18.000
having this would be really cool.

06:18.000 --> 06:22.000
And now the question is, like, how to build that?

06:23.000 --> 06:29.000
So we already have something, obviously, working for team type, and the ideas to abstract the way from it,

06:29.000 --> 06:33.000
and also similar to Andreas said in the previous talk,

06:33.000 --> 06:39.000
that we kind of have some interoperability even between, like, the different solutions that we see here.

06:39.000 --> 06:43.000
What we have so far is, Carlson, Jason, or PC protocol.

06:43.000 --> 06:45.000
So we are based on Jason, or PC.

06:45.000 --> 06:47.000
We are inspired by LLSP.

06:47.000 --> 06:50.000
So there's the question, can it work with LLSP as well?

06:50.000 --> 06:55.000
And there's also a solution grade, which would be based on HTTP.

06:55.000 --> 06:59.000
If you have other ideas, how just could work, please reach out to us.

06:59.000 --> 07:01.000
The contact will be in the end.

07:01.000 --> 07:03.000
Currently it works.

07:03.000 --> 07:06.000
We try to start with a very minimalistic solution.

07:06.000 --> 07:10.000
We have open closed edit and cursor, message type,

07:10.000 --> 07:15.000
and it kind of fits in a Macedon post.

07:15.000 --> 07:20.000
And the open closing is just to, say, from the editor to the demon.

07:20.000 --> 07:24.000
Yeah, I want to know about this file, and I'm currently typing into it.

07:24.000 --> 07:28.000
I need your updates kind of following and then un-following.

07:28.000 --> 07:35.000
So the edit is then you send out the specific range.

07:35.000 --> 07:39.000
There are different ways to approach this.

07:39.000 --> 07:44.000
This is the way what was most convenient for the editor plugins that we currently have.

07:44.000 --> 07:49.000
And you need to have some sort of synchronization between the demon and the editor,

07:49.000 --> 07:53.000
which is what the revision is for.

07:53.000 --> 07:56.000
And the revision is based on some kind of dumb-down OT,

07:56.000 --> 08:02.000
that's operational transformation, where the editor has to do as little as possible,

08:02.000 --> 08:08.000
and the demon does most of the jobs, most of the work.

08:08.000 --> 08:10.000
cursor is pretty straightforward as well.

08:10.000 --> 08:19.000
You just have the position or the range, and when it's coming from the demon you have a name.

08:19.000 --> 08:25.000
And we currently have the implementations, as I said, for new of them, and VS Code, and Test Studio.

08:25.000 --> 08:32.000
But other solutions are floating around, and once we found an agreement,

08:32.000 --> 08:37.000
or once it's working, we will definitely advertise them on our page.

08:37.000 --> 08:43.000
So we'd be happy if you are interested in these other editors for contributions.

08:43.000 --> 08:47.000
So that could be you.

08:47.000 --> 08:54.000
Just a short expectation management would be great because of time.

08:54.000 --> 09:00.000
We are planning to answer every questions offline, so we are planning to fill the whole slot.

09:00.000 --> 09:07.000
So sorry, we currently not planning to take, maybe we see if you are managed to take in question the end,

09:07.000 --> 09:10.000
but we are not planning to.

09:10.000 --> 09:16.000
And now for the collaboration server, the bling we said with this end-by-end,

09:16.000 --> 09:18.000
we also have a prototype here.

09:18.000 --> 09:25.000
Maybe some of you will know Headstock, which is online text editing.

09:25.000 --> 09:28.000
You know what I just show you.

09:28.000 --> 09:35.000
So the Headstock looks like this here on the right side.

09:35.000 --> 09:39.000
You have a running browser, so web application.

09:39.000 --> 09:46.000
And it's possible entirely, like, without the demons,

09:46.000 --> 09:52.000
or I'm just killing this one to make sure, but I don't have any demon running here.

09:52.000 --> 10:01.000
But the editor, like my new of him, is configured in such a way that it's using our Headstock prototype,

10:01.000 --> 10:05.000
which is from the ESA sink time, so he hadn't greened it yet.

10:05.000 --> 10:10.000
But it's still working, and then I can connect to the test site,

10:10.000 --> 10:21.000
and it's loading the content of the site, and also I should be able to type here.

10:21.000 --> 10:28.000
And on the right side, oh, I need to go to edit mode, of course, and editing.

10:28.000 --> 10:35.000
Yeah, so Headstock.

10:35.000 --> 10:40.000
The protocol currently has this problem, that we don't have undo.

10:40.000 --> 10:47.000
For example, we cannot initiate a connection from the site in a different way,

10:47.000 --> 10:53.000
because the editor plugins opening, but we need this team type share that we currently have,

10:53.000 --> 10:56.000
and the team type showing that we showed you.

10:56.000 --> 11:01.000
And we also have some usability UI issues in a way, like,

11:01.000 --> 11:04.000
that if you have an editor open, if file open in your editor,

11:04.000 --> 11:07.000
and it's deleted on the other side, what do you do?

11:07.000 --> 11:15.000
So the editors need to be told about that, and need to have an interface for that.

11:15.000 --> 11:22.000
And what we showed you, like, was our current prototype protocol using JSON RPC.

11:22.000 --> 11:26.000
And now the question is, maybe, like, another way would be possible,

11:26.000 --> 11:31.000
where you're just using the language server protocol directly, to allow collaborative editing,

11:31.000 --> 11:35.000
because it already supports, like, events like opening of text documents,

11:35.000 --> 11:42.000
changes of documents, because the language servers do need to know about the content of your buffer in your editor.

11:42.000 --> 11:47.000
And also, the editors that you signed around already have, like, version identifiers.

11:47.000 --> 11:52.000
So, in theory, it would be possible to just use LSP, which would have the advantage that,

11:52.000 --> 11:57.000
like, any editor that already has LSP support, could be attached to the system,

11:57.000 --> 11:59.000
and then you would already have this collaboration.

11:59.000 --> 12:02.000
Maybe, yeah, the last point is about, like, how would you show remote browsers?

12:02.000 --> 12:07.000
Maybe you could, like, use a text annotation of that character as a, as a cursor,

12:07.000 --> 12:09.000
or something, it would be, like, a record one.

12:09.000 --> 12:15.000
And, on the practical side, it seems like there are several, like, challenges to this idea,

12:15.000 --> 12:17.000
which are, like, how would you implement this?

12:17.000 --> 12:20.000
Jump to cursor that mode, show it to you.

12:20.000 --> 12:25.000
LSP also has a bit of a different model for how to communicate the changes.

12:25.000 --> 12:31.000
And one would need to, like, cleverly think about how to, how to do that bidirectionally,

12:31.000 --> 12:35.000
and it's definitely not intended for that use case, like, because it's used for, like,

12:35.000 --> 12:38.000
code computations and stuff, so it feels a bit like a hacky solution.

12:38.000 --> 12:42.000
Nevertheless, one person in the community has already built a bridge,

12:42.000 --> 12:46.000
so you can start a little program that speaks LSP to the editor,

12:46.000 --> 12:49.000
and speaks the team type protocol to the other side, basically,

12:49.000 --> 12:55.000
so you can kind of try that already, and it's working progress.

12:55.000 --> 13:02.000
And the third option that we see for a protocol between editors and collaborative applications

13:02.000 --> 13:04.000
would be using something called wait.

13:04.000 --> 13:12.000
It's currently been worked on in a working group to be a standard and an extension of HTTP,

13:12.000 --> 13:16.000
which allows, like, stage synchronization via HTTP.

13:16.000 --> 13:22.000
For example, here's a message that changes the text offer blockpost,

13:22.000 --> 13:26.000
and you can see that it has a content range there, and it says,

13:26.000 --> 13:29.000
please replace this range with this new text.

13:30.000 --> 13:35.000
And the advantage here is that it's already kind of becoming a standard anyway,

13:35.000 --> 13:42.000
and the disadvantage that it's maybe a bit more of a complex thing that the editors would have to implement.

13:42.000 --> 13:48.000
And again, here, one person from the background here has written a team type bridge,

13:48.000 --> 13:54.000
which means that you can use our team type protocols to talk to great resources already.

13:54.000 --> 13:58.000
So kind of all of these three roles already talk to each other, which is cool.

13:59.000 --> 14:06.000
And now the question is how to proceed with, like, going towards this collaborative editing protocol.

14:06.000 --> 14:13.000
We see two kind of directions that are in a bit of a trade-off against each other.

14:13.000 --> 14:17.000
One is what we're currently doing, which we call, like, project stewardship for this protocol,

14:17.000 --> 14:24.000
which is, like, we as the team type project just, like, find out what we need this protocol to do in practice kind of,

14:24.000 --> 14:31.000
and that makes it, like, proven by practice, basically, and driven by the needs we have in the project.

14:31.000 --> 14:37.000
And we are kind of fast to move if we need to make any adaptations, we can, like, do it like that,

14:37.000 --> 14:41.000
and we have been doing that over the past few years, I guess.

14:41.000 --> 14:48.000
On the other side, it would be possible to, like, drive this standardization with a consortium,

14:48.000 --> 14:53.000
where, like, you would have shared ownership over it, it would be more independent,

14:53.000 --> 15:00.000
and maybe it would be a general, a better, a general solution, and have better compatibility.

15:00.000 --> 15:03.000
So, here's our invitation to all of you.

15:03.000 --> 15:10.000
If you're curious to help shape this collaborative editing protocol, if you project somehow, maybe touch us, text editors,

15:10.000 --> 15:14.000
and you can, you can do it with us.

15:14.000 --> 15:21.000
We just made a Zulip chat platform, but you can join, and we have an editor protocol channel in there.

15:21.000 --> 15:29.000
And also, this talk is intended to be, like, to open the discussion on this, and we will do a follow-up at the end of February.

15:29.000 --> 15:32.000
You can find the date there, and the link to it did see.

15:32.000 --> 15:38.000
And we would love to talk with all of you who are interested in, like, how to make that specification.

15:38.000 --> 15:44.000
And finally, a few curious about the Tim Black project, we have, like, some links here to our source code on to our Amazon account,

15:44.000 --> 15:47.000
and it already works, take it out.

15:47.000 --> 15:50.000
Yeah, all right, thanks for listening.

15:50.000 --> 15:53.000
Thank you.

