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.