 Can you start when there will be more time? OK. Can everybody hear me? Wonderful. Well, good morning, everybody. Welcome to a quick update on all things matrix. We're going to talk a little bit about communities, sometimes known as groups, which are a new feature that we've just added into matrix recently. Thank you for coming to hear the word of matrix and topologies if you've been stuck hearing outside for days or weeks. First of all, obvious question. Who already knows what matrix is? OK, that's really scary. This is our fourth firm, Fozdem, I think. And it's gone from zero people to five people to about 10 people to about half a people. So this is interesting, but it tracks the growth of matrix as a whole as a protocol. However, that does mean that I do need to do a quick update on the basics of matrix for the 50% of people who are not that familiar. So apologies that this will be really boring, although I'm trying to make it less boring for the half of you who already do know what it is. So basically, matrix, it's a big global open network for secure, decentralized, real-time comms. So we're optimizing for real-time pub sub with persistent semantics, and we have end-to-end encryption in there as well. And the sort of things that you play with on it are interoperable chats, obviously interoperable VoIP. And what we always say, in a desperate hope to get people to build more exciting things on matrix, is that you could use it for communications within VR and AR, or you could use it for IoT data exchange or any of this good stuff, because in the end, it's just an HTTP API to let you put some JSON data. That hits your server, which then signs it, replicates it out to the other servers participating in the room. And you go and distribute it over all of the servers which have a copy of the room. So this is the fundamental thing of matrix that is different to XMPP, or IRC, or CEP, or any of these other communication technologies that we're building up a direct-to-dacy click-off of messages and replicating them over all of the servers that participate. It's basically the same as Git, except rather than the commits that are being replicated being source code, instead, the nodes which you replicate are messages in a room. That's basically matrix. Enjoy the next half an hour. The mission of the project is unashamedly to create this global decentralized comms network, because let's face it, we're still not at the point where the internet has a ubiquitous PubSub layer. And there are a lot of options out there. There's matrix, there's ring, there's first PubSub, there's the whisper and PSS stuff from the Ethereum ecosystem. We've been at it for a while, we've perhaps spoken for a long time, some of the options out there, but the idea is nevertheless to go and provide a kind of lowest common denominator, nominate a really simple way to go and publish and subscribe arbitrary data. And unashamedly, we're going up here against the silos that people use to communicate today. We're providing an open alternative to WhatsApp, or to Slack, or to Telegram, or any of these other kind of islands of communication and trying to do it in a very simple pragmatic standards-based approach, which in the end is just HTTP. So the idea is that any web developer who can do a put of some JSON can send a message in matrix. Folks have probably seen this diagram before, showing different islands, people like Slack and Telegram and ILC, could be an application like GitHub, could be a silo like Gitter, and matrix sets in the middle to go and be this mesh. So you've got the dark blue dots in the middle, which are servers, and then you have green dots, which are the native matrix clients. You have the light blue dots, which are bridges through to the other networks around the edge. And basically the idea is that you could use, have somebody on Slack talking to somebody on ILC, going via matrix without realizing that they're even using matrix in the middle. So it is, if you will, some kind of matrix in which you can embed different silos and have a kind of substrate to connect them together. So the cool thing is that nobody owns your conversations, that your rooms and your conversations exist on your server, they're replicated by other people, but there is no single point of control or failure by design. It rather subversively decentralizes the data by its very nature of conversation. And I guess the flip side of that is that the conversations are shared equally for everybody. I guess I've already explained that you've got your native clients, your home servers, application servers, identity servers are the odd ones out, which I talked about at last Vostem briefly. And unfortunately, we haven't made much progress on the core team for going and improving our identity situation. In matrix, we shamelessly hijack existing identity. So if you've got an email address or a phone number or in future other identifiers, what we do is to go and map it through to a matrix ID. If I invite somebody, I don't need to know your matrix ID, I just put in your email address and it will go and send an invite to your email and it kind of hooks you into the network. It's the opposite of X and PP with Java IDs on business cards with little stickers on your T-shirt. Instead, you just use the email address that you already have. But the current implementation is a centralized cluster, which we want to kill. There has been some work in the community from Max, if Max is out there somewhere, perhaps not, who's written a Java implementation of a federated identity server. And we're hoping in the coming year to improve the identity situation a bit. So here's an updated view of where the actual matrix ecosystem sits today. You've got the SPAC in the middle level, which goes and defines the HTTP API between the clients on the top and the servers on the bottom. The green stuff is made by the matrix.org core team. And we've basically got stacks on JavaScript, iOS and Android on the client side, both at the API level and then the UI level above it. And then on the back end, you've got servers and we have our old Python-twisted thing called Synapse, which is quite mature now. It's still a horrible resource hog. Apologies to anybody whose server is head all that's ramgobbled by Synapse. We have just found actually a major performance improvement on the state resolution algorithm that chews a lot of the resources. And basically, there's a cache that should be being hit that turns out has never been hit. And so we're getting on. Hopefully that will improve things a lot. Dendrite is our next-gen server, written in Golang, which is about 80% there for phase one. Unfortunately, every time we make some progress on it, Synapse goes and explodes on matrix.org. We had a particularly splendid one over Christmas when we were feeling quite happy because we had 20% CPU headroom on the matrix.org server, which runs about 30,000 simultaneous users. So, you know, we're pushing it to the limits. But luckily, we've got that 20% headroom so it's going to be fine for a couple of weeks until meltdown inspector suddenly appeared, which point our headroom vanished and everything ground to a halt. So basically, Dendrite has been horribly delayed by constantly having to do performance work and maintenance work and ops work on Synapse. But we're hoping to improve that soon. Then on the purple side, we have the community, which, and this is not drawn to scale because at this point, the community is way bigger in terms of projects than the core code base. And on terms of clients, we've got lots of really interesting ones. There's Neko, which is a native QT C++ based app, which if you like your QT desktop, perhaps have a go, it's very usable now. It looks and feels suspiciously like Telegram, which is no bad thing. You've got Caternion, which is again QT, except the aesthetic is much more on the kind of X chat style, X chat side of the spectrum. You've got two GTK plus and Rust projects, Fractal and Fest, which are looking really interesting as people play with Rust and the GTK bindings. And there's a app called Thunderbird. Don't know if anybody's heard of Thunderbird, which has main tricks as one of it, some chat transports at least behind the flag at the moment. WeChat has got lower scripts for it. And I think there are about 50 or 60 clients out there ranging in kind of sophistication to 200 lined lower script like the WeChat one. Although honestly, it works very well, especially if you tweak the tuning a bit all the way through to a much, much bigger full Telegram desktop app style thing. And finally, on the server side, we've got rumor on the Rust signs, which is sort of on hiatus, whilst we go and get some of the server spec stuff sorted out which is happening during Dendrite Dev. There's also MXHSD, also written by Mac Store in Java, which apparently is federating with Matrix Dev, which is one of the bigger rooms as of yesterday, which is exciting, means that it's further ahead than Dendrite for that. And then many, many, many bridges, parts integrations and everything else. So basically, there's a lot of stuff going on out there these days. What do you got in the spec? Well, all the obvious bits. Obviously, you get conversation history. You get group messaging. You don't get one-to-one messaging because we consider a one-to-one to just be a room with two people in it. End-to-end encryption is where we put a lot of effort over the last couple of years. The crypto level is basically great. The key management level is still a nightmare, both in terms of UX. There are two big things which we have to land, one of which is cross-signing keys. The other, actually three things, cross-signing keys, so that if I have multiple devices and I vouch and cross-sign them with one another, you should trust all of my devices. Also, key verification. At the moment, you have to compare stupid elliptic curve public keys, which is, well, 32 characters, which is horrific. There's a great proposal from Uhuag in the community, which goes and compresses it down to about four mnemonic words that will be the same for both people. So, out-of-band, if you want to verify somebody's device, you phone them up and say, hello, pink Zebro elastic plaster or whatever, and if they have the same four silly words on their thing, then you know it's, you're talking to the right guy. And then finally, key backup. Now, this is a slightly controversial one because we deliberately didn't provide any way to back up keys in the initial implementation because that can you back up your keys on a server somewhere and obviously renders them liable to somebody trying to get them off that server. But in practice, we find a lot of people install right on their phone, use it a lot, have a bunch of encrypted conversations, flush their phone down the toilet, or throw it into the sea or whatever, and then say, oh, I've lost all of my history. So, we're giving the option for people to back up their room keys on a server, but behind a PKI and private key, recovery key effectively, which we give them when they first create their account, we say, hey, if you do wanna recover your device, take this private key and print it out and store it in your safe or whatever, and we never ever store that on the client itself. So basically, it will give a way to recover your history in that scenario. And we hope that with those three things and a lot more UX polish than the end to end on right, will actually be KKS rather than academically and theoretically amazing and practically a bit of a pain. 10 minutes left, interesting. Really? Okay, I'm gonna speed up a lot and talk about communities. I'm gonna skip how it works because I kind of mentioned at the beginning. So, communities, new feature. We launched in November. We spent a lot of last year working on it. It's a new first-class entity in matrix. It's a new single. It's the plus that we can see here. So, communities with my plus name of the community, colon the domain. And what they do is to basically define a group of users or a group of rooms. And the architecture is a bit interesting and that we've designed it so that they have an affinity to a given server. So, they're not fully decentralized. In the, if they are bridged to a bit or if they hosted on a given server, then you can use them to back onto an existing data store like LDAP. It's kind of an oracle in decentralized terms or active directory or whatever your kind of user data is. The idea is to be an equivalent of teams in Slack or a server in Discord. And it's something that everybody's been asking for for years, that they go into their matrix count. And so, let's jump into my right here. And I've got way too many rooms of different flavors. I've got 713 rooms there. I've got 586. Oh, you can't see it. It's a disaster. Let me press escape and see what happens. Come on. So, I get for using PowerPoint. Don't kill me. Okay, so here we are. So, here's my right, sorry. And we've got like 500 people conversations here. We've got huge numbers of rooms here. And it's a mess, honestly. It's all jumbled up together. You can't find anything. So, communities, you can actually see here on develop, live down the left-hand side, a bit like teams in Slack. And what they allow you to do is to filter it down. So, if I want to look at rooms and conversations associated with the official matrix.org team, I just go and click on it and you've got 100 test conversations with Andine, various people on the core team, then a couple of important rooms here, Matrix HQ, Matrix Dev, and so on and so forth. And then a whole bunch of other rooms down here. So, it may not look big, but in terms of the usability, it's gonna change things enormously. This left bar isn't yet live on app. It's on the develop branch of Riot Web. But if you switch URL over to develop, you can play with it right now. You do have to turn it on in settings though. And other communities I have here are like all of the people who donate to support Matrix at various levels. So, I can click on linear and it gives me the linear room, which is folks donating like one buck a month or more to us. And a bunch of one-to-ones with folks in that community have polynomial, sorry, it's in the wrong order. Obviously quadratic comes before polynomial. And you see there we've got nice pretty drop and drag on here as you go and to order your teams in the right place. Then you've got the polynomial level, then you've got the elliptic level. Obviously you can shift click on these guys if you want to watch them all at the same time. And you've basically really got a powerful tool here to go and riffle shuffle your communities together. Now this is very different to Discord or Slack in that you can mix it together. They are filters of different views. And so, if I want to have, I know the core team things, plus I want to have, I know the politics community, which apparently I'm a member of. I don't remember joining it, but apparently I am. Then I can control click on that. And I don't know if I'm actually in any Pulsex rooms. Let's find out. Oh, there you go. I'm sorry Pulsex guys, apparently you're my low priority and bucket, but I'm in the Pulsex stuff there. Now if we go and look at this button here, you have the index in more detail of the communities that you're in. So you've got beautiful butterflies for Pulsex and various bits and bobs here. If I go to the official matrix team, oh, that's not very pretty, you get some freeform HTML to basically have a little landing page for the group and then you have the directory of all the rooms which are officially part of that given community. And then you also have the people. And in this instance, it's the folks who have the misfortune of being paid to work on matrix full time. And click on this and in theory, one, if I wasn't scrolled all the way down, we would be able to see at the top. The ability to change the topic, set an avatar. And yeah, at the moment, we just have simple HTML. And it's not the most technologically complicated feature, but in terms of UX, hopefully it makes matrix a lot less imposing because if you want to invite people into a given open source community, I don't like Pulsex for instance, then if I go over here, check on Pulsex, then okay, they haven't, oh yeah, they've got a link to the website at least which is better than nothing and you've got suddenly you can find six rooms which are the official Pulsex ones or at least the ones associated with this community and they can just copy paste that link or use a matrix.2 URL, which is the kind of linkify style service and put it on the website and rather than dumping their users into the entire global mess of matrix, they can just say have this nice little targeted landing thing which points them at the rooms that they care about, five minutes left. So this hopefully is a nice thing which people have been asking for. What else can I tell you? Oh, the other thing I completely missed is Flare which is a fun thing that allows you to go and put little badges on people's names if they want to advertise themselves as member of a particular room. I won't turn back into Riot so you can see them, but if you're using Riot, you've probably seen them as little M logos for people on the core team or whatever. You might be thinking what is Flare? If you've ever seen Office Space, a seminal film, I think the late 1990s or early 2000s features the lovely Jennifer Aniston wearing a lot of Flare in the form of badges and Flare is a horrible euphemism to make ugly badges sound a lot more sophisticated. So that's where the word Flare comes from. We stole it from Reddit, who stole it from her? We've got some mobile implementations in Dev. So if you run Dev versions of Android or iOS, you can play with them. We've already got 1,000 of them already. Limitations is that we deliberately don't have a directory. You have to discover these for a side channel or by clicking on somebody's Flare. And also we don't have full push support and one of the things which has hampered communities' development a bit has been the holy war within the team on should communities be rooms because they look a lot like rooms. They've got avatars, they've got arbitrary metadata, they've got members, they've got history, all this sort of thing. At the moment they're implemented as a totally separate entity so that you can bridge them through to LDAP or whatever, but there's a kind of centralization versus decentralization argument happening there. Other stuff, oh, I've already given you a demo. Other stuff is widgets. Anybody played with widgets? Yes, in matrix? Couple, couple, four, five, six. Widgets, I think, are really underrated. They're super, super cool. They allow you to embed arbitrary HTML into a room and basically you can turn any chat room into a dashboard. The ones we have today are things like Rafauna, Jetzy, Etherpad, you can even go Google Docs and Spotify and other kind of closed things. Or you can put any URL you'd done well like with a custom widget into a room. And the idea is that in practice they're just state events within the room. They're available on all the platforms. You provision them using a manager. We provide, well there are two out there at the moment, Modular, which is the proprietary one that Riot uses. There's also an open source one called Dimension, which is a fossil alternative. Spec is like proposal and Google Docs needs to be formalized. It desperately needs a tileable UI to fulfill the potential. And one of the things we want to do with them in future is to provide some means of doing paid stuff in a room. So if you wanted a Patreon alternative or a Twitch alternative, you might take a matrix room, chuck a live stream into it and say, hey, I want to directly charge people to watch my thing if you're into that kind of thing. That's one of the state events showing what they look like. This is a trading view widget. And you can see it's backed by URL. This URL goes via Scaler, which is the hosting platform we have, but it can be any URL you like. And in practice they look a bit like this. Chunk, chunk, chunk, chunk. Where shall I go? What's the room of widgets? First one is not Pulsex, tragically. If I go to our internal management room, this can never go wrong. Oh, there's some widgets here. So since Matrix's funding situation was resolved a couple of weeks ago by our friends at Status in the Ethereum world, we've developed an unhealthy habit of staring at cryptocurrency trading charts and you can see Ethereum swashing around over the last week and likewise the status token. And these are just a little bits of HTML that have been embedded in there. And it's surprisingly useful to have these things hovering over your head so that you can collaborate on a document or argue about what your Grafana graphs are doing. And at the moment you've only got two in a row, but the idea is to basically make the whole UI here tidalable so you can kind of split it up and embed more and more things until you yourself can have your very own Bloomberg console built on top of Matrix. So those are widgets. Again, played with them, please do. Once I'm in here, I'm also gonna show you Neco quickly. So I mentioned Neco earlier. This is the Telegram-esque QT client. Unlogged in here is my evil alternate user, Matthew, too. And we've got Matrix false dem room with folks chatting away. Oh, God, it's so nice to be using a desktop native client rather than HTML. It's untrue. Scroll down, you can see Brendan saying, hi, man, hi, Brendan, I am your blah, blah, blah. And Matthew always does have to rush the tool. I'm sorry. Let's go to Matrix HQ, but look how snappy it is. Matrix HQ has got 13,000 people in it and they're people chatting away. People are sorry getting trapped outside. Audio is kind of bad. That's probably my accent and the fact I'm talking too quickly. Sorry. And so yeah, basically it's fun, click on this and wow, it's got a proper desktop photo and all this good stuff, too. So if you haven't played with Neco, give the go. And most importantly, cropped off the left-hand side of the, ah, really cropped off the left-hand side. How do I get out of this? Ah, help. It's almost like QT in OS X and not a perfect match. There we go, cropped off the left-hand side here. You have communities. So Evil Matthew is a bit of a loner and it's only in a few communities like the test one here. You can see that clicking on this is the same behavior of quickly filtering it down. In fact, it filters it a lot faster than the right web. Who knew? Because QT is a little bit faster than HTML and JavaScript. So that's a bunch of stuff happening in Matrix right now. Very quickly. Give you some quick stats and where things are at. Come on, come on, come on, come on. We've got Jitsie. We use Jitsie for video conferencing. My time is up. I'm not gonna show you that. Currently about three million users on the matrix.org home server of which 900,000 are native to Matrix. We've got about 5,000 servers. We're pushing 25 messages a second in. Good thing is that we're getting more messages in than we're putting out. So there is more outside the matrix.org server than there is outside it. Lots of companies building on top of it, which is kind of fun. Growth is continuing to go, whew. That's up until July. So since July we've gone from 1.6 to 2.8. So the graph had time to update the stats before the talk. We'll be up off the top of the screen, which is kind of fun. Traffic is also going up too. More tovers coming on. What's next? We are now funded again. Thank you to everybody who's donated to keep us alive. We're hiring folks all over the place, especially on the front end to make it less in terms of UX and also on Dendrite and a lot of other stuff too. Thank you very much.