Draft:Matrix Live S08E18
|Element and client-side bridging demos|
|Guests||Doug, TravisR, Matthew, Arnoud, Flavio and many others|
|Date of Upload||03.03.2023|
Topics of the Episode
This episode is about demos. In particular, these demos have been shown:
- Element X for iOS (Testflight)
- Sliding Sync
- Public Test Flight Version
- Rich Text Editor
- Location Sharing and Room Polls History
Original Description of the Episode
Element, client-side bridging and more today!
00:31 Element X
08:02 Rich Text Editor
12:18 Location Sharing and Room Polls History
🪙 Donorbox for individuals - https://donorbox.org/keep-matrix-exci...
💶 Matrix Foundation (paid) membership for orgs - https://forms.gle/Yy345QkB5pifJJNy6
(This Week in) Matrix
Neil: All right people it is Matrix live time. We're live from Matrix towers. Let's go.
Doug is going to start off by telling us all about ElementX on iOS. We've got some big news there. Travis is going to talk us through bridging apps. That is bridging-apps. Those two words together. And Arnoud is going to talk about Rich Text Editor. And Flavio is going to make his debut and tell us all about location sharing. We made a tweet to that and the room poll history.
So Doug are you up there?
Doug: Hello. So hopefully you can see my screen. I'm going to do a demo of what will be the public test flight build of ElementX. So if you don't know yet, ElementX is our next generation mobile client. It's built on top of SlidingSync. It's using the Rust SDK and on iOS it's built with SwiftUI.
So I shall sign in. We have nicely redesigned authentication flow here. And yep through the power of SlidingSync we're in within seconds. You can see we have a nice room list here. Everything loads really quickly. If I open into a room we have a timeline with bubbles. I can send a message into here. We have nice context menus now and we can send reactions quite quickly by double tapping on things. The app supports iOS dark mode really nicely. So you just flip into dark mode and you get that. Something that people have been requesting for a long time. We now support dynamic text. So we can have really nice big fonts if you need that. Or equally we can go really small if you want to have a much higher density of information.
So, yeah, that's a quick demo. What I will do is if anyone has feedback for us, it should be now really easy. If you take a screenshot, you can then navigate to the settings. If you choose to report a bug, you can attach that screenshot. Tell us whatever you would like to.
So, yeah, that's Element X on iOS coming to test flight soon.
Neil: Very nice. And just in case folks didn't hear, I know Doug just said it, but by the time this goes out, the test flight will be available not just internally but to public at large. So folks out there, check it out. Give it a go.
All right. Travis, are you up?
Travis: I am. So back in November, we last talked about Mimi and Matrix for bridging. So the gatekeepers and all that sort of stuff kind of look
like this. They're just isolated. We talked about server side bridging back in November. And today we are doing this monstrosity. Basically the gatekeepers have until I think May 2nd to actually implement something for interoperability and so this is the sort of structure that we're sort of demonstrating today. And assuming it works, because it has taken exactly four weeks to try and get some amount of thing working, we're going to do a live demo.
So if I send a message here in Google chat, we should be able to see it in element. And obviously this is all encrypted on that side. And then it should also make it all the way over to WhatsApp, which is great. We'll send something the other way as well. And again, should hopefully land in element. There it is. Great. And there it is in Google chat. And now for the extremely risky part where we actually add people to a chat and then off screen try and find another phone to say "hello" from there. And then if we give encryption a sort of second to figure everything out on element here, so because we're using Matrix as the back end, we get a whole dedicated user for that. And in WhatsApp, it'll show up slightly weird, but that's because we can't create sort of random users on WhatsApp. With a sort of DMA compliant thing, we'll actually be able to have those users bridge through properly. And if I secretly say "hello" from WhatsApp using again, a real account, because WhatsApp doesn't allow you to create empty groups, that should also be bridged all the way through. So there's that, my sort of dedicated WhatsApp user, and then all the way back through to Google chat.
So this is all running client side on the phone. There is no server side app service or anything like that. These are Android apps. They're actually just sitting there on the right hand side of the home screen there. And they're just sitting there connected to the services directly and then connected to Matrix directly. And they are doing all of the encryption locally. So that way we can, we're basically not violating anybody's privacy. All of the information is stored on the user's device, and it is bridged across all three protocols successfully. But that is the two minute demo of how DMA can be done in the sort of short term.
[ Applause ]
Amandine: Yeah, I was about to say, I think what you meant is this is the future.
Neil: Yeah, Travis, you're understanding it. This is a really big deal. Did you re-implement every bridge client side, or were you able to reuse any of the existing bridging code?
Travis: So for Google Chat, we did end up having to re-implement it. Although, thank you to Hugh for actually fixing it, because it did not work. For WhatsApp, we're actually using Tulir's WhatsMeow library. And we're also using the Rust SDK for crypto. So together we are basically just dumping bindings into an Android app and then hoping for the best. And then, yeah, we just won't look at the sort of size of the app in the end there.
Matthew: And if people didn't catch it, I'm doing it myself, going to Brussels on Monday to go and show this to the European Commission and the gatekeepers and the other people who are involved in DMA to use it as possibly the world's first concrete evidence of how you can practically implement DMA by installing this as an app and liberating yourself from the clutches of the gatekeepers. Thank you, Travis and Hugh, and to Lira, I guess, for going and putting it all together in breakneck speed for the workshop on Monday.
Neil: Very good. Right. Three more. Oh, no. Rich Text Editor, tell us about your HTML elements.
Matthew: We can't hear you. We can see you, though.
There we go.
Arnoud: Yes, I'm going to showcase what we built in the past month. So we do have the Rich Text Editor. I already showed you with basic formatting, but now we can create lists. We can also, as soon as we create lists, we also have options to indent those and change the type of the other item. And also, we built quotes. So similar design as what we have in the current client. Also, we added support for code blocks. It doesn't look super good right now. Sorry. Oh, sorry. That's because I actually selected inline code. So, yeah, we have actual code blocks that will display some code on multiple lines if we want.
And that's -- no, yeah, there's also links. So we also added the possibility to create links. It comes with a nice interface to create a link.
And I think there was some crash because we just had -- suppose it was because of the URL. And we also actually created some crash recovery mechanism. So right now, we still have some minor issues and some circumstances. And we are able to save the previous text and restore it back when we actually crash. So there are -- you can see it's the demo effect. Something crashed and we restored the previous content without all the formatting.
And I'm going to end up with a small teaser on what we are currently working on. Which is mentioned. So as you can see, here we have a bit of Rust code. So it's going to be a little more technical. We can know from Rust, we are able to detect patterns. So every time we detect something. So, for example, if we are trying to write something with "@", we will detect that there is a pattern for that. And this can be used afterwards to create a link. So as far as the Rust part of the composer is concerned, mentions are just links. And we have a bit of post processing that's done on the platform side. That will be able to when something is detected, I can actually use it to create a direct mention. So, for example, we can create a mention just like that. And one of the big concerns we have is the support for editing messages. So this also works because -- strictly because the Rust side doesn't have knowledge of what mentions are. We can just, for example, take another message and copy the source from it. It will be able to magically recreate it, even if it was not done with the actual composer. And it just works. That's about it.
Matthew: That's awesome. So we're almost at parity then with the existing editor. With mentions, support, and freeform HTML. Is that right? Is there anything missing? Other than many crashes?
Arnoud: Yeah. Just fixing the crashes.
Matthew: Awesome. Then we can turn it on by default. Never look back.
Arnoud: There might be some smaller features that aren't there yet. But we're working on it.
Neil: All right. Thank you. Flavio, tell us all about it.
Flavio: Yes. Hello, everybody. So I will start sharing -- one moment. All right.
So I will start sharing my own location on my sharing. So we are all familiar about the location sharing feature. So if a user wants to share his position with me, I can see where it is. And I can see also if he's moving. But I cannot see where am I. And I cannot see if I am approaching him. But now, like magic, we can see our own position trying to reach our friend. And the map will follow us or else we can see the update of our position trying to move and to follow our friend.
That's pretty much it. It works both for sharing live position that static one.
Amandine: Awesome. That was really amazing.
Matthew: Yeah. Super, super useful.
Unknown Voice: Did you travel to the U.K. just for this demo?
Flavio: I have bought a ticket just for this demo. No, sorry.
Matthew: You have to come and hang out afterwards.
Flavio: Wonderful. So now I have to change screen because I prepared another demo. And it's about poll history. So stick with me a little bit more. Okay.
Here we are. So if I enter on a room with a lot of messages, very big room, such as Arch Linux, and I want to see if this room has some polls. Well, this currently has none. But I can try to load more polls to this room. And we can see live the number of days we are trying to fetch for having the polls. So this is kind of pretty feature. And if we go to the past polls, well, this happens to have none. But I have prepared another test more recent just to show if we did have some polls to show.
So okay. Now in here I have prepared a lot of polls, both open, closed, active polls. We can go to the past polls and see the polls. We can see the detail of all the polls. Like that. We can see the poll in the timeline. So we can go back to the room and see where the poll was at. And this is pretty nice. And also for the polls that are active right now, we can open the poll. We can try to vote in this poll. And the vote will be recorded. We can go back also for the other one. Of course, there is only one option in this one. And we can go back in the timeline seeing the result are updated and everything works.
So pretty quick demo, but I hope I did show everything.
Neil: That's it, folks. That's your Matrix Live.
Matthew: Thanks, everybody.
Amandine: Thanks, everyone. And well done for excellent screen sharing timings and stuff. Congratulations.
Neil: No fairies have died. I can confirm no fairies died.
Matthew: Excellent. Probably just as well now. Have a good weekend, everybody. See you.