<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
    <title>Matrix.org - Holiday Special</title>
    <subtitle>The Matrix.org Foundation</subtitle>
    <link href="https://c956b204.matrix-website.pages.dev/category/holiday-special/atom.xml" rel="self" type="application/atom+xml"/>
    <link href="https://c956b204.matrix-website.pages.dev"/>
    <generator uri="https://www.getzola.org/">Zola</generator>
    <updated>2025-12-24T18:00:00+00:00</updated>
    <id>https://c956b204.matrix-website.pages.dev/category/holiday-special/atom.xml</id>
    
    
    
<entry xml:lang="en">
    <title>The 2025 Matrix Holiday Special</title>
    <published>2025-12-24T18:00:00+00:00</published>
    <updated>2025-12-24T18:00:00+00:00</updated>
    <author>
      <name>Matthew Hodgson, Amandine Le Pape</name>
    </author>
    <link rel="alternate" href="https://c956b204.matrix-website.pages.dev/blog/2025/12/24/matrix-holiday-special/" type="text/html"/>
    <id>https://c956b204.matrix-website.pages.dev/blog/2025/12/24/matrix-holiday-special/</id>
    <content type="html">&lt;p&gt;Hi all,&lt;&#x2F;p&gt;
&lt;p&gt;2025 has been another bumper year for Matrix, and I’m happy to say that we’re ending it on a distinctly positive note.&lt;&#x2F;p&gt;
&lt;p&gt;Frankly, it feels like the gamble to secure the future of Matrix may be paying off.  We’re seeing more and more uptake of Matrix in the wild, especially in massive public sector deployments like ZenDiS’s &lt;a href=&quot;https:&#x2F;&#x2F;www.opendesk.eu&#x2F;en&#x2F;about&quot;&gt;openDesk&lt;&#x2F;a&gt; in Germany and the &lt;a href=&quot;https:&#x2F;&#x2F;mathstodon.xyz&#x2F;@Pol&#x2F;115173504011566267&quot;&gt;European Commission&lt;&#x2F;a&gt;; we’re now tracking over 25(!) countries who are actively deploying Matrix in order to maintain true digital sovereignty over their communication - and we’re at the point where dedicated Matrix vendors like Element are starting to get sustainable, allowing them in turn to contribute more to the Foundation and the development of the protocol and ecosystem.&lt;&#x2F;p&gt;
&lt;p&gt;On the other hand, the Foundation itself is still not independently sustainable yet: while memberships have doubled over the last year, work on independently safeguarding the core of the protocol (especially Trust &amp;amp; Safety, Security, Spec and Advocacy work) is painfully underfunded.  &lt;strong&gt;If your organisation (particularly public sector orgs, vendors and integrators) depends on Matrix, &lt;em&gt;please&lt;&#x2F;em&gt; &lt;a href=&quot;http:&#x2F;&#x2F;matrix.org&#x2F;membership&quot;&gt;join the Foundation&lt;&#x2F;a&gt; as a paying member to ensure it can thrive.&lt;&#x2F;strong&gt;  All it takes is a few more gold members and the Foundation will be able to actually accelerate rather than operating on a shoestring, and Matrix will improve for everyone as a result.  Huge thanks in particular go to DINUM and Rocket.Chat the largest Silver members who have joined the Foundation this year, Automattic&#x2F;Beeper and Gematik for renewing their, respectively, Gold and large Silver memberships - and thanks indeed to all our 20 &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;membership&#x2F;&quot;&gt;funding organisational members&lt;&#x2F;a&gt;. Meanwhile, we’ve also started experimenting with providing &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2025&#x2F;06&#x2F;funding-homeserver-premium&#x2F;&quot;&gt;paid accounts&lt;&#x2F;a&gt; on the &lt;a href=&quot;http:&#x2F;&#x2F;Matrix.org&quot;&gt;Matrix.org&lt;&#x2F;a&gt; homeserver to try to cover the costs of running the homeserver.&lt;&#x2F;p&gt;
&lt;p&gt;Overall, 2025 has been a year of maturity.  Putting together the keynote for the 2025 Matrix Conference in Strasbourg was a real eyeopener - realising that on the clientside alone, Matrix now has mature independent implementations across &lt;a href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;2y8qtRLgalQ?list=PLl5dnxRMP1hUgnYEbpEsEEhIqY_KlO3NG&amp;amp;t=90&quot;&gt;pretty much every platform&lt;&#x2F;a&gt;.  On the serverside, things have moved on too - Synapse is more and more mature; Element launched &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;en&#x2F;server-suite&#x2F;community&quot;&gt;ESS Community&lt;&#x2F;a&gt; as a long-awaited official AGPL’d distribution of Synapse (complete with &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;element-hq&#x2F;element-admin&quot;&gt;Element Admin&lt;&#x2F;a&gt; as an official admin web interface - check out the &lt;a href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;TZgcdgv2NXk?list=PLl5dnxRMP1hUgnYEbpEsEEhIqY_KlO3NG&amp;amp;t=789&quot;&gt;speed run&lt;&#x2F;a&gt;!), and &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;en&#x2F;server-suite&#x2F;synapse-pro&quot;&gt;Synapse Pro&lt;&#x2F;a&gt; continues to add scalability and paid support for large deployments (alongside &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;en&#x2F;server-suite&#x2F;pro&quot;&gt;ESS Pro&lt;&#x2F;a&gt;, following the philosophy that features which empower end-users end up in FOSS but features which empower enterprises end up in Pro).  At the same time, the Conduit family of native-rust homeservers has continued to expand and accelerate - from &lt;a href=&quot;http:&#x2F;&#x2F;conduit.rs&quot;&gt;Conduit&lt;&#x2F;a&gt; to &lt;a href=&quot;https:&#x2F;&#x2F;continuwuity.org&#x2F;&quot;&gt;Continuwuity&lt;&#x2F;a&gt; to &lt;a href=&quot;https:&#x2F;&#x2F;grapevine.computer.surgery&#x2F;&quot;&gt;Grapevine&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-construct&#x2F;tuwunel&quot;&gt;Tuwunel&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;2025 is also the year that the &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;foundation&#x2F;governing-board&#x2F;&quot;&gt;Governing Board&lt;&#x2F;a&gt; really started to flourish as one of the main vehicles of open governance in Matrix, with 4 &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;foundation&#x2F;working-groups&#x2F;&quot;&gt;working groups&lt;&#x2F;a&gt; stepping up to take on critical tasks such as running The Matrix Conference, maintaining the &lt;a href=&quot;http:&#x2F;&#x2F;matrix.org&quot;&gt;matrix.org&lt;&#x2F;a&gt; website itself, and coordinating Trust &amp;amp; Safety work across the ecosystem, and more to come like the Matrix for Public Sector Working Group (to be published soon) and new ideas brewing like the Fundraising Working Group to support the fundraising effort of the Foundation. Don’t hesitate to pop up in the &lt;a href=&quot;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#foundation-office:matrix.org&quot;&gt;Office of the Foundation room&lt;&#x2F;a&gt; to express interest for a given WG or propose new ones! We &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2025&#x2F;10&#x2F;farewell-robin&#x2F;&quot;&gt;bade farewell&lt;&#x2F;a&gt; to Robin as the inaugural Managing Director of the Foundation back in November, but their work operationalising the Foundation’s open governance is a fantastic legacy and unlocks a huge amount of momentum for Matrix.&lt;&#x2F;p&gt;
&lt;p&gt;Talking of which, &lt;a href=&quot;http:&#x2F;&#x2F;2025.matrix.org&quot;&gt;The Matrix Conference&lt;&#x2F;a&gt; itself was a great success this year, with incredible talks from across the whole ecosystem - especially highlighting all the Public Sector uptake Matrix is seeing in support of nations pursuing digital sovereignty.  The event itself was a real triumph of opening up the governance of Matrix via the Governing Board, with the Events Working Group organising the whole event and even turning a profit - not least due to the huge amounts of volunteering that the community stepped up to provide.  If you missed the talks, go check them out on &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;playlist?list=PLl5dnxRMP1hUgnYEbpEsEEhIqY_KlO3NG&quot;&gt;YouTube&lt;&#x2F;a&gt; or &lt;a href=&quot;https:&#x2F;&#x2F;media.ccc.de&#x2F;c&#x2F;matrix-conf-2025&quot;&gt;media.ccc.de&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Then on Matrix itself, we have had some major wins: the great &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2025&#x2F;04&#x2F;morg-now-running-mas&#x2F;&quot;&gt;migration&lt;&#x2F;a&gt; to &lt;a href=&quot;https:&#x2F;&#x2F;areweoidcyet.com&quot;&gt;next generation auth via OpenID Connect&lt;&#x2F;a&gt; happened successfully (and indeed ended up shipping in Matrix 1.15, ahead of 2.0); we landed the first and most important phase of &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2025&#x2F;08&#x2F;project-hydra-improving-state-res&#x2F;&quot;&gt;Project Hydra&lt;&#x2F;a&gt; in Room Version 12 to improve state resolution and reduce state resets (see &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=m_2ZBs_4RbE&quot;&gt;Kegan’s conference talk&lt;&#x2F;a&gt; for more); MatrixRTC has seen major improvements in the form of &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;blob&#x2F;kegan&#x2F;persist-edu&#x2F;proposals&#x2F;4354-sticky-events.md&quot;&gt;Sticky Events&lt;&#x2F;a&gt; for simpler reliable signalling and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;blob&#x2F;toger5&#x2F;matrixRTC&#x2F;proposals&#x2F;4143-matrix-rtc.md#matrixrtc-slot-and-constraining-slots&quot;&gt;Slots&lt;&#x2F;a&gt; for improved permissions, which put it tantalisingly close to formally landing in the spec; and loads of MSCs from the wider community - including extensible profiles landing from Tom Foster in Matrix 1.16 via &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;4133&quot;&gt;MSC4133&lt;&#x2F;a&gt;.  We’re still polishing the remaining MSCs slated for Matrix 2.0, but as soon as they’re ready we’ll finally pull the lever and bump the version number.  Finally, there has been major steps forward in improving the footprint of metadata that Matrix stores on servers - with an encrypted state event implementation landing in labs on Element Web via &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;4362&quot;&gt;MSC4362&lt;&#x2F;a&gt;, and all the new MatrixRTC work being built to minimise serverside metadata.&lt;&#x2F;p&gt;
&lt;p&gt;It’s not been a perfect year though; Trust &amp;amp; Safety has been a &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2025&#x2F;02&#x2F;building-a-safer-matrix&#x2F;&quot;&gt;big focus&lt;&#x2F;a&gt; - although with the public release of &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2025&#x2F;12&#x2F;policyserv&#x2F;&quot;&gt;policyserv&lt;&#x2F;a&gt; a few days ago, the ongoing collaboration with &lt;a href=&quot;https:&#x2F;&#x2F;roost.tools&#x2F;&quot;&gt;ROOST&lt;&#x2F;a&gt;, the &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2025&#x2F;04&#x2F;introducing-policy-servers&#x2F;&quot;&gt;improvements earlier in the year&lt;&#x2F;a&gt;, and lots more work on cross-ecosystem collaboration with &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;the-draupnir-project&#x2F;Draupnir&quot;&gt;Draupnir&lt;&#x2F;a&gt; and the &lt;a href=&quot;https:&#x2F;&#x2F;the-draupnir-project.github.io&#x2F;draupnir-documentation&#x2F;moderator&#x2F;managing-policy-lists&quot;&gt;Community Moderation Effort&lt;&#x2F;a&gt;, we’ve certainly made some progress.  There is still much to be done though.  The painful truth of Trust &amp;amp; Safety is that &lt;strong&gt;it is the one thing which will determine the success or failure of Matrix in the long term&lt;&#x2F;strong&gt;.  One of the most dizzying realisations we ever had was back in 2016, when Matrix first started to get momentum and we realised that the actual long-term problem we had to solve was not decentralised communication, but instead empowering users and communities to protect themselves from abuse, spam, disinformation and propaganda… and effectively find a way to map real-life societal antiabuse mechanisms onto online communities.&lt;&#x2F;p&gt;
&lt;p&gt;We naively assumed that this would rapidly get solved given the attention it started to receive, but here we are 10 years later and if anything the Web has become more and more weaponized for information warfare since, especially in a world where LLMs can spew abuse at superhuman rates.  The good news is that folks like ROOST have recently appeared to work on this precise problem, and the Bluesky team are taking it seriously too with their composable moderation and user-selectable algorithmic feeds.  But the race is on to get to the point in Matrix where a full set of privacy-preserving decentralised reputation tools that users and communities can use to defend themselves are available in the protocol - letting users say “by default, please filter out invites and content from randoms (be they human or bot) who nobody vouches for in my community”.&lt;&#x2F;p&gt;
&lt;p&gt;We’ve also had our fair share of operational &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2025&#x2F;07&#x2F;postgres-corruption-postmortem&#x2F;&quot;&gt;fun&lt;&#x2F;a&gt; &amp;amp; &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2025&#x2F;10&#x2F;post-mortem&#x2F;&quot;&gt;games&lt;&#x2F;a&gt; with the &lt;a href=&quot;http:&#x2F;&#x2F;matrix.org&quot;&gt;matrix.org&lt;&#x2F;a&gt; homeserver, and seen &lt;a href=&quot;https:&#x2F;&#x2F;gist.github.com&#x2F;ara4n&#x2F;190ad712965d0f06e17f508d1a45b554&quot;&gt;a lot of frustration&lt;&#x2F;a&gt; at the speed of the transition to Matrix 2.0 - be that because the MSCs are still being finalised, or because some Element users are still stuck on the Classic app, unaware that Element X exists.&lt;&#x2F;p&gt;
&lt;p&gt;However, the reality is that the lived experience of Matrix today (at least for us!) is genuinely unrecognisably improved from even a few years ago. Unable to decrypt messages are massively reduced (assuming users don’t lose their recovery key or delete all their devices).  When using Element X, you get an app not just for tech-savvy people but for everyone, with super-glossy liquid glass UI on iOS26 and a &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=3Axa0Kw3XPI&quot;&gt;newly super-performant&lt;&#x2F;a&gt; app on Android; built on the super-stable Rust SDK with a beautiful event cache for offline support and message echoing&#x2F;queuing; complete now with threads and spaces (in labs), which &lt;a href=&quot;https:&#x2F;&#x2F;mastodon.matrix.org&#x2F;deck&#x2F;@Joseph_of_Earth@fosstodon.org&#x2F;115713412735285974&quot;&gt;is overall a genuine joy to use&lt;&#x2F;a&gt;.  Other clients building on rust-sdk like &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.gnome.org&#x2F;World&#x2F;fractal&quot;&gt;Fractal&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ulyssa&#x2F;iamb&quot;&gt;iamb&lt;&#x2F;a&gt; (and in the near future, &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;element-x-web-a-glimpse-into-the-future&#x2F;&quot;&gt;Element Web&lt;&#x2F;a&gt;) directly benefit from the same underlying engine - and meanwhile clients on other stacks like &lt;a href=&quot;https:&#x2F;&#x2F;fluffychat.im&#x2F;&quot;&gt;FluffyChat&lt;&#x2F;a&gt; or &lt;a href=&quot;https:&#x2F;&#x2F;trixnity.gitlab.io&#x2F;trixnity&#x2F;&quot;&gt;Trixnity&lt;&#x2F;a&gt; have been busy trailblazing too.  There may have been a lot of criticism over the last year, but we can’t help but feel that there have also been some huge steps forwards (perhaps making the remaining gaps all the more obvious). If you’re using Matrix today and enjoying it, please don’t take it for granted! Write a blog post, tell &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;twim-guide&#x2F;&quot;&gt;TWIM&lt;&#x2F;a&gt;, tell the world, tell us what we can improve, and don’t let the bad experiences drown out the positive ones.&lt;&#x2F;p&gt;
&lt;p&gt;Talking of remaining gaps: alas, they do exist.  Obvious ones include Synapse resource usage: while the Element team spiked out a demonstration of &lt;a href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;D5zAgVYBuGk?t=1851&quot;&gt;how Synapse could reduce its database usage by 100x&lt;&#x2F;a&gt; or so, they’ve been too busy with stuff like Hydra and other robustness work to go and make this a reality yet.  Another sore point is that Sliding Sync performance has in matrix-rust-sdk and Synapse regressed relative to the first implementations a few years ago, thanks to simplifications on the clientside to improve maintainability as well as changes on the server.  The sync performance is good, but it’s not the ~100ms “instant sync” that we had back in the &lt;a href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;eUPJ9zFV5IE?t=653&quot;&gt;first beta&lt;&#x2F;a&gt; at FOSDEM 2023, and it would be amazing to get back to that point.  Relatedly, the only other missing piece of the Sliding Sync puzzle in matrix-rust-sdk is ensuring that push notifications update the client’s event cache and application badge, so you don’t have to wait for the client to sync to read messages you were just pushed about. This work should now be unblocked by the latest event matrix-rust-sdk event cache improvements.&lt;&#x2F;p&gt;
&lt;p&gt;On the encryption side, we still have our work cut out for us.  While unable-to-decrypt messages have significantly improved (at least on synapse + matrix-rust-sdk and matrix-js-sdk clients), we still see a lot of users complaining that they can’t decrypt history due to losing their recovery key.  There’s a lot of work that could be done here: we’ve been experimenting with storing the recovery key in a WebAuthn Passkey and&#x2F;or hardware token, or simply deriving it clientside in the OIDC identity provider (if you trust the JavaScript the IdP serves you).  We also need to finish shipping the ability to share history when inviting users to a room via &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;4268&quot;&gt;MSC4268&lt;&#x2F;a&gt;, and excluding untrusted devices by default via &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;4153&quot;&gt;MSC4153&lt;&#x2F;a&gt; (planned for &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;verifying-your-devices-is-becoming-mandatory-2&#x2F;&quot;&gt;April 2026&lt;&#x2F;a&gt;).  Other big stuff that needs to be addressed includes finally imposing client-controlled group membership; progressing MLS as an alternative to Olm&#x2F;Megolm; progressing Post Quantum encryption (with or without MLS), and actually getting some kind of transitive trust in place rather than requiring all users having to explicitly verify each other out of band (heck, even PGP has transitive trust!).&lt;&#x2F;p&gt;
&lt;p&gt;Then, on the core protocol side, we have phase 2 and phase 3 of Hydra to progress: improving robustness further, and then introducing finality to avoid problems caused by backdating events. This should also (at last!) switch user IDs to be public keys as per &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;4243&quot;&gt;MSC4243&lt;&#x2F;a&gt;, removing the final wrinkle from Matrix’s GDPR by eliminating directly identifiable personal information from matrix IDs, as well as paving the way towards long-awaited account portability.  Somewhat related to this, Element is still hopeful to do some very pragmatic &lt;a href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;2y8qtRLgalQ?list=PLl5dnxRMP1hUgnYEbpEsEEhIqY_KlO3NG&amp;amp;t=1590&quot;&gt;P2P Matrix&lt;&#x2F;a&gt; work in 2026, after an initial spike back in November - watch this space for details.&lt;&#x2F;p&gt;
&lt;p&gt;Finally on the clientside, we’re finally at the point where some of the auxiliary APIs are becoming the bottleneck. Having a standard way to query cross-server user directories or shared address books would be amazing, especially now we have extensible profiles in &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;4133&quot;&gt;MSC4133&lt;&#x2F;a&gt;. Likewise privacy-preserving contact lookup could be transformative for mainstream Matrix uptake.  There’s also a whole ocean of work to be done to improve how we integrate external apps into Matrix - be that via Widgets, or looking at recent developments in &lt;a href=&quot;https:&#x2F;&#x2F;webxdc.org&#x2F;&quot;&gt;WebXDC&lt;&#x2F;a&gt; and other initiatives.&lt;&#x2F;p&gt;
&lt;p&gt;Who knows which of these will actually happen in 2026! A lot of it depends on whether more organisations step up and put money behind by the bar by &lt;a href=&quot;http:&#x2F;&#x2F;matrix.org&#x2F;membership&quot;&gt;joining the Foundation&lt;&#x2F;a&gt; or help fund development. Needless to say, we will keep plugging away trying to fill the gaps whatever - but the question is one of speed: the more funding available, the faster it will happen.  For instance, I’m painfully aware that we’ve been aiming for decentralised accounts since, uh, &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2015&#x2F;12&#x2F;25&#x2F;the-matrix-holiday-special&#x2F;#epilogue&quot;&gt;2015&lt;&#x2F;a&gt;… but this just goes to show: if the Foundation is operating on a shoestring, then the juicier stuff gets starved out, to everyone’s detriment.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, things overall feel more positive than they have for years.  We’d like to massively thank the Foundation’s members, both individual and organisational, for helping get the Foundation spread its wings as far as it has - hopefully 2026 will be the year where we can truly fly!  Thanks also to the Governing Board and everyone contributing to the Working Groups for increasingly effectively sharing the load of pushing Matrix forwards: it’s great to see the fruits of open governance working out.  And finally: thanks to all the developers and users who continue to use and support Matrix.  The world needs secure, decentralised communication more than ever right now, and thank you for keeping the faith to make it happen via Matrix.&lt;&#x2F;p&gt;
&lt;p&gt;Happy holidays!&lt;&#x2F;p&gt;
&lt;p&gt;- Matthew &amp;amp; Amandine, on behalf of everyone working on Matrix.&lt;&#x2F;p&gt;
</content>
</entry>

    
<entry xml:lang="en">
    <title>The Matrix Holiday Special 2024</title>
    <published>2024-12-25T00:00:00+00:00</published>
    <updated>2024-12-25T00:00:00+00:00</updated>
    <author>
      <name>Matthew Hodgson, Josh Simmons</name>
    </author>
    <link rel="alternate" href="https://c956b204.matrix-website.pages.dev/blog/2024/12/25/the-matrix-holiday-special-2024/" type="text/html"/>
    <id>https://c956b204.matrix-website.pages.dev/blog/2024/12/25/the-matrix-holiday-special-2024/</id>
    <content type="html">&lt;p&gt;Hi all,&lt;&#x2F;p&gt;
&lt;p&gt;Once again we celebrate the end of another year with the traditional Matrix Holiday Special! (see also &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2023&#x2F;12&#x2F;25&#x2F;the-matrix-holiday-update-2023&#x2F;&quot;&gt;2023&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2022&#x2F;12&#x2F;25&#x2F;the-matrix-holiday-update-2022&quot;&gt;2022&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2021&#x2F;12&#x2F;22&#x2F;the-mega-matrix-holiday-special-2021&#x2F;&quot;&gt;2021&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2020&#x2F;12&#x2F;25&#x2F;the-matrix-holiday-special-2020&#x2F;&quot;&gt;2020&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2019&#x2F;12&#x2F;24&#x2F;the-2019-matrix-holiday-update&#x2F;&quot;&gt;2019&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2018&#x2F;12&#x2F;25&#x2F;the-2018-matrix-holiday-special&#x2F;&quot;&gt;2018&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2017&#x2F;12&#x2F;25&#x2F;the-matrix-holiday-mini-special-2017-edition&#x2F;&quot;&gt;2017&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2016&#x2F;12&#x2F;26&#x2F;the-matrix-holiday-special-2016-edition&#x2F;&quot;&gt;2016&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2015&#x2F;12&#x2F;25&#x2F;the-matrix-holiday-special&#x2F;&quot;&gt;2015&lt;&#x2F;a&gt; just in case you missed them).&lt;&#x2F;p&gt;
&lt;p&gt;This year, it is an incredible relief to be able to sit down and write an update which is overwhelmingly positive - in stark contrast to the rather mixed bags of 2022 and 2023. This is not to say that things are perfect: most notably, &lt;strong&gt;The Matrix.org Foundation has not yet hit its funding goals, and urgently needs more organisations who depend on Matrix to &lt;a href=&quot;http:&#x2F;&#x2F;matrix.org&#x2F;membership&quot;&gt;join as members&lt;&#x2F;a&gt; in order to be financially sustainable.&lt;&#x2F;strong&gt; However, in terms of progress of Matrix towards outperforming the centralised alternatives; growth of the ecosystem; the success of the first ever Matrix Conference; we couldn’t be happier - and hopefully the more Matrix matures, the more folks will want to join the Foundation to help fund it.&lt;&#x2F;p&gt;
&lt;p&gt;So, precisely why are we feeling so happy right now?&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h3 id=&quot;matrix-2-0&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#matrix-2-0&quot; aria-label=&quot;Anchor link for: matrix-2-0&quot;&gt;🔗&lt;&#x2F;a&gt;Matrix 2.0&lt;&#x2F;h3&gt;
&lt;p&gt;Matrix 2.0 is the project to ensure that Matrix can be used to build apps which outcompete the incumbent legacy mainstream communication apps.  Since announcing the project at FOSDEM 2023, we’ve been hard at work iterating on:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Sliding Sync, providing instant sync, instant login and instant launch.&lt;&#x2F;li&gt;
&lt;li&gt;Next Generation Auth via OIDC, to support instant login by QR code and consistent secure auth no matter the client.&lt;&#x2F;li&gt;
&lt;li&gt;Native Multiparty VoIP via MatrixRTC, to provide consistent end-to-end-encrypted calling conferencing within Matrix using Matrix’s encryption and security model.&lt;&#x2F;li&gt;
&lt;li&gt;Invisible Cryptography, to ensure that encryption in Matrix is seamless and no longer confuses users with unable-to-decrypt errors, scary shields and warnings, or other avoidable UX fails.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;All of these projects are big, and we’ve been taking the time to iterate and get things right rather than cut corners – the whole name of the game has been to take Matrix from 1.0 (it works) to 2.0 (it works fast and delightfully, and outperforms the others).  However, in September at the Matrix Conference we got to the point of shipping working implementations of all of the Matrix 2.0 MSCs, with the expectation of using these implementations to prove the viability of the MSCs and so propose them for merging into the spec proper.&lt;&#x2F;p&gt;
&lt;p&gt;Sliding Sync ended up evolving into &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;4186&quot;&gt;MSC4186&lt;&#x2F;a&gt;: Simplified Sliding Sync, and is now natively integrated into Synapse (no more need to run a sliding sync proxy!) and deployed on matrix.org, and implemented in matrix-rust-sdk and matrix-js-sdk.  MatrixRTC is &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;4143&quot;&gt;MSC4143&lt;&#x2F;a&gt; and dependents and is also deployed on matrix.org and call.element.io. Invisible Cryptography is a mix of MSCs: &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;4161&quot;&gt;MSC4161&lt;&#x2F;a&gt; (Crypto terminology for non-technical users), &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;4153&quot;&gt;MSC4153&lt;&#x2F;a&gt; (Exclude non-cross-signed devices), &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;3834&quot;&gt;MSC3834&lt;&#x2F;a&gt; (Opportunistic user key pinning (TOFU)), and is mostly now implemented in matrix-rust-sdk - and Unable To Decrypt problems have been radically reduced (see &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=FHzh2Y7BABQ&quot;&gt;Kegan’s excellent Matrix Conference talk&lt;&#x2F;a&gt; for details).  Finally, Next Gen Auth is &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;3861&quot;&gt;MSC3861&lt;&#x2F;a&gt; and is planned to be deployed on matrix.org via &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;element-hq&#x2F;matrix-authentication-service&quot;&gt;matrix-authentication-service&lt;&#x2F;a&gt; in Feb 2025.&lt;&#x2F;p&gt;
&lt;p&gt;It’s been controversial to ship Matrix 2.0 implementations prior to the MSCs being fully finalised and merged, but given the MSCs are backwards compatible with Matrix 1.0, and there’s unquestionable benefit to the ecosystem in getting these step-changes in the hands of users ASAP, we believe the aggressive roll-out is justified. Meanwhile, now the implementations are out and post-launch teething issues have largely been resolved, the MSCs will progress forwards.&lt;&#x2F;p&gt;
&lt;p&gt;One of the things we somehow failed to provide when announcing the implementations at the Matrix Conference was a playground for folks to experiment with Matrix 2.0 themselves. There’s now one based on Element’s stack of Synapse + matrix-authentication-service + Element Web + Element Call available at &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;element-hq&#x2F;element-docker-demo&quot;&gt;element-docker-demo&lt;&#x2F;a&gt; in case you want to do a quick &lt;code&gt;docker compose up&lt;&#x2F;code&gt; to see what all the fuss is about!  Meanwhile, matrix.org should support all the new MSCs in February – which might even coincide with the MSCs being finalised, you never know!&lt;&#x2F;p&gt;
&lt;p&gt;Rather than going through Matrix 2.0 in detail again, best bet is to check out the launch talk from The Matrix Conference…&lt;&#x2F;p&gt;
&lt;noscript&gt;
  Today&#x27;s Matrix Live:
  &lt;a href=&quot;https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=ZiRYdqkzjDU&quot;&gt;
    https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=ZiRYdqkzjDU
  &lt;&#x2F;a&gt;
&lt;&#x2F;noscript&gt;
&lt;youtube-player video-id=&quot;ZiRYdqkzjDU&quot;&gt;&lt;&#x2F;youtube-player&gt;
&lt;p&gt;…and in terms of seeing a Matrix 2.0 client in action, the Element X launch talk shows what you can do with it!&lt;&#x2F;p&gt;
&lt;noscript&gt;
  Today&#x27;s Matrix Live:
  &lt;a href=&quot;https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=gHyHO3xPfQU&quot;&gt;
    https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=gHyHO3xPfQU
  &lt;&#x2F;a&gt;
&lt;&#x2F;noscript&gt;
&lt;youtube-player video-id=&quot;gHyHO3xPfQU&quot;&gt;&lt;&#x2F;youtube-player&gt;
&lt;p&gt;Honestly, it is &lt;em&gt;insanely&lt;&#x2F;em&gt; exciting to see Matrix having evolved from the “good enough for enthusiastic geeks” to the “wow, this feels better than Signal” phase that we’re entering now.  Meanwhile, matrix-rust-sdk is tracking all the latest Matrix 2.0 work, so any client built on matrix-rust-sdk (Fractal, Element X, iamb, etc) can benefit from it immediately.  There’s also some &lt;em&gt;really&lt;&#x2F;em&gt; exciting matrix-rust-sdk improvements on the near horizon in the form of the long-awaited &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-rust-sdk&#x2F;issues&#x2F;3280&quot;&gt;persistent event cache&lt;&#x2F;a&gt;, which will accelerate all event operations enormously by avoiding needless server requests, as well as providing full offline support.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;the-matrix-conference&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-matrix-conference&quot; aria-label=&quot;Anchor link for: the-matrix-conference&quot;&gt;🔗&lt;&#x2F;a&gt;The Matrix Conference&lt;&#x2F;h3&gt;
&lt;p&gt;Talking of The Matrix Conference - this was by far the highlight of the year; not just due to being an excellent excuse to get Matrix 2.0 implementations launched, but because it really showed the breadth and maturity of the wider Matrix ecosystem.&lt;&#x2F;p&gt;
&lt;p&gt;One of the most interesting dynamics was that by far the busiest track was the Public Sector talk track (sponsored by Element) – standing room only, with folks queuing outside or watching the livefeed, whether this was &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=MoA2cYfHlyA&quot;&gt;Gematik talking about Matrix&lt;&#x2F;a&gt; powering communications for the German healthcare industry, &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=EIRuxDuWIDE&quot;&gt;SwissPost showing off their nationwide Matrix deployment&lt;&#x2F;a&gt; for Switzerland, &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=m1roliPrNqc&quot;&gt;DINUM showing off Tchap&lt;&#x2F;a&gt; for France, &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=4aswIHJRwkk&quot;&gt;NATO explaining NI²CE&lt;&#x2F;a&gt; (their Matrix messenger), &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=XLt70u0btsM&quot;&gt;Försäkringskassan showing off Matrix for Sweden&lt;&#x2F;a&gt; with SAFOS, &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=Oan-bx84ui8&quot;&gt;Tele2 showcasing Tele2 Samarbete&lt;&#x2F;a&gt; (Matrix based collaboration from one of Sweden’s main telcos), FITKO explaining how to do &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=Fj_tBpTlBEE&quot;&gt;Government-to-Citizen communication with Matrix in Germany&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=oMxxfRiaN98&quot;&gt;ZenDiS using Matrix for secure communication&lt;&#x2F;a&gt; in the German sovereign workspace openDesk project, or &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=uRaKEw6Wo3U&quot;&gt;IBM showing off their Matrix healthcare deployments&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;This felt really surprising: not only are we in an era where Matrix appears to be completely dominating secure communication and collaboration in the public sector – but it’s not just GovTech folks interested, but the wider Matrix community too.&lt;&#x2F;p&gt;
&lt;p&gt;I think it’s fair to say that when we created Matrix, we didn’t entirely anticipate this super-strong interest from government deployments – although in retrospect it makes perfect sense, given that more than anyone, nations wish to control their own infrastructure and run it securely without being operationally dependent on centralised solutions run out of other countries.  A particular eye-opener recently has been seeing US Senators Ron Wyden (D) and Eric Schmitt (R) &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;senators-implore-department-of-defense-to-expand-the-use-of-matrix&#x2F;&quot;&gt;campaigning for the US Government to deploy Matrix&lt;&#x2F;a&gt; in a way similar to France, Germany, Sweden and others. If this comes to pass, then it will surely create a whole new level of Matrix momentum!&lt;&#x2F;p&gt;
&lt;p&gt;It’s worth noting that while many Matrix vendors like Element, Nordeck, Famedly, connect2x and others have ended up mainly focusing commercially on public sector business (given that’s empirically where the money is right now) – the goal for Matrix itself continues to be mainstream uptake.&lt;&#x2F;p&gt;
&lt;p&gt;Matrix’s goal has always been to be the missing communication layer of the web for &lt;strong&gt;everyone&lt;&#x2F;strong&gt;, providing a worthy modern open replacement to both centralised messaging silos as well as outdated communication networks like email and the PSTN.  It would be a sore failure of Matrix’s potential if it “only” ended up being successful for public sector communication!  As it happens, our FOSDEM 2025 mainstage talk was just accepted, and happens to be named “The Road To Mainstream Matrix.” So watch this space to find out in February how all the Matrix 2.0 work might support mainstream Matrix uptake in the long-run, and how we plan to ensure Matrix expands beyond GovTech!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;the-governing-board&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-governing-board&quot; aria-label=&quot;Anchor link for: the-governing-board&quot;&gt;🔗&lt;&#x2F;a&gt;The Governing Board&lt;&#x2F;h3&gt;
&lt;p&gt;Another transformative aspect of 2024 was the formation of The Matrix.org Foundation Governing Board. &lt;em&gt;&lt;strong&gt;Over to Josh with the details…&lt;&#x2F;strong&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;The election of our first ever Governing Board this year has gone a long way to ensuring we can truly call Matrix a public good, as something that is not only shared under an open source license and developed in the open, but also openly governed by elected representatives from across the ecosystem.&lt;&#x2F;p&gt;
&lt;p&gt;It took forming the Spec Core Team and the Foundation, both critical milestones on a journey of openness and independence, to pave the way. And with the Governing Board, we have a greater diversity of perspectives and backgrounds looking after Matrix than ever before!&lt;&#x2F;p&gt;
&lt;p&gt;The Governing Board is in the process of establishing its norms and processes and just last week &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2024&#x2F;12&#x2F;governing-board-first-report&#x2F;&quot;&gt;published the first Governing Board report&lt;&#x2F;a&gt;. Soon it’ll have elected committee chairs and vice chairs, and it appears to be on track to introduce our first working groups – official bodies to work together on initiatives in support of Matrix  – at FOSDEM. Working groups will be another massive step forward, as they enable us to harmonize work across the ecosystem, such as on Trust &amp;amp; Safety and community events.&lt;&#x2F;p&gt;
&lt;p&gt;One last note on this, I want to shout out Greg Sutcliffe and Kim Brose, our first duly elected Chair and Vice Chair of the Governing Board, who have been doing great work to keep things in motion.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;growing-membership&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#growing-membership&quot; aria-label=&quot;Anchor link for: growing-membership&quot;&gt;🔗&lt;&#x2F;a&gt;Growing Membership&lt;&#x2F;h3&gt;
&lt;p&gt;A key part of building the Governing Board has been recruiting to our membership program, which brings together organizations, communities, and individuals who are invested in Matrix. Our members illustrate the breadth of the ecosystem, and many of them are funders who help sustain our mission.&lt;&#x2F;p&gt;
&lt;p&gt;The Foundation has gone from being completely subsidized by Element in 2022, to having nearly half of its annual budget covered by its 11 funding members.&lt;&#x2F;p&gt;
&lt;p&gt;Of course, only being able to sustain half our annual budget is not nearly good enough, and it means that we live hand-to-mouth, extending our financial runway a bit at a time. It’s a nail biter of a ride for the hardworking staff who labor under this uncertainty, but we savor every win and all the progress we’ve made.&lt;&#x2F;p&gt;
&lt;p&gt;I’d like to take this opportunity to thank our funding members, including &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;&quot;&gt;Element&lt;&#x2F;a&gt;, our Gold Members, &lt;a href=&quot;https:&#x2F;&#x2F;automattic.com&#x2F;&quot;&gt;Automattic&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;www.futurewei.com&#x2F;&quot;&gt;Futurewei Technologies&lt;&#x2F;a&gt;, our Silver Members, &lt;a href=&quot;https:&#x2F;&#x2F;ercom.com&#x2F;&quot;&gt;ERCOM&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;www.fairkom.eu&#x2F;&quot;&gt;Fairkom&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;www.famedly.com&#x2F;&quot;&gt;Famedly&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;fractalnetworksco&#x2F;&quot;&gt;Fractal Networks&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;www.gematik.de&#x2F;&quot;&gt;Gematik&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;indie.host&#x2F;&quot;&gt;IndieHosters&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;verji.no&#x2F;en&quot;&gt;Verji Tech&lt;&#x2F;a&gt;, and &lt;a href=&quot;https:&#x2F;&#x2F;www.xwiki.org&#x2F;&quot;&gt;XWiki&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;We look forward to welcoming two new funding members in the coming weeks!&lt;&#x2F;p&gt;
&lt;p&gt;Our community-side members also play an important role, and we’re grateful for their work and participation. This includes our Associate Members, &lt;a href=&quot;https:&#x2F;&#x2F;eclipse.org&#x2F;&quot;&gt;Eclipse Foundation&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;gnome.org&#x2F;&quot;&gt;GNOME Foundation&lt;&#x2F;a&gt;, and &lt;a href=&quot;https:&#x2F;&#x2F;kde.org&#x2F;&quot;&gt;KDE&lt;&#x2F;a&gt;, and our Ecosystem Members: &lt;a href=&quot;https:&#x2F;&#x2F;cinny.in&#x2F;&quot;&gt;Cinny&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;support&#x2F;&quot;&gt;Community Moderation Effort&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;conduit.rs&#x2F;&quot;&gt;Conduit&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;the-draupnir-project&#x2F;Draupnir&quot;&gt;Draupnir&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;noordstar&#x2F;elm-matrix-sdk&quot;&gt;Elm SDK&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;fluffychat.im&#x2F;&quot;&gt;FluffyChat&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.gnome.org&#x2F;World&#x2F;fractal&quot;&gt;Fractal&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#community-events:matrix.org&quot;&gt;Matrix Community Events&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;apps.kde.org&#x2F;neochat&#x2F;&quot;&gt;NeoChat&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;nheko.im&#x2F;nheko-reborn&#x2F;nheko&#x2F;&quot;&gt;Nheko-Reborn&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;polychat.de&#x2F;&quot;&gt;Polychat&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;cgit.rory.gay&#x2F;matrix&quot;&gt;Rory&amp;amp;::LibMatrix&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;thunderbird.net&#x2F;&quot;&gt;Thunderbird&lt;&#x2F;a&gt;, and &lt;a href=&quot;https:&#x2F;&#x2F;trixnity.gitlab.io&#x2F;trixnity&quot;&gt;Trixnity&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;If you’d like to see Matrix continue its momentum and the Foundation to further its work in ensuring Matrix is an independently and collectively governed protocol, &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;support&#x2F;&quot;&gt;please join the Foundation today&lt;&#x2F;a&gt;. We need your help!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Back to you, Matthew!&lt;&#x2F;strong&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;focus&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#focus&quot; aria-label=&quot;Anchor link for: focus&quot;&gt;🔗&lt;&#x2F;a&gt;Focus&lt;&#x2F;h3&gt;
&lt;p&gt;In 2023, we went through the nightmarishly painful process of ruthlessly focusing the core team exclusively on stabilising and polishing the foundations of Matrix – shelving all our next-generation showcases and projects and instead focusing purely on refining and evolving today’s Matrix core use cases for chat and VoIP.&lt;&#x2F;p&gt;
&lt;p&gt;In 2024, I’m proud to say that we’ve kept that focus – and indeed improved on it (for instance, &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2024&#x2F;09&#x2F;whatsapp-dma&#x2F;&quot;&gt;we’ve stepped back on DMA work&lt;&#x2F;a&gt; for much of the year in order to focus instead on the Trust &amp;amp; Safety work which has gone into Matrix 1.11, 1.12, and 1.13).  As a result, despite a smaller team, we’ve made huge progress with Matrix 2.0, and the results speak for themselves.  Anecdotally, I now wince whenever I have to use another messaging system – not because of loyalty to Matrix, but because the experience is going to be worse: WhatsApp has more &quot;Waiting for message, this may take a while&quot; errors (aka Unable To Decrypts or UTDs) than Matrix does, takes longer to launch and sync and has no threads; iMessage’s multidevice support can literally take hours to sync up; Signal just feels clunky and my message history is fragmented all over the place.  It feels so good to be in that place, at last.&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile, it seems that Element’s move to switch development of &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;synapse-now-lives-at-github-com-element-hq-synapse&#x2F;&quot;&gt;Synapse and other projects to AGPL&lt;&#x2F;a&gt; may have been for the best – it’s helped concretely address the issue of lack of commercial support from downstream projects, and Element is now in a much better position to continue funding Synapse and other core Matrix work.  It’s also reassuring to see that 3rd party contributions to Synapse are as active as ever, and all the post-AGPL work on Synapse such as native sliding sync shows Element’s commitment to improving Synapse.  Finally, while Dendrite dev is currently slow, the project is not abandoned, and critical fixes should keep coming – and if&#x2F;when funding is available P2P Matrix &amp;amp; Dendrite work should resume as before. It wouldn’t be the first time Dendrite has come back from stasis!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;the-future&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-future&quot; aria-label=&quot;Anchor link for: the-future&quot;&gt;🔗&lt;&#x2F;a&gt;The Future&lt;&#x2F;h3&gt;
&lt;p&gt;Beyond locking down Matrix 2.0 in the spec and getting folks using it, there are two big new projects on the horizon: MLS and State Res v3.&lt;&#x2F;p&gt;
&lt;p&gt;MLS is Messaging Layer Security (RFC 9420), the IETF standard for group end-to-end-encryption, and we’ve been experimenting with it for years now, starting around 2019, to evaluate it for use in Matrix alongside or instead of our current Double Ratchet implementation (Olm&#x2F;Megolm).  The complication on MLS is that it requires a logically centralised function to coordinate changes to the membership of the MLS group – whereas Matrix is of course fully decentralised; there’s never a central coordination point for a given conversation.  As a result, we’ve been through several iterations of how to decentralise MLS to make it play nice with Matrix – essentially letting each server maintain its own MLS group, and then defining merge operations to merge those groups together.  You can see the historical work over at &lt;a href=&quot;https:&#x2F;&#x2F;arewemlsyet.com&#x2F;&quot;&gt;https:&#x2F;&#x2F;arewemlsyet.com&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;However, the resulting dialect of MLS (DMLS) has quite different properties to vanilla RFC 9420 MLS – for instance, you have to keep around some historical key data in case it’s needed to recover from a network partition, which undermines forward secrecy to some extent.  Also, by design, Matrix network partitions can last forever, which means that the existing formal verification work that has been done around MLS’s encryption may not apply, and would need to be redone for DMLS.&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile, we’ve been participating in MIMI (More Instant Messaging Interoperability), an IETF working group focused on building a new messaging protocol to pair with MLS’s encryption.  A hard requirement for MIMI is to utilise MLS for E2EE, and we went through quite a journey to see if Matrix could be used for MIMI, and understand how Matrix could be used with pure MLS (e.g. by having a centralised Matrix dialect like &lt;a href=&quot;https:&#x2F;&#x2F;datatracker.ietf.org&#x2F;doc&#x2F;draft-ralston-mimi-linearized-matrix&#x2F;&quot;&gt;Linearized Matrix&lt;&#x2F;a&gt;).  Right now, MIMI is heading off in its own direction, but we’re keeping an eye on it and haven’t given up on converging somehow with it in future.  And if nothing else, the exercise taught us a lot about marrying up Matrix and MLS!&lt;&#x2F;p&gt;
&lt;p&gt;Over the last few months there has been more and more interest in using MLS in Matrix, and at The Matrix Conference &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=PCIg8Qjn74I&quot;&gt;we gave an update on the latest MLS thinking&lt;&#x2F;a&gt;, following a workshop at the conference with Franziskus from Cryspen (local MLS formal-verification experts in Berlin).  Specifically, the idea is that it might be possible to come up with a dialect of Matrix which used pure RFC 9420 MLS rather than DMLS, potentially using normal Matrix rather than Linearized Matrix… albeit with MLS group changes mediated by a single ‘hub’ server in the conversation.  The good news is that Cryspen proposed a mechanism where in the event of a network partition, both sides of the partition could elect a new hub and then merge the groups back together if the partition healed (handling history-sharing as an out-of-band problem, similar to the problem of sharing E2EE history when you join a new room in Matrix today).  This would then significantly reduce the disadvantages of rooms having to have a centralised hub, given if the hub broke you could seamlessly continue the conversation on a new one.&lt;&#x2F;p&gt;
&lt;p&gt;So, we’ve now had a chance to sketch this out as &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;4244&quot;&gt;MSC4244 - RFC 9420 MLS for Matrix&lt;&#x2F;a&gt;, with two dependent MSCs (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;4245&quot;&gt;MSC4245 - Immutable encryption&lt;&#x2F;a&gt;, and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;4246&quot;&gt;MSC4246 - Sending to-device messages as&#x2F;to a server&lt;&#x2F;a&gt;) and it’s looking rather exciting.  This is essentially the protocol that Travis &amp;amp; I would have proposed to MIMI had the WG not dismissed decentralisation and dismissed Matrix interop - showing how it’s possible to use MLS for cryptographic group membership of the devices in a conversation, while still using Matrix for the user membership and access control around the room (complete with decentralisation).  Best of all, it should also provide a solution to the longstanding problem of “Homeserver Control of Room Membership” highlighted by &lt;a href=&quot;https:&#x2F;&#x2F;nebuchadnezzar-megolm.github.io&#x2F;static&#x2F;paper.pdf&quot;&gt;Albrecht &amp;amp; co from RHUL in 2022&lt;&#x2F;a&gt;, by using MLS to prove that room membership changes are initiated by clients rather than malicious servers.&lt;&#x2F;p&gt;
&lt;p&gt;Now, we’re deliberately releasing this as a fairly early draft from the Spec Core Team in order to try to ensure that MLS spec work is done in the open, and to give everyone interested the opportunity to collaborate openly and avoid fragmentation.  In the end, the SCT has to sign off on MSCs which are merged into Matrix, and we are responsible for ensuring Matrix has a coherent and secure architecture at the protocol layer – and for something as critical as encryption, the SCT’s role in coordinating the work is doubly important.  So: if you’re interested in this space, we’d explicitly welcome collaboration and feedback on these MSCs in order to get the best possible outcome for Matrix – working together in the open, as per the &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;foundation&#x2F;about&#x2F;&quot;&gt;Foundation’s values&lt;&#x2F;a&gt; of ‘collaboration rather than competition’, and ‘transparency rather than stealth’.&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile, the other big new project on the horizon is State Resolution v3.  Old-timers may remember that when we launched Matrix 1.0, one of the big changes was the arrival of State Resolution v2 (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;blob&#x2F;erikj&#x2F;state_res_msc&#x2F;proposals&#x2F;1442-state-resolution.md&quot;&gt;MSC1442&lt;&#x2F;a&gt;), which fixed various nasty issues in the original merge conflict resolution algorithm Matrix uses to keep servers in sync with each other.  Now, State Res v2 has subsequently served us relatively well (especially relative to State Res v1), but there have still been a few situations where rooms have &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;8629&quot;&gt;state reset&lt;&#x2F;a&gt; unexpectedly – and we’re currently in the process of chasing them down and proposing some refinements to the algorithm.  There’s nothing to see yet, although part of the work here has been to dust off &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;tardis&quot;&gt;TARDIS&lt;&#x2F;a&gt;, our trusty Time Agnostic Room DAG Inspection Service, to help visualise different scenarios and compare different resolution algorithms.  So watch this space for some very pretty explanations once v3 lands!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;blog&#x2F;img&#x2F;2024-12-25-tardis.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;happy-new-year&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#happy-new-year&quot; aria-label=&quot;Anchor link for: happy-new-year&quot;&gt;🔗&lt;&#x2F;a&gt;Happy New Year!&lt;&#x2F;h3&gt;
&lt;p&gt;Matrix feels like it entered a whole new era in 2024 – with the Foundation properly spreading its wings, hosting The Matrix Conference, operationalising the Governing Board, and Matrix uptake exploding across the public sector of 20+ countries.  Funding continues to be an existential risk, but as Matrix continues to accelerate we’re hopeful that more organisations who depend on Matrix will lean in to support the Foundation and ensure Matrix continues to prosper.&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile, 2025 is shaping up to be really exciting. It feels like we’ve come out of the darkness of the last few years with a 2.0 which is better than we could have possibly hoped, and I can’t wait to see where it goes from here!&lt;&#x2F;p&gt;
&lt;p&gt;Thanks to everyone for supporting the project - especially if you are a member of the Foundation (and if not, &lt;a href=&quot;http:&#x2F;&#x2F;matrix.org&#x2F;membership&quot;&gt;please join here!&lt;&#x2F;a&gt;). We hope you have a fantastic end of the year; see you on the other side, and thanks for flying Matrix :)&lt;&#x2F;p&gt;
</content>
</entry>

    
<entry xml:lang="en">
    <title>The Matrix Holiday Update 2023</title>
    <published>2023-12-25T00:00:00+00:00</published>
    <updated>2023-12-25T00:00:00+00:00</updated>
    <author>
      <name>Matthew Hodgson</name>
    </author>
    <link rel="alternate" href="https://c956b204.matrix-website.pages.dev/blog/2023/12/25/the-matrix-holiday-update-2023/" type="text/html"/>
    <id>https://c956b204.matrix-website.pages.dev/blog/2023/12/25/the-matrix-holiday-update-2023/</id>
    <content type="html">&lt;p&gt;Hi all,&lt;&#x2F;p&gt;
&lt;p&gt;2023 has been a pivotal year for Matrix, with huge changes landing both organisationally and technically to prepare the protocol for future generations.  The ecosystem has once again gone from strength to strength, with active users (based on Synapse opt-in phone-home reporting) doubling across the public network, and more projects building on Matrix than we can count (look out for the “This Year in Matrix” community wrap-up blog post) - and more organisations than we can track joining Matrix for all their secure decentralised communication needs.&lt;&#x2F;p&gt;
&lt;p&gt;On the governance side, we are in an incredibly exciting new era with &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2023&#x2F;10&#x2F;26&#x2F;hello-world&#x2F;&quot;&gt;Josh joining the Matrix.org Foundation&lt;&#x2F;a&gt; as its first ever Managing Director (and employee!), with a mandate to cement sustainable funding for Matrix as an independent foundation, governed by the forthcoming elected &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2023&#x2F;12&#x2F;electing-our-first-governing-board&#x2F;&quot;&gt;open Governance Board&lt;&#x2F;a&gt;.  Now, &lt;strong&gt;Matrix needs funding more than ever&lt;&#x2F;strong&gt; - but rather than turning the entirety of this post into a plea for donations, I’m going to let Josh fly the flag in the coming weeks. Meanwhile, if you want Matrix to keep existing (especially if you’re an organisation who builds on Matrix) &lt;strong&gt;&lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;membership&#x2F;&quot;&gt;please join the Foundation&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;support&quot;&gt;donate&lt;&#x2F;a&gt;.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;On the technical side: the theme of the year has been one of focus: extreme, overdue, focus.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Over the years, it’s fair to say that the core team has tried to strike a balance between building the core foundational technology of Matrix (the spec, a stable server implementation, client SDKs, end-to-end encryption, VoIP, etc)... and long-term forward-looking projects designed to futureproof Matrix (e.g. Account Portability, P2P Matrix, Dendrite, Hydrogen) and&#x2F;or inspire developers to build on Matrix for more than just chat (e.g. Third Room, Applications Beyond Chat).  In retrospect, this was wildly optimistic: we underestimated the amount of remaining work needed to polish the foundational tech to mainstream quality - and despite Matrix uptake going through the roof, this hasn’t translated into sufficient funding to have the luxury to support folks to proactively work on next-gen projects (or foundational projects, for that matter).&lt;&#x2F;p&gt;
&lt;p&gt;So, this year, we’ve ended up focused on one thing: getting the foundational Matrix featureset to better-than-mainstream quality, performance and stability.  We’ve dubbed the overall initiative Matrix 2.0, and kicked it off at &lt;a href=&quot;https:&#x2F;&#x2F;archive.fosdem.org&#x2F;2023&#x2F;schedule&#x2F;event&#x2F;matrix20&#x2F;&quot;&gt;FOSDEM 2023&lt;&#x2F;a&gt; with our &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=eUPJ9zFV5IE&quot;&gt;Matrix 2.0: How we’re making Matrix go vooooom&lt;&#x2F;a&gt; main-stage talk.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;the-road-to-matrix-2-0&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-road-to-matrix-2-0&quot; aria-label=&quot;Anchor link for: the-road-to-matrix-2-0&quot;&gt;🔗&lt;&#x2F;a&gt;The Road to Matrix 2.0&lt;&#x2F;h3&gt;
&lt;p&gt;Matrix 2.0 isn’t (yet) an actual versioned release of the Matrix specification - instead, it describes the various foundational projects needed to get quality, performance and stability up to and beyond that of today’s mainstream messaging apps.  These projects are:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sliding Sync (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;3575&quot;&gt;MSC3575&lt;&#x2F;a&gt;)&lt;&#x2F;strong&gt;: the ability to instantly log in, launch and sync Matrix clients no matter how large or busy the account.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Native E2EE Group VoIP (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;3898&quot;&gt;MSC3898&lt;&#x2F;a&gt; + TBA)&lt;&#x2F;strong&gt;: scalable video and voice conferencing and calling built natively on Matrix and so benefiting from Matrix’s end-to-end encryption.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Native OIDC (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;3861&quot;&gt;MSC3861&lt;&#x2F;a&gt;)&lt;&#x2F;strong&gt;: replacing Matrix’s historical authentication mechanisms with industry-standard Open ID Connect (giving us two factor authentication, multi-factor auth, passkeys, and radically simplifying auth implementations for both client and server developers).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Faster Remote Room Joins (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;3902&quot;&gt;MSC3902&lt;&#x2F;a&gt;&lt;&#x2F;strong&gt;): letting servers rapidly join rooms on other servers by incrementally participating in the room.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Over the course of the year Matrix 2.0 has gone from the initial demo on stage at FOSDEM to concrete implementations which users can play with today as announced in our &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2023&#x2F;09&#x2F;matrix-2-0&#x2F;&quot;&gt;Matrix 2.0: The Future of Matrix&lt;&#x2F;a&gt; post in September.  Since then, we’ve been busy polishing away.  On Sliding Sync, the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;sliding-sync&quot;&gt;proxy&lt;&#x2F;a&gt; has pretty much stabilised - although the protocol itself can and should be simplified before we think seriously about native implementations (in practice, having the server track room list ordering gets very fiddly when only clients can really determine the final ordering, due to E2EE).  &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;element-x-ignition&#x2F;&quot;&gt;Element X&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-rust-sdk&quot;&gt;matrix-rust-sdk&lt;&#x2F;a&gt; has been the main implementation driving forwards Sliding Sync and much of the other Matrix 2.0 work, for those itching to play with it.&lt;&#x2F;p&gt;
&lt;p&gt;On Native Group VoIP: we’ve gone through many iterations over the year - starting off with Full Mesh calling (good for ~7 users per call); then switching to the experimental &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;waterfall&quot;&gt;waterfall&lt;&#x2F;a&gt; Selective Forwarding Unit (SFU) to provide scalable but not-E2EE conferencing; and then switching to a hybrid solution using LiveKit to provide an E2EE-capable scalable SFU, but with the signalling and encryption all handled by Matrix.  Element Call is the main implementation driving forwards the underlying Matrix work here, and &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;element-call-beta-3&#x2F;&quot;&gt;Element Call Beta 3&lt;&#x2F;a&gt; showed off the new LiveKit based implementation in July - which was then &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;element-x-now-with-embedded-voip&#x2F;&quot;&gt;integrated with Element X&lt;&#x2F;a&gt; complete with end-to-end encryption in November.  There’s still some polishing remaining here, with a new layout engine in the wings for Element Call, and enabling full encrypted-per-sender conferencing by default in both Element Web and Element X, but it really feels like the hardest work is behind us now: the core team has been successfully doing all of its collaboration on &lt;a href=&quot;https:&#x2F;&#x2F;call.element.io&quot;&gt;Element Call&lt;&#x2F;a&gt; for months now, like so:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;img&#x2F;20230921-element-call.avif&quot; alt=&quot;E2EE scalable Element Call&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;On Open ID Connect: things are also shaping up well. This will be the first time that we’ve replaced a large chunk of the Matrix spec with something else, and in order to manage your account in Matrix 2.0-native clients like Element X homeserver admins will need to migrate their authentication to the new OIDC World using &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-authentication-service&quot;&gt;matrix-authentication-service&lt;&#x2F;a&gt; (MAS).  There’s a great &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2023&#x2F;09&#x2F;better-auth&#x2F;&quot;&gt;blog post&lt;&#x2F;a&gt; from September which explains what this will entail - and since then, we even have the beginnings of &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-authentication-service&#x2F;tree&#x2F;main&#x2F;tools&#x2F;syn2mas&quot;&gt;syn2mas&lt;&#x2F;a&gt;: a migration script to migrate from Synapse-managed accounts to MAS-managed accounts (warning: still experimental).  The Matrix.org homeserver hasn’t been migrated yet (as we need to support social login first), but an increasing number of standalone Matrix servers are going OIDC-native, so arguably the migration has already begun!  We’ll keep &lt;a href=&quot;https:&#x2F;&#x2F;areweoidcyet.com&quot;&gt;https:&#x2F;&#x2F;areweoidcyet.com&lt;&#x2F;a&gt; updated as the project progresses.&lt;&#x2F;p&gt;
&lt;p&gt;Finally, the core of Faster Remote Room Joins (FRRJ) shipped in Synapse back in February. There’s still some major speedups that FRRJ could unlock, but the other tracks of Matrix 2.0 have been taking priority.&lt;&#x2F;p&gt;
&lt;p&gt;So: Matrix 2.0 is palpably on the horizon - all that remains is polish on the example clients (Element X &amp;amp; Element Call), full support for migrating to OIDC, and landing the MSCs into the spec. For instance, Element X just added read receipts and (early) E2EE backup support in the last few days - the gap is closing! It’s worth noting that significant amounts of this work has been funded by BWI for &lt;a href=&quot;https:&#x2F;&#x2F;messenger.bwi.de&#x2F;&quot;&gt;BwMessenger&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;messenger.bwi.de&#x2F;bundesmessenger&quot;&gt;BundesMessenger&lt;&#x2F;a&gt;: huge thanks to BWI for supporting core Matrix development by contracting Element.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;levelling-up-on-encryption&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#levelling-up-on-encryption&quot; aria-label=&quot;Anchor link for: levelling-up-on-encryption&quot;&gt;🔗&lt;&#x2F;a&gt;Levelling up on Encryption&lt;&#x2F;h3&gt;
&lt;p&gt;Encryption stability received a huge amount of attention this year. It turns out that reliable end-to-end encryption is surprisingly tricky in a decentralised environment, and historically we’ve been playing on hard mode by implementing three entirely separate implementations of the Matrix layer of encryption between matrix-js-sdk, matrix-ios-sdk and matrix-android-sdk2, each with their own bugs - more than tripling the costs of development, audits, and maintenance by the Foundation (quite ignoring the independent implementations from the community in mtxclient, libquotient, matrix-dart-sdk, trixnity etc).&lt;&#x2F;p&gt;
&lt;p&gt;So a huge project has been underway to converge on a single auditable codebase for the core team’s E2EE implementation so that any bugs or future features can be resolved in a single place. That codebase is matrix-rust-sdk’s &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-rust-sdk&#x2F;tree&#x2F;main&#x2F;crates&#x2F;matrix-sdk-crypto&quot;&gt;matrix-sdk-crypto&lt;&#x2F;a&gt; crate (and our underlying &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;vodozemac&quot;&gt;vodozemac&lt;&#x2F;a&gt; double ratchet implementation) - and we’re proud to say that we are using it for encryption in matrix-rust-sdk itself (as showcased by Element X and Fractal 5), matrix-ios-sdk and matrix-android-sdk2 (as used in the old Element iOS &amp;amp; Android apps), and have now merged it in matrix-js-sdk too (available for new logins on &lt;a href=&quot;https:&#x2F;&#x2F;c956b204.matrix-website.pages.dev&#x2F;blog&#x2F;2023&#x2F;12&#x2F;25&#x2F;the-matrix-holiday-update-2023&#x2F;develop.element.io&quot;&gt;develop.element.io&lt;&#x2F;a&gt;).  The process of rustifying the encryption in Element Web and the old iOS &amp;amp; Android apps has been nicknamed “Element R”.&lt;&#x2F;p&gt;
&lt;p&gt;The process of switching matrix-js-sdk to use Rust encryption has been particularly gruelling, requiring compiling matrix-sdk-crypto down to WASM as &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-rust-sdk-crypto-wasm&quot;&gt;matrix-rust-sdk-crypto-wasm&lt;&#x2F;a&gt; and then doing heart surgery to replace the old JS crypto implementation… while also needing to extensively loop from WASM back into the browser to use IndexedDB for storage, all while outperforming the old implementation.  It’s tantalisingly close now: while &lt;a href=&quot;https:&#x2F;&#x2F;c956b204.matrix-website.pages.dev&#x2F;blog&#x2F;2023&#x2F;12&#x2F;25&#x2F;the-matrix-holiday-update-2023&#x2F;develop.element.io&quot;&gt;develop.element.io&lt;&#x2F;a&gt; has it turned on by default for new logins, there are still a few remaining performance edge cases to be chased down related to online backup before we migrate everyone to it. The remaining &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;element-hq&#x2F;element-web&#x2F;issues?q=is%3Aissue+is%3Aopen+label%3AZ-Element-R-Blocker&quot;&gt;blocking issues&lt;&#x2F;a&gt; can be found on GitHub for those interested in tracking progress.&lt;&#x2F;p&gt;
&lt;p&gt;matrix-crypto-sdk is already manifestly more reliable than the old implementations (in terms of the chances of hitting infamous Unable To Decrypt errors) - and now that we are so close to converging on it everywhere, the race is on to ensure that any remaining defects get flushed out for once and for all.  One of the new initiatives here is called &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;complement-crypto&quot;&gt;complement-crypto&lt;&#x2F;a&gt; - a full end-to-end torture testing suite specifically for matrix-crypto-sdk.  You can read all about it in &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2023&#x2F;12&#x2F;01&#x2F;this-week-in-matrix-2023-12-01&#x2F;#complement-website&quot;&gt;the announcement post&lt;&#x2F;a&gt; a few weeks ago, but suffice it to say it’s a super exciting project which stress-tests both matrix-rust-sdk and matrix-js-sdk (with the new rust crypto implementation) against federated Synapse containers in order to test E2EE under the most horrible failure modes imaginable.  It’s already picked up some elusive bugs which have plagued us for literally years, and it looks set to be the main framework by which we will hunt down and kill any remaining issues.  See the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;complement-crypto&#x2F;?tab=readme-ov-file#test-hitlist&quot;&gt;Test hitlist&lt;&#x2F;a&gt; for the full scope we’re targeting.&lt;&#x2F;p&gt;
&lt;p&gt;Now that everyone’s (almost) converged on matrix-sdk-crypto, the next big project for the Crypto Team is going to be improving the E2EE usability (at last!).  The big news here is that we’re shifting to Trust On First Use (TOFU) for user trust.  Specifically: this means that we will only encrypt messages to devices whose owner has explicitly cross-signed them (essentially trusting the owner by default).  You will still be able to explicitly verify that other users are not being impersonated (via QR scan or emoji comparison), but this should improve the default behaviour to be much more secure.  Alongside TOFU will come other radical simplifications of the E2EE UX (both around login, self-verification, cross-verification and backup), so watch this space: the game is afoot to finally fix Matrix’s E2EE usability, now we can make all the changes in one place!&lt;&#x2F;p&gt;
&lt;p&gt;Finally, work continues to progress at &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.matrix.org&#x2F;uhoreg&#x2F;matrix-dmls&quot;&gt;matrix-dmls&lt;&#x2F;a&gt; on supporting a decentralised dialect of Messaging Layer Security (MLS, &lt;a href=&quot;https:&#x2F;&#x2F;datatracker.ietf.org&#x2F;doc&#x2F;rfc9420&#x2F;&quot;&gt;RFC9420&lt;&#x2F;a&gt;) on top of Matrix as an alternative to our normal Olm&#x2F;Megolm encryption, with recent work focused on making it play nice with matrix-sdk-crypto. &lt;a href=&quot;https:&#x2F;&#x2F;arewemlsyet.com&quot;&gt;https:&#x2F;&#x2F;arewemlsyet.com&lt;&#x2F;a&gt; is the place to track updates (although it’s a bit overdue for an update).&lt;&#x2F;p&gt;
&lt;h3 id=&quot;in-other-news&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#in-other-news&quot; aria-label=&quot;Anchor link for: in-other-news&quot;&gt;🔗&lt;&#x2F;a&gt;In other news&lt;&#x2F;h3&gt;
&lt;p&gt;Faced with limited funding and the decision to focus exclusively on stability, reliability and performance, there have inevitably been some major changes impacting the core team.&lt;&#x2F;p&gt;
&lt;p&gt;One of the biggest changes is that Element (the company formed by the core Matrix team back in 2017 to try to fund our work on Matrix) can no longer financially afford to donate its work on Synapse and other server components to the Matrix Foundation under the permissive Apache licence. Instead, Element is continuing development under the copyleft AGPLv3 licence at &lt;a href=&quot;https:&#x2F;&#x2F;c956b204.matrix-website.pages.dev&#x2F;blog&#x2F;2023&#x2F;12&#x2F;25&#x2F;the-matrix-holiday-update-2023&#x2F;github.com&#x2F;element-hq&#x2F;synapse&quot;&gt;github.com&#x2F;element-hq&#x2F;synapse&lt;&#x2F;a&gt; going forwards. This is to let Element sell AGPL exceptions to commercial Matrix vendors in order to fund their underlying Matrix development: you can read more about it at &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;synapse-now-lives-at-github-com-element-hq-synapse&#x2F;&quot;&gt;Element’s announcement&lt;&#x2F;a&gt; - or you can listen to this week’s Matrix Live for a firsthand explanation:&lt;&#x2F;p&gt;
&lt;noscript&gt;
  Today&#x27;s Matrix Live:
  &lt;a href=&quot;https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=ejpjTZhL8MA&quot;&gt;
    https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=ejpjTZhL8MA
  &lt;&#x2F;a&gt;
&lt;&#x2F;noscript&gt;
&lt;youtube-player video-id=&quot;ejpjTZhL8MA&quot;&gt;&lt;&#x2F;youtube-player&gt;
&lt;p&gt;The other major change is that we’ve had no choice but pause development on the majority of the core team’s next-generation Matrix projects.  We had high hopes of being able to secure dedicated funding for &lt;a href=&quot;https:&#x2F;&#x2F;c956b204.matrix-website.pages.dev&#x2F;blog&#x2F;2023&#x2F;12&#x2F;25&#x2F;the-matrix-holiday-update-2023&#x2F;thirdroom.io&quot;&gt;Third Room&lt;&#x2F;a&gt; (especially after the awesome &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2023&#x2F;06&#x2F;07&#x2F;introducing-third-room-tp-2-the-creator-update&#x2F;&quot;&gt;Tech Preview 2: Creator Update&lt;&#x2F;a&gt; in June), but the interested parties did not come through, and the team has now disbanded.  Meanwhile, P2P Matrix and Low Bandwidth Matrix is on hiatus until there’s dedicated funding - and Account Portability work is also temporarily paused in favour of commercial Element work, despite the fantastic progress made recently with Pseudo IDs (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;4014&quot;&gt;MSC4014&lt;&#x2F;a&gt;) and Cryptographic identifiers (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;4080&quot;&gt;MSC4080&lt;&#x2F;a&gt;).  Given P2P Matrix and Account Portability were the main projects driving Dendrite development recently, this may also cause a slow-down in Dendrite development, although Dendrite itself will still be maintained.&lt;&#x2F;p&gt;
&lt;p&gt;Needless to say, this is far from an ideal situation: we sent up distress flares loud and clear at the beginning of &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2022&#x2F;12&#x2F;25&#x2F;the-matrix-holiday-update-2022&#x2F;&quot;&gt;last year’s holiday update&lt;&#x2F;a&gt;; and we’ve now had to shrink to focus exclusively on the core projects.  However, we’re optimistic that the tighter focus in the medium term will help us get back to the point where we can resume the longer-term projects - assuming that organisations (and individuals) dependent on Matrix &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;support&quot;&gt;sign up to support the project.&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;conclusion&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#conclusion&quot; aria-label=&quot;Anchor link for: conclusion&quot;&gt;🔗&lt;&#x2F;a&gt;Conclusion&lt;&#x2F;h3&gt;
&lt;p&gt;Despite the downsides of 2023, right now we’re feeling distinctly optimistic: Matrix 2.0 clients like Element X already outperform the best proprietary mainstream options by many metrics - and focusing purely on improving the foundations is only going to improve that. We may not have taken the most direct route to get to where we are today, but it genuinely feels like 2024 will be the year where Matrix overtakes the incumbents.&lt;&#x2F;p&gt;
&lt;p&gt;Talking of which, there’s just one last thing to mention: amidst the economic challenges of 2023, one future-facing core team Matrix project has survived: our work around the EU Digital Markets Act (DMA).  The DMA is leading antitrust legislation from the European Commission, which aims to stop big centralised tech companies (so called ‘gatekeepers’) from carelessly suppressing innovation, competition and consumer choice by trapping users inside their walled gardens.&lt;&#x2F;p&gt;
&lt;p&gt;Needless to say, we’ve been tracking the DMA closely throughout its gestation, and we’re now in the final sprint: in March 2024, messaging services which have been identified as gatekeepers will have to open their networks to allow interoperability with requesting messaging services (while preserving E2EE, if they’re encrypted).  So far, only WhatsApp and Facebook Messenger have been identified as gatekeeper services (Apple is doing everything they can to &lt;a href=&quot;https:&#x2F;&#x2F;appleinsider.com&#x2F;articles&#x2F;23&#x2F;12&#x2F;06&#x2F;apple-may-yet-prevail-in-eu-imessage-antitrust-investigation&quot;&gt;wriggle out of it&lt;&#x2F;a&gt;).  However, it looks like WhatsApp is &lt;a href=&quot;https:&#x2F;&#x2F;www.theverge.com&#x2F;2023&#x2F;9&#x2F;10&#x2F;23866912&#x2F;whatsapp-cross-platform-messaging-eu-dma-meta&quot;&gt;taking it seriously&lt;&#x2F;a&gt;, which could prove very interesting indeed.&lt;&#x2F;p&gt;
&lt;p&gt;As Matrix, we’ve taken a two-pronged approach: on one side, showcasing how Matrix as it stands today can already bridge existing chat systems together as a highest-common-denominator protocol (including preserving E2EE, if they happen to already use the Double Ratchet).  On the other side, we’ve also been contributing significantly to &lt;a href=&quot;https:&#x2F;&#x2F;datatracker.ietf.org&#x2F;group&#x2F;mimi&#x2F;about&#x2F;&quot;&gt;MIMI&lt;&#x2F;a&gt;, the IETF Working Group dedicated to standardising a lowest-common-denominator protocol specifically for DMA interoperability.&lt;&#x2F;p&gt;
&lt;p&gt;2023 has involved a lot of work on MIMI, participating in the Design Team alongside Phoenix, Wire, Cisco, Google and Wickr - and at IETF 118 in Prague in November we collectively proposed the first &lt;a href=&quot;https:&#x2F;&#x2F;datatracker.ietf.org&#x2F;doc&#x2F;html&#x2F;draft-ralston-mimi-protocol-01&quot;&gt;draft of the protocol&lt;&#x2F;a&gt; (see also the &lt;a href=&quot;https:&#x2F;&#x2F;datatracker.ietf.org&#x2F;meeting&#x2F;118&#x2F;materials&#x2F;slides-118-mimi-mimi-architecture-00&quot;&gt;architecture presentation&lt;&#x2F;a&gt; for context). MIMI has ended up taking some inspiration from Matrix (and &lt;a href=&quot;https:&#x2F;&#x2F;datatracker.ietf.org&#x2F;doc&#x2F;draft-ralston-mimi-linearized-matrix&#x2F;&quot;&gt;Linearized Matrix&lt;&#x2F;a&gt;, a simplified dialect we proposed which does away with full-mesh decentralisation), while focusing very tightly on the specific problems of server-to-server interop between existing communication services - leaning on MLS (where available) for synchronising state across the services, while also leaving the door open for using the Double Ratchet to provide an on-ramp for pragmatic bridging to today’s services (including Matrix!).&lt;&#x2F;p&gt;
&lt;p&gt;MIMI’s tight focus means that it doesn’t currently provide conversation history, arbitrary state events, or decentralised conversations - and is focused purely on server-server communication.  However, there’s certainly a world where Matrix could evolve to be compatible with MIMI - such a hypothetical Matrix 3.0 would effectively layer Matrix’s richer existing semantics (decentralised conversations, extensible state events, state resolution, group VoIP etc) on top of MIMI’s subset of functionality.  It’ll be interesting to see how this plays out.  Meanwhile, we’ll continue to provide both Matrix for pragmatic DMA interoperability for today - and participate in MIMI for IETF-track interoperability.&lt;&#x2F;p&gt;
&lt;p&gt;Anyhow: hopefully it’s clear that 2024 is going to be a super interesting year for Matrix - whether that’s simply by nailing Matrix 2.0, or whatever excitements DMA interoperability brings. And if you’re relying on Matrix: &lt;strong&gt;&lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;support&quot;&gt;please donate&lt;&#x2F;a&gt;.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile - have a fantastic end of the year; and thanks once again for flying Matrix.&lt;&#x2F;p&gt;
&lt;p&gt;- Matthew, Amandine, Josh &amp;amp; the whole team.&lt;&#x2F;p&gt;
</content>
</entry>

    
<entry xml:lang="en">
    <title>The Matrix Holiday Update 2022</title>
    <published>2022-12-25T00:00:00+00:00</published>
    <updated>2022-12-25T00:00:00+00:00</updated>
    <author>
      <name>Matthew Hodgson</name>
    </author>
    <link rel="alternate" href="https://c956b204.matrix-website.pages.dev/blog/2022/12/25/the-matrix-holiday-update-2022/" type="text/html"/>
    <id>https://c956b204.matrix-website.pages.dev/blog/2022/12/25/the-matrix-holiday-update-2022/</id>
    <content type="html">&lt;p&gt;Hi all,&lt;&#x2F;p&gt;
&lt;p&gt;2022 has been a rollercoaster of a year for Matrix.&lt;&#x2F;p&gt;
&lt;p&gt;On one hand, the network has doubled in size (44.1M to 80.3M visible matrix IDs). The wider world is having a grand awakening to the importance of decentralisation thanks to the situation at Twitter. We’ve seen an amazing number of major new players entering the Matrix ecosystem: &lt;a href=&quot;https:&#x2F;&#x2F;macaw.social&#x2F;@wongmjane&#x2F;109529583352532543&quot;&gt;Reddit appears to be building out new Chat&lt;&#x2F;a&gt; functionality using Matrix; &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;teamspeak&#x2F;status&#x2F;1589621116032585728&quot;&gt;TeamSpeak announced&lt;&#x2F;a&gt; Matrix-based chat in TS5; &lt;a href=&quot;https:&#x2F;&#x2F;meta.discourse.org&#x2F;t&#x2F;matrix-protocol-for-chat&#x2F;210780&quot;&gt;Discourse&lt;&#x2F;a&gt; is working on adding Matrix support; &lt;a href=&quot;https:&#x2F;&#x2F;www.theregister.com&#x2F;2022&#x2F;06&#x2F;30&#x2F;thunderbird_102&quot;&gt;Thunderbird&lt;&#x2F;a&gt; launched Matrix support; Governments from &lt;a href=&quot;https:&#x2F;&#x2F;gouvernement.lu&#x2F;en&#x2F;actualites&#x2F;toutes_actualites&#x2F;communiques&#x2F;2022&#x2F;11-novembre&#x2F;16-hansen-lancement.html&quot;&gt;Luxembourg&lt;&#x2F;a&gt; to &lt;a href=&quot;https:&#x2F;&#x2F;delta.mil.gov.ua&#x2F;wiki&#x2F;info&#x2F;&quot;&gt;Ukraine&lt;&#x2F;a&gt; have launched their own Matrix-powered chat infrastructure; and hundreds of other organisations ranging from startups to massive private &amp;amp; public sector entities are betting on the protocol. The European Parliament has used Matrix as a proof-point for the viability for communication interoperability between gatekeepers in the &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2022&#x2F;03&#x2F;29&#x2F;how-do-you-implement-interoperability-in-a-dma-world&quot;&gt;Digital Markets Act&lt;&#x2F;a&gt;. &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2022&#x2F;02&#x2F;07&#x2F;hosting-fosdem-2022-on-matrix&quot;&gt;FOSDEM 2022&lt;&#x2F;a&gt; ran smoothly via Matrix with over 23,000 attendees, making it the world&#x27;s largest open source conference (with 70% of attendees using their own servers!). &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;dsam-och-esam-forordar-matrix-for-saker-och-federerad-kommunikation-inom-sveriges-offentliga-sektor&#x2F;&quot;&gt;Sweden&lt;&#x2F;a&gt; has published case studies on the benefits of Matrix for messaging interoperability. Meanwhile existing players like Germany’s BWI have expanded their scope to providing Matrix messaging to the &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;bundesmessenger-is-a-milestone-in-germanys-ground-breaking-vision&#x2F;&quot;&gt;whole German State&lt;&#x2F;a&gt;; Automattic is busy building &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Automattic&#x2F;chatrix&quot;&gt;Matrix plugins&lt;&#x2F;a&gt; for Wordpress; Rocket.Chat launched &lt;a href=&quot;https:&#x2F;&#x2F;rocket.chat&#x2F;press-releases&#x2F;rocket-chat-leverages-matrix-protocol-for-decentralized-and-interoperable-communications&quot;&gt;federation via Matrix&lt;&#x2F;a&gt;, Gematik has been busy progressing their &lt;a href=&quot;https:&#x2F;&#x2F;www.gematik.de&#x2F;anwendungen&#x2F;ti-messenger&quot;&gt;TI Messenger&lt;&#x2F;a&gt; initiative for interoperable messaging within Germany’s healthcare industry, and &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;case-studies&#x2F;tchap&quot;&gt;Tchap&lt;&#x2F;a&gt; in France is continuing to expand.&lt;&#x2F;p&gt;
&lt;p&gt;On the other hand, only a handful of these initiatives have resulted in funding reaching the core Matrix team. &lt;strong&gt;This is directly putting core Matrix development at risk.&lt;&#x2F;strong&gt; We are witnessing a classic tragedy of the commons. We’ve released all the foundational code of Matrix as permissively-licensed open source and got it to the point that anyone can successfully run it at scale themselves. The network is expanding exponentially. But in return, it transpires that the vast majority of these commercial deployments fail to contribute financially to the Matrix Foundation - whether by donating directly or supporting indirectly by working with &lt;a href=&quot;https:&#x2F;&#x2F;element.io&quot;&gt;Element&lt;&#x2F;a&gt;, who fund the vast majority of core Matrix development today.&lt;&#x2F;p&gt;
&lt;p&gt;In short: folks love the amazing decentralised encrypted comms utopia of Matrix.  But organisations also love that they can use it without having to pay anyone to develop or maintain it. &lt;strong&gt;This is completely unsustainable&lt;&#x2F;strong&gt;, and Element is now &lt;em&gt;literally&lt;&#x2F;em&gt; unable to fund the entirety of the Matrix Foundation on behalf of everyone else - and has had to lay off some of the folks working on the core team as a result.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;The only viable solution to this is for organisations building on Matrix to contribute to sharing the costs of maintaining Matrix’s core projects.  We made &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2022&#x2F;12&#x2F;01&#x2F;funding-matrix-via-the-matrix-org-foundation&quot;&gt;a proposal&lt;&#x2F;a&gt; to address this a few weeks ago, which we’ll iterate on further in the new year to find an approach which both empowers the community and encourages organisations to participate.  In the interim, if you are an organisation who’s building on Matrix and you want the project to continue to flourish, &lt;strong&gt;please&lt;&#x2F;strong&gt; mail &lt;a href=&quot;mailto:funding@matrix.org&quot;&gt;funding@matrix.org&lt;&#x2F;a&gt; to discuss how you can support the foundations that you are depending on.&lt;&#x2F;p&gt;
&lt;p&gt;As a reminder, the work the &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;foundation&quot;&gt;Foundation&lt;&#x2F;a&gt; does today for the benefit of the Matrix includes:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Publishing the &lt;a href=&quot;https:&#x2F;&#x2F;spec.matrix.org&quot;&gt;Matrix Specification&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Organising the Matrix Spec Core Team, responsible for reviewing and evolving the protocol.&lt;&#x2F;li&gt;
&lt;li&gt;Writing roughly half the Matrix Spec Change &lt;a href=&quot;https:&#x2F;&#x2F;spec.matrix.org&#x2F;proposals&quot;&gt;proposals&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Developing &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&quot;&gt;Synapse&lt;&#x2F;a&gt;, the Python matrix homeserver implementation&lt;&#x2F;li&gt;
&lt;li&gt;Developing &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;dendrite&quot;&gt;Dendrite&lt;&#x2F;a&gt;, the Go homeserver implementation&lt;&#x2F;li&gt;
&lt;li&gt;Developing client SDKs for Web (matrix-js-sdk, matrix-react-sdk), iOS (matrix-ios-sdk), Android (matrix-android-sdk2), Python (matrix-nio)&lt;&#x2F;li&gt;
&lt;li&gt;Developing our next-generation client SDKs (matrix-rust-sdk)&lt;&#x2F;li&gt;
&lt;li&gt;Developing our end-to-end encryption implementations (&lt;a href=&quot;https:&#x2F;&#x2F;gitlab.matrix.org&#x2F;matrix-org&#x2F;olm&quot;&gt;libolm&lt;&#x2F;a&gt; in C&#x2F;C++ and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;vodozemac&quot;&gt;vodozemac&lt;&#x2F;a&gt; in Rust)&lt;&#x2F;li&gt;
&lt;li&gt;Developing next-generation end-to-end encryption implementations (&lt;a href=&quot;https:&#x2F;&#x2F;arewemlsyet.com&quot;&gt;MLS&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;Developing and evolving additional core functionality in Matrix, including:
&lt;ul&gt;
&lt;li&gt;Account portability&lt;&#x2F;li&gt;
&lt;li&gt;Faster room joins over federation&lt;&#x2F;li&gt;
&lt;li&gt;Sliding Sync for instant client sync&lt;&#x2F;li&gt;
&lt;li&gt;Threads&lt;&#x2F;li&gt;
&lt;li&gt;Rich Text composer components&lt;&#x2F;li&gt;
&lt;li&gt;Spaces&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;Developing &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-hookshot&quot;&gt;open source integrations&lt;&#x2F;a&gt; to other products (GitLab, GitHub, JIRA... )&lt;&#x2F;li&gt;
&lt;li&gt;Developing open source bridges to other platforms (IRC, XMPP, Slack, Discord, Telegram, bifrost…)&lt;&#x2F;li&gt;
&lt;li&gt;Developing &lt;a href=&quot;https:&#x2F;&#x2F;arewep2pyet.com&quot;&gt;peer-to-peer Matrix&lt;&#x2F;a&gt; implementations, avoiding the need for servers (and associated data&#x2F;metadata accumulation) entirely&lt;&#x2F;li&gt;
&lt;li&gt;Developing &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;lb&quot;&gt;low-bandwidth Matrix&lt;&#x2F;a&gt; transports&lt;&#x2F;li&gt;
&lt;li&gt;Developing and hosting static Matrix room archives for the wider network (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-static&quot;&gt;matrix-static&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-public-archive&quot;&gt;matrix-public-archive&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;Developing and hosting the &lt;a href=&quot;https:&#x2F;&#x2F;matrix.to&quot;&gt;matrix.to&lt;&#x2F;a&gt; link redirect service&lt;&#x2F;li&gt;
&lt;li&gt;Developing open source authentication mechanisms and integrations for Matrix (&lt;a href=&quot;https:&#x2F;&#x2F;areweoidcyet.com&quot;&gt;OIDC&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;Developing decentralised Video&#x2F;VoIP conferencing servers on Matrix (&lt;a href=&quot;https:&#x2F;&#x2F;c956b204.matrix-website.pages.dev&#x2F;blog&#x2F;2022&#x2F;12&#x2F;25&#x2F;the-matrix-holiday-update-2022&#x2F;github.com&#x2F;matrix-org&#x2F;waterfall&quot;&gt;waterfall&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;Developing decentralised Video&#x2F;VoIP client components on Matrix (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-js-sdk&#x2F;pull&#x2F;2553&quot;&gt;matrixRTC&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;Developing showcase &quot;beyond chat&quot; implementations of Matrix such as &lt;a href=&quot;https:&#x2F;&#x2F;thirdroom.io&quot;&gt;Third Room&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Developing moderation tooling and applying it to matrix.org (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;mjolnir&quot;&gt;mjolnir&lt;&#x2F;a&gt; and much more)&lt;&#x2F;li&gt;
&lt;li&gt;Publishing moderation reputation lists for the benefit of the wider community&lt;&#x2F;li&gt;
&lt;li&gt;Developing integration test suites for Matrix compatibility testing (&lt;a href=&quot;https:&#x2F;&#x2F;c956b204.matrix-website.pages.dev&#x2F;blog&#x2F;2022&#x2F;12&#x2F;25&#x2F;the-matrix-holiday-update-2022&#x2F;github.com&#x2F;matrix-org&#x2F;sytest&quot;&gt;sytest&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;complement&quot;&gt;complement&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;trafficlight&quot;&gt;trafficlight&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;Developing a reference push notification server (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;sygnal&quot;&gt;sygnal&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;Developing a reference identity directory server (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;sydent&quot;&gt;sydent&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;li&gt;Procuring and publishing independent &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2022&#x2F;05&#x2F;16&#x2F;independent-public-audit-of-vodozemac-a-native-rust-reference-implementation-of-matrix-end-to-end-encryption&quot;&gt;public audits&lt;&#x2F;a&gt; of Matrix&#x27;s encryption and wider stack&lt;&#x2F;li&gt;
&lt;li&gt;Publishing the matrix.org website and blog&lt;&#x2F;li&gt;
&lt;li&gt;Publishing the weekly &quot;Matrix Live&quot; video podcast&lt;&#x2F;li&gt;
&lt;li&gt;Publishing the weekly &quot;This Week In Matrix&quot; news letter&lt;&#x2F;li&gt;
&lt;li&gt;Organising regular meetups (e.g. &quot;Open Tech Will Save Us&quot;)&lt;&#x2F;li&gt;
&lt;li&gt;Promoting Matrix at open source conferences&lt;&#x2F;li&gt;
&lt;li&gt;Running the matrix.org homeserver&lt;&#x2F;li&gt;
&lt;li&gt;Moderating the matrix.org project rooms&lt;&#x2F;li&gt;
&lt;li&gt;Running free public bridges to networks such as IRC networks and XMPP.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;This list is not remotely exhaustive (turns out there are over 240 projects in the matrix.org GitHub org!) but it serves to illustrate the sheer scale of work that the Foundation performs today.  Keeping the core team funded to work on Matrix as our day job is critical for Matrix’s long-term success, and so we &lt;strong&gt;really&lt;&#x2F;strong&gt; hope that organisations depending on Matrix (or passing philanthropists who appreciate Matrix’s value) will drop a line to &lt;a href=&quot;mailto:funding@matrix.org&quot;&gt;funding@matrix.org&lt;&#x2F;a&gt; and help keep the show on the road.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;turbocharging-matrix&quot;&gt;Turbocharging Matrix&lt;&#x2F;h3&gt;
&lt;p&gt;Aside from the nightmares of funding open source software, 2022 has very much been a year of building - focusing on implementing a step change in Matrix’s performance and usability: ensuring that the protocol can punch its weight (and more!) against centralised proprietary alternatives. After all, Matrix clients need to be at least as good as the centralised alternatives in order to get widespread uptake.&lt;&#x2F;p&gt;
&lt;p&gt;This work has ended up taking many forms: on the server-side, Synapse sprouted Rust support to accelerate its hot paths, starting with &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;13838&quot;&gt;push rule evaluation&lt;&#x2F;a&gt;. It’s super exciting to see Synapse performance heading into a new era, building on the foundations of what’s become a very mature and stable homeserver implementation.&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile work is in the final stages on “&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;blob&#x2F;rav&#x2F;proposal&#x2F;faster_joins&#x2F;proposals&#x2F;3902-faster-remote-joins.md&quot;&gt;Faster Joins&lt;&#x2F;a&gt;”, finally letting servers rapidly join rooms over federation by synchronising only the minimal subset of state needed to join, rather than proactively synchronising the room’s full current state.  Faster joins became &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2022&#x2F;10&#x2F;18&#x2F;testing-faster-remote-room-joins&quot;&gt;available for testing&lt;&#x2F;a&gt; in Synapse in October, and since then the team has been &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;milestone&#x2F;10&quot;&gt;working through&lt;&#x2F;a&gt; making it support workers and addressing the various edge cases and bugs that have shown up during testing.  Current join performance is a roughly 25x speedup on large rooms, although we’re confident that we can improve this even more, and we’re aiming to land it in time for FOSDEM at the beginning of Feb.&lt;&#x2F;p&gt;
&lt;p&gt;On the client-side, the work to transform Matrix client performance has centred around “&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;blob&#x2F;kegan&#x2F;sync-v3&#x2F;proposals&#x2F;3575-sync.md&quot;&gt;Sliding Sync&lt;&#x2F;a&gt;” - our entirely new API for synchronising the minimal data to a client needed for it to render its UI, thus making login, launch and sync instant.  Sliding sync (originally called “sync v3”) has been a long time in the making; the API has gone through countless iterations as we worked away throughout 2022 implementing it in real-life clients, and adding all the extensions (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;3884&quot;&gt;MSC3884&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;3885&quot;&gt;MSC3885&lt;&#x2F;a&gt;) needed to get to parity with sync v2.  The wait has been well worth it, though: &lt;a href=&quot;https:&#x2F;&#x2F;pr9256--matrix-react-sdk.netlify.app&#x2F;&quot;&gt;support&lt;&#x2F;a&gt; in Element Web is in the final stages of development - and moreover the next-generation Element X mobile clients will only speak Sliding Sync.&lt;&#x2F;p&gt;
&lt;p&gt;Element X itself is shaping up to be a showcase of just how snappy and performant Matrix can be: built on matrix-rust-sdk, it uses native Swift UI on iOS&#x2F;macOS and Jetpack Compose on Android to couple together the best possible platform-native user experience with the ultimate underlying native-code SDK implementation, backed by sliding sync. The goal is to be at least as snappy as Telegram, iMessage or WhatsApp (we’ve taken to counting the frames in screen recordings to compare things like time-to-launch and time-to-load scrollback).  Element X is currently in late alpha on iOS, and the hope is to enter public beta in time for FOSDEM.  You can see a sneak peek here of the iPad-style layout (running under macOS) though!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;blog&#x2F;img&#x2F;2022-12-25-elementx.avif&quot; alt=&quot;Element X&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Finally, in terms of usability, there have been leaps and bounds forwards across Matrix - particularly with Element’s mobile UI being &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;an-unrecognisable-improvement-elements-new-design-is-here&#x2F;&quot;&gt;entirely refreshed&lt;&#x2F;a&gt; by the design team in September as a stepping stone to the forthcoming final Element X design.  Any remaining UX quirks should be flushed out with Element X, but the visuals are already a clear step forwards towards an excellent alternative to the centralised encumbents.&lt;&#x2F;p&gt;
&lt;noscript&gt;
  Today&#x27;s Matrix Live:
  &lt;a href=&quot;https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=kjZCD14qMK0&quot;&gt;
    https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=kjZCD14qMK0
  &lt;&#x2F;a&gt;
&lt;&#x2F;noscript&gt;
&lt;youtube-player video-id=&quot;kjZCD14qMK0&quot;&gt;&lt;&#x2F;youtube-player&gt;
&lt;h3 id=&quot;encryption&quot;&gt;Encryption&lt;&#x2F;h3&gt;
&lt;p&gt;We had great plans for E2EE in Matrix this year; starting off in a huge rush to get &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;vodozemac&quot;&gt;vodozemac&lt;&#x2F;a&gt; finished and &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2022&#x2F;05&#x2F;16&#x2F;independent-public-audit-of-vodozemac-a-native-rust-reference-implementation-of-matrix-end-to-end-encryption&quot;&gt;audited&lt;&#x2F;a&gt; as our shiny new native-Rust implementation of Olm&#x2F;Megolm. The plan was then to integrate vodozemac into matrix-rust-sdk’s crypto crate, and then replace the various old fragmented E2EE implementations across matrix-js-sdk, matrix-ios-sdk, matrix-android-sdk2 and matrix-rust-sdk itself with One True audited implementation - with audits booked with Least Authority to get further assurance around matrix-rust-sdk-crypto, matrix-rust-sdk itself and finally the full stack (Element X + Synapse).&lt;&#x2F;p&gt;
&lt;p&gt;Unfortunately, things went sideways when security researchers from Royal Holloway University London &amp;amp; elsewhere got in touch to explain that they had found some &lt;a href=&quot;https:&#x2F;&#x2F;nebuchadnezzar-megolm.github.io&#x2F;&quot;&gt;nasty implementation vulnerabilities&lt;&#x2F;a&gt; in the venerable matrix-js-sdk implementation.  So, we had no choice but to pause “Element R” - the project to converge matrix-{js,ios,android}-sdk on matrix-rust-sdk-crypto, and instead start analysing and addressing the issues across all current shipping Matrix clients in order to resolve them as rapidly as possible.  Ironically, it turned out in the end that only matrix-{js,ios,android}-sdk were affected - all other independent implementations, including matrix-rust-sdk, were okay.  As such, the Element R work would have protected us from these vulnerabilities had it been ready, and failing that it would have let us solve them in a single place.  Instead, Element R ended up getting pushed back for months while we worked through the various issues in triplicate across the legacy SDKs, while also checking all the other client implementations we could find, and dealing with additional issues which the RHUL researchers discovered as they dug deeper.  Eventually we finished the analysis and agreed a &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2022&#x2F;09&#x2F;28&#x2F;upgrade-now-to-address-encryption-vulns-in-matrix-sdks-and-clients&quot;&gt;coordinated disclosure&lt;&#x2F;a&gt; at the end of September.
(EDIT: to be clear, we are very grateful to the security researchers for discovering and disclosing the vulns responsibly to us. The frustration here stems from the irony that if we&#x27;d finished the matrix-rust-sdk-crypto rewrite a few months earlier, we&#x27;d have mitigated the severe vulns - but instead, the rewrite got pushed back even further. It&#x27;s obviously our fault though, not the researchers&#x27;.)&lt;&#x2F;p&gt;
&lt;p&gt;Since then, work has been split three ways: firstly, Element R work has resumed - and in fact Element R on iOS is pretty much usable as of today, other than needing some work to support E2EE push notifications (which will also be required for Element X). Element R on Android is very close too, and meanwhile Element R on Web decrypted its first event on Dec 19th! We’re hoping to get Element R in production on all platforms by Feb.&lt;&#x2F;p&gt;
&lt;p&gt;Secondly, we’ve been addressing other points raised by the RHUL researchers to ensure that malicious servers cannot add malicious devices or users to conversations, rather than warning as we do today.  This is not a trivial problem to solve, but we’re making progress via &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;3917&quot;&gt;MSC3917&lt;&#x2F;a&gt; (Cryptographically Constrained Room Membership) and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;3834&quot;&gt;MSC3834&lt;&#x2F;a&gt; (Opportunistic user key pinning (TOFU)).  However, this work is effectively blocked on Element R landing first, as there’s no way we’re going to fix this in triplicate on the legacy SDKs.&lt;&#x2F;p&gt;
&lt;p&gt;Thirdly, we’ve been pushing ahead on implementing Decentralised MLS as a next-generation encryption protocol for Matrix to potentially replace Olm and Megolm.  This work was badly disrupted by RHUL mitigations, but we’re making good progress again - you can follow all the details over at &lt;a href=&quot;https:&#x2F;&#x2F;arewemlsyet.com&quot;&gt;https:&#x2F;&#x2F;arewemlsyet.com&lt;&#x2F;a&gt;.  Matrix over DMLS is currently in alpha, but the aim is to start beta testing Decentralised MLS in 2023.&lt;&#x2F;p&gt;
&lt;p&gt;Finally, we’ve been working hard on completely reworking the overall UX of how E2EE should work in Matrix clients - specifically, requiring users to cross-sign their devices in order to use E2EE, and so end up in a much higher trust world (alongside Trust On First Use). Can’t wait to finally simplify the E2EE UX!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;all-new-features&quot;&gt;All new features&lt;&#x2F;h3&gt;
&lt;p&gt;It’s not all been performance and stability work this year - there have been some large areas of feature work happening too.&lt;&#x2F;p&gt;
&lt;p&gt;One of the most visible projects has been Threads, which &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;introducing-threads-in-beta&#x2F;&quot;&gt;launched in beta&lt;&#x2F;a&gt; in April, and subsequently has undergone huge amounts of polish to improve performance, notification semantics, unread behaviour and thread-aware read receipts.  The end result is feeling great now, and threads &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;element_hq&#x2F;status&#x2F;1605861000296640512&quot;&gt;exited beta&lt;&#x2F;a&gt; in Element Mobile on Dec 20th. Web narrowly missed the window due to a final ‘stuck notification’ bug which is still being tracked down, but will follow shortly afterwards and then threads will be finally out of beta!&lt;&#x2F;p&gt;
&lt;p&gt;Another big project in 2022 has been to create a general purpose Rich Text Editor to provide WYSIWYG (What You See Is What You Get) message composition for Matrix clients.  This has ended up being a very ambitious project to define all the core editing semantics in a shared rust library, with platform-specific bindings to link it into the editing UI available on Web, iOS &amp;amp; Android.  The end result lives at &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-rich-text-editor&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-rich-text-editor&lt;&#x2F;a&gt; - and you can play with it by enabling it in labs on Element Web&#x2F;iOS&#x2F;Android or experiment with the &lt;a href=&quot;https:&#x2F;&#x2F;matrix-org.github.io&#x2F;matrix-rich-text-editor&quot;&gt;live demo&lt;&#x2F;a&gt;. The core behaviour is feeling excellent, although predictably some of the fine detail is very fiddly to get right. It’s almost there, though, and thanks to its built-in rust test harness generator(!) we are confident we’ll catch and control all the edge cases, and this should form an incredibly strong platform for all future rich text editing requirements in Matrix (and beyond!).  This work was very kindly sponsored by one of Element’s public sector customers in order to get Element to parity with Teams - thank you!&lt;&#x2F;p&gt;
&lt;p&gt;Location Sharing was another feature which landed in 2022 - powered by &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;3488&quot;&gt;MSC3488&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;3489&quot;&gt;MSC3489&lt;&#x2F;a&gt;, and implemented in matrix-{js,ios,android}-sdk in Element Web&#x2F;iOS&#x2F;Android, letting users share static and live locations and view them on an OpenStreetMap compatible map tileserver of their server’s choice. The Live Location Sharing is controversial in that it stores location data in the room history (and as such is hidden behind a labs flag on Element), but should eventually be replaced by &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;3672&quot;&gt;MSC3672&lt;&#x2F;a&gt; to share locations are custom ephemeral events instead (once custom EDUs land) in the spec.  Around the same time, Polls also went live thanks to &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;3381&quot;&gt;MSC3381&lt;&#x2F;a&gt; - it’s worth noting that both Location Sharing and Polls are excellent examples of “extensible events” in the wild: ensuring that clients which understand the custom event type will render them appropriately, but letting other clients fall back to showing them as simple timeline events.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;open-id-connect&quot;&gt;Open ID Connect&lt;&#x2F;h3&gt;
&lt;p&gt;The transition to using Open ID Connect for Matrix authentication has been progressing steadily throughout 2022 - with Third Room being the first OIDC-native Matrix client, closely followed by Element X. &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-authentication-service&quot;&gt;matrix-authentication-service&lt;&#x2F;a&gt; now exists as a basic OIDC identity provider suitable for being linked into Synapse, and meanwhile Third Room demonstrates how you can integrate Keycloak as a third party IDP (complete with reCAPTCHA and guest access!).  The team also went on a very exciting detour to figure out how to perform login-and-E2EE-setup in a single operation by scanning a QR code (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;3906&quot;&gt;MSC3906&lt;&#x2F;a&gt;), and how it might integrate into OIDC in future.&lt;&#x2F;p&gt;
&lt;p&gt;Element X looks set to be the showcase for native OIDC in a typical Matrix client going forwards, so watch this space to see how it feels!&lt;&#x2F;p&gt;
&lt;p&gt;You can keep track of the inexorable transition to OIDC over at &lt;a href=&quot;https:&#x2F;&#x2F;areweoidcyet.com&quot;&gt;https:&#x2F;&#x2F;areweoidcyet.com&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;voip&quot;&gt;VoIP&lt;&#x2F;h3&gt;
&lt;p&gt;2022 was the year that Matrix finally got native multiparty VoIP.  After launching &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;introducing-native-matrix-voip-with-element-call&#x2F;&quot;&gt;Element Call Beta 1&lt;&#x2F;a&gt; in March followed by &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;element-call-beta-2-encryption-spatial-audio-walkie-talkie-mode-and-more&#x2F;&quot;&gt;Beta 2&lt;&#x2F;a&gt; in June, we’ve been busy embedding Element Call as a “matryoshka” widget into Element Web, using it to replace Jitsi in powering video rooms and video calls.  You can read all about this in detail in the &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2022&#x2F;08&#x2F;15&#x2F;the-matrix-summer-special-2022#native-voip-conferencing&quot;&gt;summer blog post&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile, lots of progress is underway on &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;waterfall&quot;&gt;Waterfall&lt;&#x2F;a&gt; - the name we picked for the Pion-based decentralised Selective Forwarding Unit (i.e. conferencing focus) contributed by Sean DuBois earlier in the year, including adding simulcast support to support large scale conferences.&lt;&#x2F;p&gt;
&lt;p&gt;There’s only one catch, which is that Element Call is still in (very very late) beta, thanks to a handful of bugs which have been hard to track down, which has in turn kept all the other dependencies (embedded Element Call; video rooms etc) in beta too.  However, we think we’re pretty much there now - which is perfect timing given how Waterfall is coming together, meaning that both stable &lt;em&gt;and&lt;&#x2F;em&gt; scalable native Matrix conferences are on the horizon!&lt;&#x2F;p&gt;
&lt;p&gt;Even better, the plan is for Element X to rely entirely on embedding Element Call for VoIP - so we should be able to jump forwards pretty rapidly to having excellent native multiparty VoIP and video rooms on mobile as well as on Web.  So, once Element Call exits beta, everything should follow.  Just for a change, we’re aiming to get this done by the end of January - but there are a lot of unknown unknowns still flying around, so watch this space…&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ietf-mimi&quot;&gt;IETF &amp;amp; MIMI&lt;&#x2F;h3&gt;
&lt;p&gt;Another massive new initiative this year has been the process of proposing Matrix to the IETF as a candidate for use in interoperable instant messaging standardisation.  The &lt;a href=&quot;https:&#x2F;&#x2F;datatracker.ietf.org&#x2F;group&#x2F;mimi&#x2F;about&#x2F;&quot;&gt;MIMI (More Instant Messaging Interoperability) working group&lt;&#x2F;a&gt; emerged earlier in the year within IETF as an initiative to define how MLS could be used to interoperate between different instant messaging silos - as shortly to be required by the &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2022&#x2F;03&#x2F;29&#x2F;how-do-you-implement-interoperability-in-a-dma-world&quot;&gt;Digital Markets Act&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;One of the things that MIMI aims to do is to define a common application layer protocol to exchange messages. At first &lt;a href=&quot;https:&#x2F;&#x2F;datatracker.ietf.org&#x2F;doc&#x2F;draft-mahy-mimi-content&#x2F;01&#x2F;&quot;&gt;CPIM was proposed&lt;&#x2F;a&gt; (an ancient message format that looks a lot like email) - and then an &lt;a href=&quot;https:&#x2F;&#x2F;datatracker.ietf.org&#x2F;doc&#x2F;draft-rosenberg-mimi-msg-format&#x2F;&quot;&gt;entirely new JSON message format&lt;&#x2F;a&gt; proposal emerged which looks somewhat Matrix (but isn’t). At this point it became obvious that we should throw our hat into the ring and encourage MIMI to use Matrix rather than reinvent it, and so we set about proposing Matrix as at least the &lt;a href=&quot;https:&#x2F;&#x2F;datatracker.ietf.org&#x2F;doc&#x2F;draft-ralston-mimi-matrix-message-format&#x2F;&quot;&gt;message format&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;datatracker.ietf.org&#x2F;doc&#x2F;draft-ralston-mimi-matrix-transport&#x2F;&quot;&gt;message transport layer&lt;&#x2F;a&gt; of the stack. It’s quite surreal to see Matrix starting to fly around as IETF Drafts!&lt;&#x2F;p&gt;
&lt;p&gt;The next step here is to re-express the relevant bits of the current Matrix spec as self-contained IETF Drafts (rather than backreferencing the current spec from the drafts).  The idea is that the normal Matrix spec will continue to evolve much as it always has, but we’ll effectively donate a Long Term Supported dialect of it to IETF which can then evolve according to IETF process and be immortalise as RFCs for use in MIMI.  We’ll then backport those changes into spec.matrix.org in order to avoid fragmentation, while retaining the same ability we have to rapidly iterate and extend Matrix with MSCs.  This work is well under way (taking opportunity to use &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;blob&#x2F;matthew&#x2F;msc1767&#x2F;proposals&#x2F;1767-extensible-events.md&quot;&gt;Extensible Events&lt;&#x2F;a&gt; from the outset!), and we should see explosions of further IETF Drafts emanating from Travis as 2023 progresses.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;trust-safety&quot;&gt;Trust &amp;amp; Safety&lt;&#x2F;h3&gt;
&lt;p&gt;2022 saw a real uptick in spam and abuse across Matrix, and there have been some valiant attempts to improve our moderation tooling over the course of the year.  Unfortunately it hasn’t come together as rapidly as we might have hoped, however, and we’ve seen several large communities give up on Matrix and move back to Discord thanks in part to needing better anti-abuse mechanisms.&lt;&#x2F;p&gt;
&lt;p&gt;In 2023 we’re resetting our trust &amp;amp; safety work, with Mjolnir dev returning to its original development team, and we’ll be working as tactically as possible to ensure that all communities on Matrix can easily block abuse using whatever mechanisms they need.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;p2p-dendrite&quot;&gt;P2P &amp;amp; Dendrite&lt;&#x2F;h3&gt;
&lt;p&gt;Meanwhile, Dendrite (our second generation homeserver implementation) development has continued at pace throughout the year. According to sytest we are now at 93% client-server API compliance with 577 out of 620 tests passing, and the server-server API compliance is at 97% with 111 out of 114 tests passing! None of the missing tests are showstoppers, so it’s fair to say that Dendrite is very nearly ready for primetime.&lt;&#x2F;p&gt;
&lt;p&gt;The interesting plot twist is that Dendrite development has ended up increasingly focusing on embedded matrix server use cases - particularly to power Peer-to-Peer Matrix, where clients require a server to be embedded within them.  So while Synapse has ended up increasingly focusing on large-scale deployments, Dendrite has ended up pursuing smaller instances (which is ironic, given originally it was meant to be the other way round!).&lt;&#x2F;p&gt;
&lt;p&gt;P2P Matrix work has been progressing well too - you can follow the blow-by-blow updates over at &lt;a href=&quot;https:&#x2F;&#x2F;arewep2pyet.com&quot;&gt;https:&#x2F;&#x2F;arewep2pyet.com&lt;&#x2F;a&gt;. After a lot of back and forth evaluating hard-state routing versus soft-state routing in Pinecone, we’ve ended up converging on soft-state routing (which is chattier, but easier to reason about in terms of mitigating attacks). However, the chattiness means that it doesn’t scale as well as one might hope - so we’re now working on a “tiered” approach where separate Pinecone networks can be tiered together into one inter-network, giving us scalability at the expense of being slightly less decentralised. It’s fair to say that the journey here has been pretty frustrating in its twists and turns, and sadly Neil Alexander chose to move on a few months ago. However, Devon has stepped up to fill his shoes as primary Pinecone and P2P wrangler, and is making amazing progress on the remaining work - firstly implementing &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;dendrite&#x2F;pull&#x2F;2917&quot;&gt;Store and Forward relaying&lt;&#x2F;a&gt; in Dendrite so that today’s Pinecone networks can exchange messages even if the recipient node is offline.  Next up will be bridging P2P Matrix with today’s Matrix network - and then working on tiering to provide the scalability we need.  The expectation is that today’s serverside Dendrite instances will effectively turn into static pinecone peers, store and forwarding messages on behalf of P2P nodes, and providing tiering between respective pinecone subnets.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;hydrogen-chatterbox&quot;&gt;Hydrogen &amp;amp; Chatterbox&lt;&#x2F;h3&gt;
&lt;p&gt;Development on Hydrogen as a super-lightweight progressive-web-app Matrix client has also been progressing throughout the year (with a few detours to help out with end-to-end testing via &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;trafficlight&quot;&gt;trafficlight&lt;&#x2F;a&gt; both for the benefit of Hydrogen and other clients).&lt;&#x2F;p&gt;
&lt;p&gt;The biggest change has been Hydrogen sprouting a separate SDK layer, letting the engine be embedded into other webapps in order to add noninvasive Matrix messaging with as minimal a footprint as possible.  This was showcased in Element’s &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;element-launches-chatterbox&#x2F;&quot;&gt;chatterbox&lt;&#x2F;a&gt; offering in July - providing an open source chatbox which can be trivially embedded into existing sites, and also powers the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Automattic&#x2F;chatrix&quot;&gt;Chatrix&lt;&#x2F;a&gt; wordpress plugin that Automattic is working on.&lt;&#x2F;p&gt;
&lt;p&gt;Hydrogen also added independent support for &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;3401&quot;&gt;MSC3401&lt;&#x2F;a&gt; multiparty voice&#x2F;video calling (albeit on a &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vector-im&#x2F;hydrogen-web&#x2F;pull&#x2F;705&quot;&gt;branch&lt;&#x2F;a&gt;), letting us showcase heterogeneous Element Call &amp;lt;-&amp;gt; Hydrogen group calling and prove MSC3401 as fit for purpose as a true open interoperable call signalling - and in turn Hydrogen SDK, complete with the multiparty voice&#x2F;video calling, powers the Matrix engine within Third Room - our metaverse-on-Matrix platform.&lt;&#x2F;p&gt;
&lt;p&gt;We’re looking forwards to Hydrogen continuing to reach full feature parity with Element over the next year, and popping up in increasingly unexpected places as everyone’s favourite embedded Matrix client!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;third-room&quot;&gt;Third Room&lt;&#x2F;h3&gt;
&lt;p&gt;Finally, it’s hard to believe that &lt;a href=&quot;https:&#x2F;&#x2F;thirdroom.io&quot;&gt;Third Room&lt;&#x2F;a&gt;, our Matrix-based open platform for decentralised realtime spatial collaboration, barely existed at the beginning of the year.  Third Room serves to demonstrate that Matrix is &lt;em&gt;way&lt;&#x2F;em&gt; more than just chat and VoIP, but can power the spatial communication layer of the open web. This has ended up driving forwards a tonne of new capabilities for Matrix - showcasing native OIDC auth; scalable multiparty VoIP in Hydrogen SDK, efficient binary-diffed file storage, and more recently has been defining how to store extensible behaviour for Matrix rooms as WASM objects stored in the Matrix room itself.&lt;&#x2F;p&gt;
&lt;p&gt;Third Room itself is a Hydrogen-based Matrix client, which lets you view Matrix rooms as interactive multiparty 3D environments (using &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;3815&quot;&gt;MSC3815&lt;&#x2F;a&gt;) - with the world defined as glTF blobs stored in the Matrix room, and the ability to script and customise any aspect of that world using WASM blobs stored in Matrix rooms, which execute on the participating clients, exposing a new scenegraph API called WebSceneGraph in order to manipulate the glTF that makes up the world.  We also expect to see a variant of Matrix’s normal widget API to be exposed to these WASM blobs, introducing the concept of sandboxed clientside widgets, bots or other integrations - letting users customise and extend Matrix without ever having to run serverside bots again.&lt;&#x2F;p&gt;
&lt;p&gt;The intention is to provide a platform which can be used to build &lt;em&gt;any&lt;&#x2F;em&gt; kind of interactive realtime spatial multiparty app in an open standardised, decentralised, end-to-end encrypted way - whether that’s for gaming, social, or professional activity such as building “digital twins” for manufacturing, agriculture, smart cities, search &amp;amp; rescue, etc.  You can read more about the vision at &lt;a href=&quot;https:&#x2F;&#x2F;thirdroom.io&#x2F;preview&quot;&gt;thirdroom.io&#x2F;preview&lt;&#x2F;a&gt;, or via press coverage at &lt;a href=&quot;https:&#x2F;&#x2F;thenewstack.io&#x2F;third-room-teases-user-generated-content-for-the-metaverse&#x2F;&quot;&gt;TheNewStack&lt;&#x2F;a&gt; or &lt;a href=&quot;https:&#x2F;&#x2F;www.golem.de&#x2F;news&#x2F;third-room-das-open-source-metaverse-von-matrix-2212-170638.html&quot;&gt;Golem&lt;&#x2F;a&gt;.  We were also incredibly flattered to be invited to present Third Room at &lt;a href=&quot;https:&#x2F;&#x2F;sa2022.siggraph.org&#x2F;en&#x2F;presentation&#x2F;?id=realcur_102&amp;amp;sess=sess143&quot;&gt;SIGGRAPH Asia&lt;&#x2F;a&gt; a few weeks ago.  The official recording has yet to emerge, but you can find a &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;o_ob&#x2F;status&#x2F;1601442998696677376&quot;&gt;cheeky bootleg here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;We launched &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2022&#x2F;09&#x2F;27&#x2F;announcing-third-room-tech-preview-1&quot;&gt;Tech Preview 1 of Third Room&lt;&#x2F;a&gt; at the end of September, and since then all of the work has been around building out WebSceneGraph and the WASM scripting environment - letting users build their own functionality in JS via QuickJS or C (and in future Rust or Zig too).  We’ve also been working on making the networking (via Matrix WebRTC-negotiated data channels) more robust, switching to an ‘authoritative’ simulation model rather than having each client run its own physics simulation, in order to kick the hard problem of decentralised physics simulations down the road a bit further. We’re also adding in a much-needed ‘discover’ page to help users find new rooms and explore everything that’s possible in the platform.  And finally, we’re adding WebXR support so that folks can use ThirdRoom with VR and AR hardware if they so desire. All this should culminate in Tech Preview 2, due in the coming weeks.&lt;&#x2F;p&gt;
&lt;p&gt;If you want a quick sneak preview of the scripting capabilities on the horizon with a &lt;a href=&quot;https:&#x2F;&#x2F;matrix.thirdroom.io&#x2F;_matrix&#x2F;media&#x2F;r0&#x2F;download&#x2F;thirdroom.io&#x2F;qFfvHcXNQkjeDjTpdMfPCniY&quot;&gt;very basic script&lt;&#x2F;a&gt; stored in the media repository, head over to &lt;a href=&quot;https:&#x2F;&#x2F;thirdroom.io&#x2F;world&#x2F;#surprise:thirdroom.dev&quot;&gt;https:&#x2F;&#x2F;thirdroom.io&#x2F;world&#x2F;#surprise:thirdroom.dev&lt;&#x2F;a&gt; and click on the television ;)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;conclusion&quot;&gt;Conclusion&lt;&#x2F;h3&gt;
&lt;p&gt;So there you have it: it’s been a mixed year for Matrix, but at least the project itself is moving forwards faster than ever, for now. If you look back at the predictions from &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2021&#x2F;12&#x2F;22&#x2F;the-mega-matrix-holiday-special-2021#2022&quot;&gt;last year’s holiday blog post&lt;&#x2F;a&gt; you’ll see that most of them even came true. This year, we’ll keep the predictions simple: our plans for 2023 are to ensure that the Foundation is well funded, ship all of the step-change improvements in performance and usability which are currently in beta as rapidly as possible - and demonstrate for once and for all that Matrix can indeed punch its weight against the proprietary centralised alternatives.&lt;&#x2F;p&gt;
&lt;p&gt;If you can afford it, please consider donating to the Matrix.org Foundation to support our work. The most efficient way to support us is to &lt;a href=&quot;https:&#x2F;&#x2F;donorbox.org&#x2F;keep-matrix-exciting&quot;&gt;donate via donorbox&lt;&#x2F;a&gt;. Our Patreon is not going anywhere, so if you wish to keep supporting it there we&#x27;re happy to count you in our supporters.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;donorbox.org&#x2F;keep-matrix-exciting&quot;&gt;&lt;img src=&quot;&#x2F;images&#x2F;donorbox.png&quot; alt=&quot;&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Thanks for flying Matrix;&lt;&#x2F;p&gt;
&lt;p&gt;Matthew, Amandine &amp;amp; the whole core team.&lt;&#x2F;p&gt;
</content>
</entry>

    
<entry xml:lang="en">
    <title>The Matrix Summer Special 2022</title>
    <published>2022-08-15T00:00:00+00:00</published>
    <updated>2022-08-15T00:00:00+00:00</updated>
    <author>
      <name>Matthew Hodgson</name>
    </author>
    <link rel="alternate" href="https://c956b204.matrix-website.pages.dev/blog/2022/08/15/the-matrix-summer-special-2022/" type="text/html"/>
    <id>https://c956b204.matrix-website.pages.dev/blog/2022/08/15/the-matrix-summer-special-2022/</id>
    <content type="html">&lt;p&gt;Hi all,&lt;&#x2F;p&gt;
&lt;p&gt;At the end of each year it’s been traditional to do a big review of everything that the Matrix core team got up to that year, and announcing our predictions for the next.  You can see the last edition in &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2021&#x2F;12&#x2F;22&#x2F;the-mega-matrix-holiday-special-2021&quot;&gt;2021 here&lt;&#x2F;a&gt; - and if you’re feeling nostalgic you can head down memory lane with the &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2020&#x2F;12&#x2F;25&#x2F;the-matrix-holiday-special-2020&quot;&gt;2020&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2019&#x2F;12&#x2F;24&#x2F;the-2019-matrix-holiday-update&quot;&gt;2019&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2018&#x2F;12&#x2F;25&#x2F;the-2018-matrix-holiday-special&quot;&gt;2018&lt;&#x2F;a&gt; ones etc too.&lt;&#x2F;p&gt;
&lt;p&gt;This year is turning out to be slightly different, however.  Our plans for 2022 are particularly ambitious: to force a step change in improving Matrix’s performance and usability so that we firmly transition from our historical “make it work” and “make it work right” phases into “&lt;strong&gt;making it fast&lt;&#x2F;strong&gt;”.  Specifically: to succeed, Matrix &lt;strong&gt;has&lt;&#x2F;strong&gt; to succeed in powering apps which punch their weight in terms of performance and usability against the proprietary centralised alternatives of WhatsApp, Discord, Slack and friends.&lt;&#x2F;p&gt;
&lt;p&gt;We’ve seen an absolute tonne of work happening on this so far this year… and somehow the end results all seem to be taking concrete shape at roughly the same time, despite summer traditionally being the quietest point of the year.  The progress is super exciting and we don’t want to wait until things are ready to enthuse about them, and so we thought it’d be fun to do a spontaneous Summer Special gala blog post so that everyone can follow along and see how things are going!&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;making-it-fast&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#making-it-fast&quot; aria-label=&quot;Anchor link for: making-it-fast&quot;&gt;🔗&lt;&#x2F;a&gt;Making it fast&lt;&#x2F;h2&gt;
&lt;p&gt;We have always focused on first making Matrix “work right” before we make it “work fast” - sometimes to a fault.  After all: the longer you build on a given architecture the harder it becomes to swap it out down the line, and the core architecture of Matrix has remained essentially the same since we began in 2014 - frankly it’s amazing that the initial design has lasted for as long as it has.&lt;&#x2F;p&gt;
&lt;p&gt;Over the years we’ve done a lot of optimisation work on the core team implementations of that original architecture - whether that’s Synapse or matrix-{js,react,ios,android}-sdk and friends: for instance Synapse uses 5-10x less RAM than it used to (my personal federated server is only using 145MB of RAM atm! 🤯) and it continues to speed up in pretty much every new release (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;13522&quot;&gt;this PR&lt;&#x2F;a&gt; looks to give a 1000x speedup on calculating push notification actions, for instance!).  However, there are some places where Matrix’s architecture itself ends up being an embarrassingly slow bottleneck: most notably when rapidly syncing data to clients, and when joining rooms for the first time over federation.  We’re addressing these as follows…&lt;&#x2F;p&gt;
&lt;h3 id=&quot;sliding-sync-aka-sync-v3&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#sliding-sync-aka-sync-v3&quot; aria-label=&quot;Anchor link for: sliding-sync-aka-sync-v3&quot;&gt;🔗&lt;&#x2F;a&gt;Sliding Sync (aka Sync v3)&lt;&#x2F;h3&gt;
&lt;p&gt;Historically, &#x2F;sync always assumed that the client would typically want to know about all the conversations its user is in - much as an IRC client or XMPP client is aware of all your current conversations.  This provided some nice properties - such as automatically enabling perfect offline support, simplifying client and server development, and making features like “jump to room” and “tab complete” work instantly given the data is all client-side.  In the early days of Matrix, when nobody was yet a power user, this wasn’t really a problem - but as users join more conversations and join bigger rooms, it’s become one of Matrix’s biggest performance bottlenecks.  In practice, logging into a large account (~4000 rooms) can take ~10 minutes and hundreds of megabytes of network traffic, which is clearly ridiculous. Worse: if you go offline for a day or so, the incremental sync to catch back up can take minutes to calculate (and can even end up being worse than an initial sync).&lt;&#x2F;p&gt;
&lt;p&gt;To fix this, we started work on Sliding Sync (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;blob&#x2F;kegan&#x2F;sync-v3&#x2F;proposals&#x2F;3575-sync.md&quot;&gt;MSC3575&lt;&#x2F;a&gt;) in 2021: a complete reimagining of the &#x2F;sync API used by Matrix clients to receive data from their homeserver.  In Sliding Sync, we only send the client the data it needs to render its UI.  Most importantly, we only tell it about the subset of rooms which it is visible in the scroll window of its room list (or that it needs to display notifications about).  As the user scrolls around the room list, they slide the window up and down - hence the name “sliding sync”.  Sliding Sync was originally called Sync v3, given it’s our 3rd iteration of the sync API - it got renamed Sliding Sync given the current sync API confusingly ended up with a prefix of &#x2F;v3.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2021&#x2F;12&#x2F;22&#x2F;the-mega-matrix-holiday-special-2021#sync-v3&quot;&gt;Back in December&lt;&#x2F;a&gt; our work on Sliding Sync was still pretty early: we had the initial MSC, an experimental proxy that converted the existing sync v2 API into Sliding Sync, and a simple proof-of-concept web client to exercise it.  Since then, however, there has been spectacular progress:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;MSC3575 has undergone some &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;3575&#x2F;commits&#x2F;bea7323c0b03dbd46600ce8fe01218d55f0de083&quot;&gt;big&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;3575&#x2F;commits&#x2F;a0bf4027bcef278e43a570c6fa94f2b1bef3488b&quot;&gt;iterations&lt;&#x2F;a&gt; as we converge on the optimal API shape.&lt;&#x2F;li&gt;
&lt;li&gt;The &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;sliding-sync&quot;&gt;sliding-sync&lt;&#x2F;a&gt; proxy has matured to be something which we’re now running in stealth against matrix.org for those dogfooding the API&lt;&#x2F;li&gt;
&lt;li&gt;We added the concept of extensions to split out how to sync particular classes of data (to avoid the API becoming a monolithic monster) - specifically:
&lt;ul&gt;
&lt;li&gt;Account Data&lt;&#x2F;li&gt;
&lt;li&gt;End-to-end Encryption&lt;&#x2F;li&gt;
&lt;li&gt;To-device messages&lt;&#x2F;li&gt;
&lt;li&gt;Ephemeral events (to be done)&lt;&#x2F;li&gt;
&lt;li&gt;Presence (to be done)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;We added support for spaces!&lt;&#x2F;li&gt;
&lt;li&gt;We implemented it in &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-js-sdk&#x2F;pull&#x2F;2242&quot;&gt;matrix-js-sdk&lt;&#x2F;a&gt; (which merged a few weeks ago!)&lt;&#x2F;li&gt;
&lt;li&gt;…and have a WIP implementation in &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-rust-sdk&#x2F;pull&#x2F;728&quot;&gt;matrix-rust-sdk&lt;&#x2F;a&gt; too.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;But most importantly, we’ve also been busy implementing Sliding Sync in Element Web itself so we can start using it for real.  Now, this is still a work in progress, but as of today it’s &lt;em&gt;just&lt;&#x2F;em&gt; getting to the point where one can experiment with it as a daily driver (although it’s definitely alpha and we’re still squishing bugs like crazy!) - and we can see just how well it really performs in real life.&lt;&#x2F;p&gt;
&lt;p&gt;For instance, here’s a video of my account (4055 rooms, redacted for privacy) logging in on an entirely fresh browser via Sliding Sync - the actual sync takes roughly 1 second (at 00:18 in the video).  And if we’d started the sync operation while the user is setting up E2E encryption, it would have completed in the background before they even got to the main screen, giving instant login(!).  Given my account typically takes ~10 minutes to initial sync (plus even more time for encryption to sync up), this is at least a real-life &lt;strong&gt;600x improvement&lt;&#x2F;strong&gt;.  Moreover, the sync response is only 20KB (a ~5000x improvement) - a huge win for low-bandwidth Matrix situations.&lt;&#x2F;p&gt;
&lt;noscript&gt;
  Today&#x27;s Matrix Live:
  &lt;a href=&quot;https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=9dbM66tGK5s&quot;&gt;
    https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=9dbM66tGK5s
  &lt;&#x2F;a&gt;
&lt;&#x2F;noscript&gt;
&lt;youtube-player video-id=&quot;9dbM66tGK5s&quot;&gt;&lt;&#x2F;youtube-player&gt;
&lt;p&gt;Then, having logged in, the client subsequently launches pretty much instantly, &lt;em&gt;no matter how long you’ve been offline&lt;&#x2F;em&gt;. Total launch time is roughly 4 seconds, most of which is loading the app’s assets - which in turn could well be improved by progressively loading the app.  It could also be sped up even more if we cached state locally - currently the implementation simply reloads from the server every time the app launches rather than maintaining a local cache.&lt;&#x2F;p&gt;
&lt;p&gt;As you can see, this is palpably coming together, but there’s still a bunch of work to be done before we can encourage folks to try it, including:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Switching the RoomList to be fully backed by sliding sync (currently the v2 roomlist is jury-rigged up to the sliding sync API, causing some flakey bugs such as duplicate rooms)&lt;&#x2F;li&gt;
&lt;li&gt;Spec and hook up typing &#x2F; receipts &#x2F; presence extensions&lt;&#x2F;li&gt;
&lt;li&gt;Hook up favourites, low_priority, knocked and historical rooms&lt;&#x2F;li&gt;
&lt;li&gt;Adding back in loading room members&lt;&#x2F;li&gt;
&lt;li&gt;Apply quality-of-service to to-device messages so we prioritise ones relevant to the current sliding window&lt;&#x2F;li&gt;
&lt;li&gt;Sync encrypted rooms in the background to search for notifications (and for indexing).&lt;&#x2F;li&gt;
&lt;li&gt;More local caching to speed up operations which now require checking the server (e.g. Ctrl&#x2F;Cmd-K room switching)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;We also need to determine whether it’s viable to run the sliding-sync proxy against matrix.org for general production use, or whether we’ll need native support in Synapse before we can turn it on by default for everyone.  But these are good problems to have!!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;matrix-rust-sdk-and-element-x&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#matrix-rust-sdk-and-element-x&quot; aria-label=&quot;Anchor link for: matrix-rust-sdk-and-element-x&quot;&gt;🔗&lt;&#x2F;a&gt;matrix-rust-sdk and Element X&lt;&#x2F;h3&gt;
&lt;p&gt;Meanwhile, over in the land of Rust, we’ve been making huge progress in maturing and stabilising matrix-rust-sdk and exercising it in Element X: the codename for the next generation of native Element mobile apps.  Most excitingly, we literally just got the first (very alpha) cut of Sliding Sync working in matrix-rust-sdk and hooked up to Element X on iOS - you can see Ștefan’s demo from last week here:&lt;&#x2F;p&gt;
&lt;noscript&gt;
  Today&#x27;s Matrix Live:
  &lt;a href=&quot;https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=6KHQSeJTXm0?start=459&quot;&gt;
    https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=6KHQSeJTXm0?start=459
  &lt;&#x2F;a&gt;
&lt;&#x2F;noscript&gt;
&lt;youtube-player video-id=&quot;6KHQSeJTXm0?start=459&quot;&gt;&lt;&#x2F;youtube-player&gt;
&lt;p&gt;matrix-rust-sdk itself is now getting a &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-rust-sdk&#x2F;releases&quot;&gt;steady stream of releases&lt;&#x2F;a&gt; - including long-awaited official node bindings, providing excellent and performant encryption support via the &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2022&#x2F;05&#x2F;16&#x2F;independent-public-audit-of-vodozemac-a-native-rust-reference-implementation-of-matrix-end-to-end-encryption&#x2F;&quot;&gt;newly audited&lt;&#x2F;a&gt; vodozemac Rust implementation of Olm. It’s also great to see loads of major contributions to matrix-rust-sdk from across the wider Matrix community - particularly from Ruma, Fractal, Famedly and others - thank you!! As a result the SDK is shaping up to be much more healthy and heterogeneous than the original matrix-{js,ios,android}-sdk projects.&lt;&#x2F;p&gt;
&lt;p&gt;On Element X itself: matrix-rust-sdk is being used first on iOS in &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vector-im&#x2F;element-x-ios&quot;&gt;Element X iOS&lt;&#x2F;a&gt; - aiming first for launching a stable “barbecue” feature set (i.e. personal messaging) asap, followed by adding on “banquet” features (i.e. team collaboration) such as spaces and threads afterwards. We’ve shamelessly misappropriated the barbecue &amp;amp; banquet terminology from Tobias Bernard’s excellent blog post “&lt;a href=&quot;https:&#x2F;&#x2F;blogs.gnome.org&#x2F;tbernard&#x2F;2018&#x2F;05&#x2F;16&#x2F;banquets-and-barbecues&#x2F;&quot;&gt;Banquets and Barbecues&lt;&#x2F;a&gt;” - although, ironically, unlike the post, our plan is still to have a single app which incrementally discloses the banquet functionality as the user’s barbecue starts to sprawl.  We’ve just published the brand new &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-rust-sdk&#x2F;projects&#x2F;1&quot;&gt;development roadmap&lt;&#x2F;a&gt; for Element X from the rust-sdk perspective on GitHub.  Above all else, the goal of Element X is to be the fastest mobile messenger out there in terms of launch and sync time, thanks to Sliding Sync.  Not just for Matrix - but the fastest messenger, full stop :D  Watch this space to see how we do!&lt;&#x2F;p&gt;
&lt;p&gt;Finally: Element is getting a major redesign of the core UI on both iOS and Android - both for today’s Element and Element X.  I’m not going to spoil the final result (which is looking &lt;em&gt;amazing&lt;&#x2F;em&gt;) given it’ll have a proper glossy launch in a few weeks, but you can get a rough idea based on the earlier design previewed by Amsha back in June:&lt;&#x2F;p&gt;
&lt;noscript&gt;
  Today&#x27;s Matrix Live:
  &lt;a href=&quot;https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=oxfqQ0TrTXU?start=34&quot;&gt;
    https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=oxfqQ0TrTXU?start=34
  &lt;&#x2F;a&gt;
&lt;&#x2F;noscript&gt;
&lt;youtube-player video-id=&quot;oxfqQ0TrTXU?start=34&quot;&gt;&lt;&#x2F;youtube-player&gt;
&lt;p&gt;In addition to the upcoming overall redesign, Element also landed a complete rework of the login and registration flows last week on iOS and Android - you can see all about it over on the &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;all-aboard-better-ftue-for-less-wtf&#x2F;&quot;&gt;Element blog&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;fast-remote-joins&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#fast-remote-joins&quot; aria-label=&quot;Anchor link for: fast-remote-joins&quot;&gt;🔗&lt;&#x2F;a&gt;Fast Remote Joins&lt;&#x2F;h3&gt;
&lt;p&gt;In terms of performance, the other area that we’re reworking at the protocol level is room joins.&lt;&#x2F;p&gt;
&lt;p&gt;One of the most glaring shortcomings of Matrix happens when a new server admin excitedly decides to join the network, installs a homeserver, tries to join a large room like #matrix:matrix.org, and then looks on in horror as it takes 10+ minutes to join the room, promptly despairs of Matrix being slow and complains bitterly about it all over HN and Reddit :)&lt;&#x2F;p&gt;
&lt;p&gt;The reason for the current behaviour is that the Matrix rooms are replicated between the servers who participate in them - and in the initial design of the protocol we made that replication atomic. In other words, a new server joining a room picks a server from which to acquire the room (typically the one in the room’s alias), and gets sent a copy of all the state events (i.e. structural data) about the room, as well as the last 20 or so messages.  For a big room like Matrix HQ, this can be massive - right now, there are 79,969 state events in the room - and 126,510 auth_chain events (i.e. the events used to justify the existence of the state events).  The reason there are so many is typically that the act of a user joining or parting the room is described by a state event - and in the naive implementation, the server needs to know all current state events in the room (e.g. including parted users), in order to keep in sync with the other servers in the room and faithfully authorise each new event which they receive for that room.&lt;&#x2F;p&gt;
&lt;p&gt;However, each event is typically around 500 bytes in size, and so the act of joining a big room could require generating, transmitting, receiving, authenticating and storing up to 100MB of JSON 😱. This is why joining big rooms for the first time is so painfully slow.&lt;&#x2F;p&gt;
&lt;p&gt;Happily, there is an answer: much as Sliding Sync lets clients synchronise with the bare minimum of data required to render their UI, we’ve created &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;blob&#x2F;rav&#x2F;proposal&#x2F;partial_state_on_join&#x2F;proposals&#x2F;3706-partial-state-in-send-join.md&quot;&gt;MSC3706&lt;&#x2F;a&gt; (and its precursor &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;blob&#x2F;matthew&#x2F;msc2775&#x2F;proposals&#x2F;2775-lazy-loading-over-federation.md&quot;&gt;MSC2775&lt;&#x2F;a&gt;) in order to rework the protocol to let servers receive the bare minimum of state needed to join a room in order to participate.  Practically speaking, we only really care about events relevant to the users who are currently participating in the room; the 40,000 other lurkers can be incrementally synced in the background so that our membership list is accurate - but it shouldn’t block us from being able to join or read (or peek) the room.  We already have membership lazyloading in the client-server API to support incrementally loaded membership data, after all.&lt;&#x2F;p&gt;
&lt;p&gt;The problem with this change is that Synapse was written from the outset to assume that each room’s state should be atomically complete: in other words, room state shouldn’t  incrementally load in the background.  So the work for Faster Joins has been an exercise in auditing the entirety of Synapse for this assumption, and generally reviewing and hardening the whole state management system.  This has been &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pulls?q=is%3Apr+%22faster+joins%22+is%3Aclosed+&quot;&gt;loads of work&lt;&#x2F;a&gt; that has been going on since the end of last year - but the end is in sight: you can see the remaining issues &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;milestone&#x2F;8&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;As of right now, faster joins work (although aren’t enabled by default) - with the main proviso that you can’t speak in the room yet until the background sync has completed, and the new implementation has not yet been optimised.  However, thanks to all the preparation work, this should be relatively straightforward, so the end is in sight on this one too.&lt;&#x2F;p&gt;
&lt;p&gt;In terms of performance: right now, joining Matrix HQ via the unoptimised implementation of faster joins completes on a fresh server in roughly 30 seconds - so a &lt;strong&gt;~25x improvement&lt;&#x2F;strong&gt; over the ~12 minutes we’ve seen previously.  However, the really exciting news is that this only requires synchronising 45 state events and 107 auth_chain events to the new server - a &lt;strong&gt;~1400x improvement&lt;&#x2F;strong&gt;!  So there should be significant scope for further optimising the calculation of these 152 events, given 30 seconds to come up with 152 events is definitely on the high side.  In our ideal world, we’d be getting joins down to sub-second performance, no matter how big the room is - once again, watch this space to see how we do.&lt;&#x2F;p&gt;
&lt;p&gt;Finally, alongside faster remote joins, we’re also working on faster local joins.  This work overlaps a bit with the optimisation needed to speed up the faster remote join logic - given we are seeing relatively simple operations unexpectedly taking tens of seconds in both instances. Some of this is needing to batch database activity more intelligently, but we also have some unknown pauses which we’re currently tracking down.  Profiling is afoot, as well as copious Jaeger and OpenTracing instrumentation - the hunt is on!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ratcheting-up-testing&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ratcheting-up-testing&quot; aria-label=&quot;Anchor link for: ratcheting-up-testing&quot;&gt;🔗&lt;&#x2F;a&gt;Ratcheting up testing&lt;&#x2F;h3&gt;
&lt;p&gt;All the work above describes some pretty bold changes to speed up Matrix and improve usability - but in order to land these changes with confidence, avoiding regressions both now and in future, we have really levelled up our testing this year.&lt;&#x2F;p&gt;
&lt;p&gt;Looking at matrix-react-sdk as used by Element Web&#x2F;Desktop: all PRs made to matrix-js-sdk must now pass 80% unit test coverage for new code (measured using &lt;a href=&quot;https:&#x2F;&#x2F;sonarcloud.io&#x2F;project&#x2F;overview?id=matrix-js-sdk&quot;&gt;Sonarqube&lt;&#x2F;a&gt;, enforced as a GitHub PR check). All matrix-react-sdk PRs must be accompanied by a mix of unit tests, end-to-end tests (via &lt;a href=&quot;https:&#x2F;&#x2F;www.cypress.io&#x2F;&quot;&gt;Cypress&lt;&#x2F;a&gt;) and screenshot tests (via &lt;a href=&quot;https:&#x2F;&#x2F;percy.io&#x2F;&quot;&gt;percy.io&lt;&#x2F;a&gt;). All regressions (in both nightly and stable) are retro’d to ensure fixed things stay fixed (usually via writing new tests), and we have converted &lt;a href=&quot;https:&#x2F;&#x2F;arewetsyet.bit.ovh&#x2F;&quot;&gt;fully to typescript&lt;&#x2F;a&gt; for full type safety.&lt;&#x2F;p&gt;
&lt;p&gt;Concretely, since May, we’ve increased js-sdk unit test coverage by ~10% globally, increased react-sdk coverage by ~17%, and added ever more Cypress integration tests to cover the broad strokes.  Cypress now &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-react-sdk&#x2F;pull&#x2F;9104&quot;&gt;completely replaces&lt;&#x2F;a&gt; our old Puppeteer-based end-to-end tests, and Sliding Sync work in matrix-react-sdk is being extensively tested by Cypress from the outset (the Sliding Sync PR literally comes with a Cypress test suite).&lt;&#x2F;p&gt;
&lt;p&gt;In mobile land, the situation is more complex given our long-term strategy is to deprecate matrix-ios-sdk and matrix-android-sdk2 in favour of matrix-rust-sdk. matrix-rust-sdk has always had &lt;a href=&quot;https:&#x2F;&#x2F;app.codecov.io&#x2F;gh&#x2F;matrix-org&#x2F;matrix-rust-sdk&quot;&gt;excellent coverage&lt;&#x2F;a&gt;, and in particular, adopting the crypto module in the current matrix-{js,ios,android}-sdk will represent a night and day improvement for quality (not to mention perf!). We’ll also be adopting &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vector-im&#x2F;element-x-ios&#x2F;pull&#x2F;50&quot;&gt;PR checks&lt;&#x2F;a&gt;, and screenshot testing for the mobile SDKs.&lt;&#x2F;p&gt;
&lt;p&gt;On the backend, we continue to build out test cases for our new integration tester &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;complement&quot;&gt;Complement&lt;&#x2F;a&gt; (in Golang), alongside the original &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;sytest&quot;&gt;sytest&lt;&#x2F;a&gt; integration test suite (in Perl). In particular, we can now test Synapse in worker mode. The intention with Complement is that it should be homeserver agnostic so that &lt;em&gt;any&lt;&#x2F;em&gt; homeserver implementation can benefit. Indeed the project was initiated by Kegan wearing his Dendrite hat.&lt;&#x2F;p&gt;
&lt;p&gt;Finally, we’ve had a huge breakthrough with true multi-client end-to-end testing in the form of Michael Kaye’s brand new &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;trafficlight&quot;&gt;Traffic Light&lt;&#x2F;a&gt; project. For the first time, we can fully test things like cross signing and verification and VoIP calls end-to-end across completely different platforms and different clients. It’s early days yet, but this really will be a game changer, especially for crypto and VoIP.&lt;&#x2F;p&gt;
&lt;p&gt;Next up, we will turn our attention to a performance testing framework so that we can reliably track performance improvements and regressions in an automated fashion - heavily inspired by Safari’s &lt;a href=&quot;https:&#x2F;&#x2F;www.goodreads.com&#x2F;quotes&#x2F;9844796-don-was-the-one-who-figured-out-how-we-would&quot;&gt;Page Load Test&lt;&#x2F;a&gt; approach. This will be essential as we build out new clients like Element X.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;a-whole-new-world&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#a-whole-new-world&quot; aria-label=&quot;Anchor link for: a-whole-new-world&quot;&gt;🔗&lt;&#x2F;a&gt;A whole new world&lt;&#x2F;h2&gt;
&lt;p&gt;All the stuff above is focused on improving the core performance and usability of Matrix - but in parallel we have also been making enormous progress on entirely new features and capabilities. The following isn’t a comprehensive list, but we wanted to highlight a few of the areas where new development is progressing at a terrifying rate…&lt;&#x2F;p&gt;
&lt;h3 id=&quot;native-voip-conferencing&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#native-voip-conferencing&quot; aria-label=&quot;Anchor link for: native-voip-conferencing&quot;&gt;🔗&lt;&#x2F;a&gt;Native VoIP Conferencing&lt;&#x2F;h3&gt;
&lt;p&gt;2022 is turning out to be the year that Matrix finally gets fully native voice&#x2F;video conferencing. After speccing &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;blob&#x2F;matthew&#x2F;group-voip&#x2F;proposals&#x2F;3401-group-voip.md&quot;&gt;MSC3401&lt;&#x2F;a&gt; at the end of last year, &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;introducing-native-matrix-voip-with-element-call&#x2F;&quot;&gt;Element Call Beta 1&lt;&#x2F;a&gt; launched as a reference implementation back in March, followed by enabling E2EE, spatial audio and walkie-talkie mode in &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;element-call-beta-2-encryption-spatial-audio-walkie-talkie-mode-and-more&#x2F;&quot;&gt;Element Call Beta 2&lt;&#x2F;a&gt; in June.&lt;&#x2F;p&gt;
&lt;p&gt;However, the catch was that Element Call beta 1 and 2 only ever implemented “full mesh” conferencing - where every participant calls every other participant simultaneously, limiting the size of the conference to ~7 participants on typical hardware, and wasting lots of bandwidth (given you end up sending the same upstream multiple times over for all the other participants).  Element Call has been working surprisingly well in spite of this, but the design of MSC3401 was always to have “foci” (the plural of ‘focus’ - i.e. conference servers) to optionally sit alongside homeservers in order to aggregate the participating calls, a bit like this:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;blog&#x2F;img&#x2F;2022-08-15-msc3401.jpg&quot; alt=&quot;MSC3401 Architecture&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;With foci, clients only need to send their upstream to their local focus, rather than replicating it across all the other participants - and the focus can then fan it out to other foci or clients as required.  In fact, if no other clients are even watching your upstream, then your client can skip sending an upstream to its focus entirely!&lt;&#x2F;p&gt;
&lt;p&gt;Most importantly, foci are decentralised, just like Matrix: there is no single conference server as a single point of control or failure responsible for powering the group call - users connect to whichever focus is closest to them, and so you automatically get a standards-based heterogeneous network-split-resilient geographically distributed cascading conferencing system with end-to-end-encryption, powered by a potentially infinite number of different implementations.  To the best of our knowledge, this is the first time someone’s proposed an approach like this for decentralised group calling (watch out, Zoom, we’re coming for you!)&lt;&#x2F;p&gt;
&lt;p&gt;Now, the VoIP team have been busy polishing Element Call (e.g. chasing down end-to-end encryption edge cases and reliability), and also figuring out how to embed it into Element and other Matrix clients as a quick way to get excellent group VoIP (more on that later).  As a result, work on building out foci for scalable conferencing had to be pushed down the line.&lt;&#x2F;p&gt;
&lt;p&gt;But in the last few months this completely changed, thanks to an &lt;strong&gt;amazing&lt;&#x2F;strong&gt; open source contribution from Sean DuBois, project lead over at &lt;a href=&quot;https:&#x2F;&#x2F;pion.ly&#x2F;&quot;&gt;Pion&lt;&#x2F;a&gt; - the excellent Golang WebRTC implementation.  Inspired by our &lt;a href=&quot;https:&#x2F;&#x2F;2021.commcon.xyz&#x2F;talks&#x2F;extending-matrix-s-e2ee-calls-to-multiparty&quot;&gt;initial talk&lt;&#x2F;a&gt; about MSC3401 at CommCon, Sean independently decided to see how hard it’d be to build a Selective Forwarding Unit (SFU) focus that implemented MSC3401 semantics using Pion - and published it at &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;sean-der&#x2F;sfu-to-sfu&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;sean-der&#x2F;sfu-to-sfu&lt;&#x2F;a&gt; (subsequently donated to github.com&#x2F;matrix-org).  In many ways this was a flag day for Matrix: it’s the first time that a core MSC from the core team has been first implemented from outside the core team (let alone outside the Matrix community!).  It’s the VoIP equivalent of Synapse starting off life as a community contribution rather than being written by the core team.&lt;&#x2F;p&gt;
&lt;p&gt;Either way: Sean’s SFU work has opened the floodgates to making native Matrix conferencing actually scale, with Šimon Brandner and I jumping in to &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-js-sdk&#x2F;pull&#x2F;2423&quot;&gt;implement SFU support&lt;&#x2F;a&gt; in matrix-js-sdk… and as of a few weeks ago we did the first ever SFU-powered Matrix call - which worked impressively well for 12 participants!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;blog&#x2F;img&#x2F;2022-08-15-sfu.jpg&quot; alt=&quot;12 person Element Call&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Now, this isn’t released yet, and there is still work to be done, including:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;We actually need to select the subset of streams we care about from the focus&lt;&#x2F;li&gt;
&lt;li&gt;We need to support thumbnail streams as well as high-res streams&lt;&#x2F;li&gt;
&lt;li&gt;We need rate control to ensure clients on bad connections don’t get swamped&lt;&#x2F;li&gt;
&lt;li&gt;We need to hook up cascading between foci (although the SFU already supports it!)&lt;&#x2F;li&gt;
&lt;li&gt;We need E2EE via insertable streams&lt;&#x2F;li&gt;
&lt;li&gt;Faster signalling for switching between streams&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;You can see the full todo list for basic and future features over on GitHub.  However, we’re making good progress thanks to Šimon’s work and Sean’s help - but with any luck beta 3 of Element Call might showcase SFU support!&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile it’s worth noting that Element Call is not the only MSC3401 implementation out there - the Hydrogen team has added native support to Hydrogen SDK too (skipping over the old 1:1 calling), so expect to see Element &amp;lt;-&amp;gt; Hydrogen calling in the near future. The Hydrogen implementation is also what powers Third Room (see below…)&lt;&#x2F;p&gt;
&lt;h3 id=&quot;matryoshka-voip-embedding&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#matryoshka-voip-embedding&quot; aria-label=&quot;Anchor link for: matryoshka-voip-embedding&quot;&gt;🔗&lt;&#x2F;a&gt;Matryoshka VoIP Embedding&lt;&#x2F;h3&gt;
&lt;p&gt;Elsewhere on VoIP, we’ve also been hard at work figuring out how to embed Element Call into Matrix clients in general, starting with Element Web, iOS &amp;amp; Android.  Given MSC3401 is effectively a superset of native 1:1 Matrix VoIP calling, we’d ideally like to replace the current 1:1-only VoIP implementation in Element with an embedded instance of Element Call (not least so we don’t have to maintain it in triplicate over Web&#x2F;iOS&#x2F;Android, and because WebRTC-in-a-webview really isn’t very different to native WebRTC).  To do this efficiently however, the embedded Element Call needs to share the same underlying Matrix client as the parent Element client (otherwise you end up wasting resources and devices and E2EE overhead between the two).  Effectively Element Call ends up needing to parasite off the parent’s client.  We call this approach “matryoshka embedding”, given it resembles nested Russian dolls. 🪆&lt;&#x2F;p&gt;
&lt;p&gt;In practice, we do this by extending the Widget API to let Matrix clients within the widget share the parent’s Matrix client for operations such as sending and receiving to-device messages and accessing TURN servers (c.f. &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;blob&#x2F;travis&#x2F;msc&#x2F;widgets-send-recv-toDevice&#x2F;proposals&#x2F;3819-to-device-messages-for-widgets.md&quot;&gt;MSC3819&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;robintown&#x2F;matrix-doc&#x2F;blob&#x2F;widget-turn-servers&#x2F;proposals&#x2F;3846-widget-turn-servers.md&quot;&gt;MSC3846&lt;&#x2F;a&gt;).  This in turn has been &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-widget-api&#x2F;pull&#x2F;57&quot;&gt;implemented&lt;&#x2F;a&gt; in the matrix-widget-api helper library for widget implementers - and then a few days ago Robin demonstrated the world’s first ever matryoshka embedded Element Call call, looking like this:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;blog&#x2F;img&#x2F;2022-08-15-matryoshka.jpg&quot; alt=&quot;Matryoshka embedded Element Call&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Note that the MSC3401 events are happening in the actual room where the widget has been added, sent by the right users from Element Web rather than from Element Call, and so are subject to all the normal Matrix access control and encryption semantics.  This is a &lt;em&gt;huge&lt;&#x2F;em&gt; step forwards from embedding Jitsi widgets, where the subsequent call membership and signalling happens in an entirely separate system (XMPP via Prosody, ironically) - instead: this is proper native Matrix calling at last.&lt;&#x2F;p&gt;
&lt;p&gt;Moreover, the same trick could be used to efficiently embed other exotic Matrix clients such as Third Room or &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;toger5&#x2F;TheBoard&quot;&gt;TheBoard&lt;&#x2F;a&gt; - giving the user the choice either to use the app standalone or within the context of their existing Matrix client. Another approach could be to use OIDC scopes to transparently log the embedded client in using the parent’s identity; this has the advantage of no code changes being needed on the embedded client - but has the disadvantage that you needlessly end up running two Matrix clients for the same account side by side, and adding another device to your account, which isn’t ideal for a performance sensitive app like Element Call or Third Room.&lt;&#x2F;p&gt;
&lt;p&gt;Matryoshka embedding isn’t live yet, but between scalable calls via SFU and native Element Call in Element Web&#x2F;iOS&#x2F;Android, the future is looking incredibly exciting for native Matrix VoIP.  We hope to finish embedding Element Call in Element Web&#x2F;iOS&#x2F;Android in Sept&#x2F;Oct - and if we get lucky perhaps the SFU will be ready too and then Element Call can exit beta!&lt;&#x2F;p&gt;
&lt;p&gt;Finally, we also added Video Rooms to Element Web - adding the user interface for an “always on” video room that you can hop into whenever you want.  You can read about it over on the &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;drop-in-drop-out-chats-with-video-rooms-and-a-new-search-experience&#x2F;&quot;&gt;Element blog&lt;&#x2F;a&gt; - the initial implementation uses Jitsi, but once Element Call and Matryoshka embedding is ready, we’ll switch over to using Element Call instead (and add Voice Rooms too!)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;blog&#x2F;img&#x2F;2022-08-15-video-rooms.jpg&quot; alt=&quot;Video Rooms&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;third-room&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#third-room&quot; aria-label=&quot;Anchor link for: third-room&quot;&gt;🔗&lt;&#x2F;a&gt;Third Room&lt;&#x2F;h3&gt;
&lt;p&gt;Just as MSC3401 and Element Call natively adds decentralised voice&#x2F;video conferences to boring old textual Matrix chatrooms, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-spec-proposals&#x2F;pull&#x2F;3815&quot;&gt;MSC3815&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;thirdroom&#x2F;blob&#x2F;main&#x2F;README.md&quot;&gt;Third Room&lt;&#x2F;a&gt; go the whole enchilada and adds a full decentralised 3D spatial collaboration environment into your Matrix room - letting you turn your Matrix rooms into a full blown interconnected virtual world.&lt;&#x2F;p&gt;
&lt;p&gt;I can’t overstate how exciting this is: one of the key origins of Matrix was back in Oct 2013 when Amandine and myself found ourselves in Berlin after TechCrunch Disrupt, debating why Second Life hadn’t been more successful - and wondering what you’d have to do to build an immersive 3D social environment which would be as positive and successful as a wildly popular chat network.  Our conclusion was that the first key ingredient you’d need would be a kick-ass open decentralised communication protocol to build it on - providing truly open communication primitives that anyone could build on, much like the open web… and that was what got us thinking about how to build Matrix.&lt;&#x2F;p&gt;
&lt;p&gt;Fast forward 9 years, and Third Room is making &lt;em&gt;spectacular&lt;&#x2F;em&gt; progress in building out this dream, thanks to the incredibly hard work of Robert, Nate and Ajay. The goal of Third Room is to be an open platform layered directly on Matrix for spatial collaboration of any kind: effectively a blank canvas to let folks create freeform collaborative 3D (and in future 2D, VR or AR) experiences, either by using existing assets or building their own user-generated content and functionality. Just like the open web itself, this unlocks a literally infinite range of possibilities, but some of the obvious uses include: spatial telepresence, social VR, 3D visualisation of GIS or weather data, 3D simulated environments, search and rescue and disaster response operations (imagine streaming LIDAR from a drone surveying hurricane devastation into Third Room, where you can then overlay and collaborate on GIS data in realtime), and of course 3D gaming in all its various forms.&lt;&#x2F;p&gt;
&lt;p&gt;Now, we’re hoping to give Third Room a proper launch in a few weeks, so I’m not going to spoil too much right now - but the final pieces which are currently coming together include:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Finalising the initial version of &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;thirdroom&#x2F;tree&#x2F;main&#x2F;src&#x2F;engine&quot;&gt;Manifold&lt;&#x2F;a&gt;, the multi-threaded game engine which powers Third Room (built on &lt;a href=&quot;https:&#x2F;&#x2F;threejs.org&#x2F;&quot;&gt;Three.JS&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;NateTheGreatt&#x2F;bitECS&quot;&gt;bitECS&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;rapier.rs&#x2F;&quot;&gt;Rapier&lt;&#x2F;a&gt;), using SharedArrayBuffers as triple-buffers to synchronise between the various threads.  See &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;thirdroom&#x2F;discussions&#x2F;47#discussion-4033099&quot;&gt;this update&lt;&#x2F;a&gt; for a bit more detail on how the engine works.&lt;&#x2F;li&gt;
&lt;li&gt;Finalising the Matrix client interface itself, powered by &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vector-im&#x2F;hydrogen-web&#x2F;blob&#x2F;master&#x2F;doc&#x2F;SDK.md&quot;&gt;Hydrogen SDK&lt;&#x2F;a&gt; in order to be as lightweight as possible&lt;&#x2F;li&gt;
&lt;li&gt;Adding in full spatial audio and game networking via MSC3401 and Hydrogen SDK (currently full mesh, but will go SFU as soon as SFUs land!)&lt;&#x2F;li&gt;
&lt;li&gt;Adding in animated avatars (currently using &lt;a href=&quot;https:&#x2F;&#x2F;www.mixamo.com&#x2F;&quot;&gt;Mixamo&lt;&#x2F;a&gt; animations)&lt;&#x2F;li&gt;
&lt;li&gt;Adding in name tags and object labels&lt;&#x2F;li&gt;
&lt;li&gt;Adding in 3D Tile support in order to incrementally load 3D map tiles à la Google Earth&lt;&#x2F;li&gt;
&lt;li&gt;Building an asset pipeline from Unity and Blender through to the glTF assets which Third Room uses.&lt;&#x2F;li&gt;
&lt;li&gt;Initial framework for an in-world direct-manipulation &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;matrixdotorg&#x2F;status&#x2F;1550534909089189888&quot;&gt;editor&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;Lightmap support for beautiful high-performance static lighting and shadows&lt;&#x2F;li&gt;
&lt;li&gt;Full post-processing pipeline (bloom, depth-of-field, anti-aliasing etc)&lt;&#x2F;li&gt;
&lt;li&gt;Integrating with OIDC for login, registration, and account management (see OIDC below)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;As a quick teaser - here’s an example of a &lt;a href=&quot;https:&#x2F;&#x2F;assetstore.unity.com&#x2F;packages&#x2F;3d&#x2F;environments&#x2F;sci-fi&#x2F;3d-scifi-kit-vol-3-121447&quot;&gt;Unity asset&lt;&#x2F;a&gt; exported into Third Room, showing off lightmaps (check out the light and shadows cast by the strip lighting inside, or the shadow on the ground outside).  Ignore the blurry HDR environment map of Venice in the background, which is just there to give the metals something to reflect.  Check out the stats on the right-hand side: on Robert’s M1 Macbook Pro we’re getting a solid 60fps at 2000x1244px, with 13.12ms of unused gametime available for every 16.67ms frame, despite already showing a relatively complicated asset!&lt;&#x2F;p&gt;
&lt;noscript&gt;
  Today&#x27;s Matrix Live:
  &lt;a href=&quot;https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=xvjMyYxZbmM&quot;&gt;
    https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=xvjMyYxZbmM
  &lt;&#x2F;a&gt;
&lt;&#x2F;noscript&gt;
&lt;youtube-player video-id=&quot;xvjMyYxZbmM&quot;&gt;&lt;&#x2F;youtube-player&gt;
&lt;p&gt;Meanwhile, here are some shots of Robert and Nate chasing each other around the UK City demo environment (also exported from &lt;a href=&quot;https:&#x2F;&#x2F;assetstore.unity.com&#x2F;packages&#x2F;3d&#x2F;environments&#x2F;urban&#x2F;city-builder-london-214943&quot;&gt;Unity&lt;&#x2F;a&gt;), showing off blended Mixamo animations and throwing around crates thanks to the Rapier physics engine.&lt;&#x2F;p&gt;
&lt;noscript&gt;
  Today&#x27;s Matrix Live:
  &lt;a href=&quot;https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=y2mU19QwZPg&quot;&gt;
    https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=y2mU19QwZPg
  &lt;&#x2F;a&gt;
&lt;&#x2F;noscript&gt;
&lt;youtube-player video-id=&quot;y2mU19QwZPg&quot;&gt;&lt;&#x2F;youtube-player&gt;
&lt;noscript&gt;
  Today&#x27;s Matrix Live:
  &lt;a href=&quot;https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=QEt80wvO4yY&quot;&gt;
    https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=QEt80wvO4yY
  &lt;&#x2F;a&gt;
&lt;&#x2F;noscript&gt;
&lt;youtube-player video-id=&quot;QEt80wvO4yY&quot;&gt;&lt;&#x2F;youtube-player&gt;
&lt;br&#x2F;&gt;
&lt;p&gt;And don&#x27;t forget, it&#x27;s just a Matrix client - with no infrastructure required other than a normal Matrix server:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;blog&#x2F;img&#x2F;2022-08-15-thirdroom-overlay.jpg&quot; alt=&quot;Third Room Overlay&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;As you can see, we are rapidly approaching the point where we’ll need support from technical artists to help create beautiful scenes and avatars and assets in order to make it all come to life - especially once the Blender and Unity pipelines, and&#x2F;or the Third Room editor are finished. If you’re interested in getting involved come chat at &lt;a href=&quot;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#thirdroom-dev:matrix.org&quot;&gt;#thirdroom-dev:matrix.org&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;wysiwyg&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#wysiwyg&quot; aria-label=&quot;Anchor link for: wysiwyg&quot;&gt;🔗&lt;&#x2F;a&gt;WYSIWYG&lt;&#x2F;h3&gt;
&lt;p&gt;Back in the real world, a recent new project that we haven’t spoken about much yet is adding consistent WYSIWYG (What You See Is What You Get) editing to the message composer in matrix-{react,ios,android}-sdk as used by Element Web&#x2F;iOS&#x2F;Android - as well as publishing the resulting WYSIWYG editor for the greater glory of the wider ecosystem.&lt;&#x2F;p&gt;
&lt;p&gt;This is a bit of a contentious area, because we’ve tried several times over the years to add a rich text editor to matrix-react-sdk - firstly with the &lt;a href=&quot;https:&#x2F;&#x2F;draftjs.org&#x2F;&quot;&gt;Draft.js&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-react-sdk&#x2F;pull&#x2F;292&quot;&gt;implementation&lt;&#x2F;a&gt; by Aviral (which we abandoned after Facebook de-staffed Draft), and then later with a &lt;a href=&quot;https:&#x2F;&#x2F;www.slatejs.org&quot;&gt;Slate&lt;&#x2F;a&gt; &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-react-sdk&#x2F;pull&#x2F;1890&quot;&gt;implementation&lt;&#x2F;a&gt; by me (which we abandoned thanks to the maintenance burden of keeping up with Slate’s API changes).  Finally, burnt by the experience with third party solutions, Bruno wrote his own editor called &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-react-sdk&#x2F;blob&#x2F;develop&#x2F;docs&#x2F;ciderEditor.md&quot;&gt;CIDER&lt;&#x2F;a&gt;, which was a great success and is what Element Web uses today to author messages including ‘pills’ for structured rooms&#x2F;users etc… but this deliberately didn’t provide full WYSIWYG functionality.  Meanwhile, Slack added WYSIWYG, forced it on, and &lt;a href=&quot;https:&#x2F;&#x2F;quuxplusone.github.io&#x2F;blog&#x2F;2019&#x2F;11&#x2F;20&#x2F;slack-rich-text-box&#x2F;&quot;&gt;screwed it up&lt;&#x2F;a&gt; - and apps like WhatsApp and Discord seem to get by fine without WYSIWYG.&lt;&#x2F;p&gt;
&lt;p&gt;However, given that users are now used to WYSIWYG in Teams and Slack, we’ve now decided to have another go at it, inspired by CIDER’s success - and with the novel twist that the heavy lifting of modelling and versioning the document and handling Unicode + CJK voodoo will be provided by a cross-platform native library written in Rust, ensuring that matrix-{react,ios,android}-sdk (and in future matrix-rust-sdk-based apps like Element X) all have precisely the same consistent semantics, and we don’t spend our lives fixing per-platform WYSIWYG bugs unless it really is a platform-specific issue with the user interface provided on that particular platform.&lt;&#x2F;p&gt;
&lt;p&gt;The project is fairly young but developing fast, and lives over at &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-wysiwyg&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-wysiwyg&lt;&#x2F;a&gt; (better name suggestions welcome ;) - we’re aiming to get it into clients by the end of October.  The editor itself is not Matrix specific at all, so it’ll be interesting to see if other projects pick it up at all - and meanwhile, if we’ve done a good job, it’ll be interesting to see if this can be used to power Matrix-backed collaborative-editing solutions in future…&lt;&#x2F;p&gt;
&lt;noscript&gt;
  Today&#x27;s Matrix Live:
  &lt;a href=&quot;https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=9_UhNBKUk7A&quot;&gt;
    https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=9_UhNBKUk7A
  &lt;&#x2F;a&gt;
&lt;&#x2F;noscript&gt;
&lt;youtube-player video-id=&quot;9_UhNBKUk7A&quot;&gt;&lt;&#x2F;youtube-player&gt;
&lt;p&gt;&lt;strong&gt;Update&lt;&#x2F;strong&gt;: we should have mentioned that the WYSIWYG editor project is being built out by staff at Element, who very kindly have been sponsored to work on it by one of Element&#x27;s Big Public Sector Customers in order to get to parity with Teams.  Thank you!!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;are-we-oidc-yet&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#are-we-oidc-yet&quot; aria-label=&quot;Anchor link for: are-we-oidc-yet&quot;&gt;🔗&lt;&#x2F;a&gt;Are We OIDC Yet?&lt;&#x2F;h3&gt;
&lt;p&gt;On the other hand, a project we recently &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2022&#x2F;08&#x2F;10&#x2F;areweoidcyet-com-matrix-and-open-id-connect&quot;&gt;yelled about&lt;&#x2F;a&gt; a lot is Matrix’s transition to Open ID Connect for standards-based authentication and account management.  We announced this at the &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2021&#x2F;12&#x2F;22&#x2F;the-mega-matrix-holiday-special-2021#openid-connect&quot;&gt;end of the year&lt;&#x2F;a&gt; and the project has built up huge momentum subsequently, culminating with the release of &lt;a href=&quot;https:&#x2F;&#x2F;areweoidcyet.com&quot;&gt;https:&#x2F;&#x2F;areweoidcyet.com&lt;&#x2F;a&gt; last week to track the progress and remaining work.&lt;&#x2F;p&gt;
&lt;p&gt;Our plan is to use native OIDC in production for the first time to provide all the login, registration and account management for Third Room when it launches in a few weeks (using a branded Keycloak instance as the identity provider, for convenience).  After all, the last thing we wanted to do was to waste time building fiddly Matrix-specific login&#x2F;registration UI in Third Room when we’re about to move to OIDC!  This will be an excellent case study to see how it works, and how it feels, and inform the rest of the great OIDC experiment and proposed migration.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;dendrite-p2p&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#dendrite-p2p&quot; aria-label=&quot;Anchor link for: dendrite-p2p&quot;&gt;🔗&lt;&#x2F;a&gt;Dendrite + P2P&lt;&#x2F;h3&gt;
&lt;p&gt;Meanwhile, the Next Generation team has continued to focus on their mission to make Dendrite as efficient and usable as possible. Within recent months, Dendrite has matured dramatically, with a considerable list of bugs fixed, performance significantly improved and new features added - push notifications, history visibility and presence to name a few notable additions.&lt;&#x2F;p&gt;
&lt;p&gt;Neil Alexander, Kegan and Till have continued to streamline the Dendrite architecture and to refactor areas of the codebase which have long needed attention, as well as moving from Kafka to NATS JetStream, an all-new caching model and some other fairly major architectural changes. We’ve also seen an increase of code contributions from the community and outside organisations, which is exciting, and the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;gomatrixserverlib&quot;&gt;gomatrixserverlib&lt;&#x2F;a&gt; library which underpins much of Dendrite is also seeing more active development and attention thanks to its use in the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;complement&quot;&gt;Complement&lt;&#x2F;a&gt; integration testing suite.&lt;&#x2F;p&gt;
&lt;p&gt;With the most recent &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;dendrite&#x2F;releases&quot;&gt;0.9.3 release&lt;&#x2F;a&gt;, we are proud to announce that &lt;strong&gt;Dendrite now&lt;&#x2F;strong&gt; &lt;strong&gt;passes 90% of Client-Server API tests and 95% of Server-Server API tests&lt;&#x2F;strong&gt; and has support for all specced room versions in use today. We have a growing community of users who are (quite successfully) trialling using Dendrite homeservers day-to-day, as well as our own public &lt;code&gt;dendrite.matrix.org&lt;&#x2F;code&gt; homeserver, which is open to the public for registration for anyone who wants to experiment with Dendrite without running their own deployment.&lt;&#x2F;p&gt;
&lt;p&gt;Dendrite plays an important role in our future strategy as it is also the homeserver implementation used for embedded homeservers, P2P development and experimentation. In addition to being able to scale up, we have also successfully scaled down, with the Element P2P demos proving that an embedded Dendrite homeserver can run comfortably on an iOS or Android device.&lt;&#x2F;p&gt;
&lt;p&gt;Research on the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;pinecone&#x2F;&quot;&gt;Pinecone&lt;&#x2F;a&gt; overlay network for P2P Matrix has also continued, with Devon and Neil having experimented with a number of protocol iterations and spent considerable time bringing the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;pinecone&#x2F;tree&#x2F;main&#x2F;cmd&#x2F;pineconesim&quot;&gt;Pinecone Simulator&lt;&#x2F;a&gt; up to scratch to help us to test our designs more rapidly. Our work in this area is helping us to form a better direction and strategy for P2P Matrix as a whole, which is moving more towards a hybridised model with the current Matrix federation — a little different to our original vision, but will hopefully result in a much smoother transition path for existing users whilst solving some potential scaling problems. The &lt;a href=&quot;https:&#x2F;&#x2F;arewep2pyet.com&quot;&gt;arewep2pyet.com&lt;&#x2F;a&gt; site is a living page which contains a high level overview of our goals and all the progress being made.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-s-left&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#what-s-left&quot; aria-label=&quot;Anchor link for: what-s-left&quot;&gt;🔗&lt;&#x2F;a&gt;What’s left?&lt;&#x2F;h2&gt;
&lt;p&gt;Comparing all of the above with the &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2021&#x2F;12&#x2F;22&#x2F;the-mega-matrix-holiday-special-2021#2022&quot;&gt;predictions for 2022&lt;&#x2F;a&gt; section of the end-of-year blog post, we’re making very strong progress in a tonne of areas - and the list above isn’t comprehensive.  For instance, we haven’t called out all the work that the Trust &amp;amp; Safety team are doing to roll out advanced moderation features by default to all communities - or the work that Eric has been doing to close the remaining gap between Gitter and Matrix by creating new static archives throughout Matrix.  Hydrogen has also been beavering away to provide a tiny but perfectly formed web client suitable for embedding, including the new embeddable Hydrogen SDK. We haven’t spoken about the work that the Cryptography team have been doing to adopt vodozemac and matrix-rust-sdk-crypto throughout matrix-{js,ios,android}-sdk, or improve encryption stability and security throughout.  We’ve also not spoken about the new initiative to fix long-term chronic bugs (outside of the work above) in general - or all the work being done around &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2022&#x2F;03&#x2F;30&#x2F;technical-faq-on-the-digital-markets-act&quot;&gt;Digital Markets Act interoperability&lt;&#x2F;a&gt;…&lt;&#x2F;p&gt;
&lt;p&gt;Other things left on the menu for this year include getting Threads out of beta: we’ve had a bit of an adventure here figuring out how to get the right semantics for notification badges and unread state in rooms with threads (especially if you use a mix of clients which support and don’t support threads), and once that’s done we’ll be returning to Spaces (performance, group permissions etc).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;matrix-2-0&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#matrix-2-0&quot; aria-label=&quot;Anchor link for: matrix-2-0&quot;&gt;🔗&lt;&#x2F;a&gt;Matrix 2.0?&lt;&#x2F;h2&gt;
&lt;p&gt;Looking through this post (and congratulations if you’re still reading it at this point ;P), it really feels that Matrix is on the verge of shifting into a new phase.  Much as MacOS X started off as a promising but distinctly unoptimised operating system, and then subsequently got unrecognisably faster year by year (even on the same hardware!) as Apple diligently worked away optimising the kernel… similarly: we are now landing the architectural changes to completely transform how Matrix performs.&lt;&#x2F;p&gt;
&lt;p&gt;Between protocol changes like Sliding Sync, Faster Joins, native OIDC and native VoIP conferencing all landing at roughly the same time - and alongside new implementations like matrix-rust-sdk and vodozemac, let alone Third Room - it feels unquestionably like we have an unrecognisable step change on the horizon.  Our aim is to land as much of this as possible by the end of the year, and if we pull it off, I’m tempted to suggest we call the end result Matrix 2.0.&lt;&#x2F;p&gt;
&lt;p&gt;To the future! 🚀&lt;&#x2F;p&gt;
&lt;p&gt;Matthew, Amandine &amp;amp; the whole core team.&lt;&#x2F;p&gt;
</content>
</entry>

    
<entry xml:lang="en">
    <title>The Mega Matrix Holiday Special 2021</title>
    <published>2021-12-22T23:27:06+00:00</published>
    <updated>2021-12-22T17:54:48+00:00</updated>
    <author>
      <name>Matthew Hodgson</name>
    </author>
    <link rel="alternate" href="https://c956b204.matrix-website.pages.dev/blog/2021/12/22/the-mega-matrix-holiday-special-2021/" type="text/html"/>
    <id>https://c956b204.matrix-website.pages.dev/blog/2021/12/22/the-mega-matrix-holiday-special-2021/</id>
    <content type="html">&lt;p&gt;Hi all,&lt;&#x2F;p&gt;
&lt;p&gt;If you’re reading this - congratulations; you made it through another year :)  Every winter we sit down and review Matrix’s progress over the last twelve months, and look forward to the next - for it’s all too easy to get lost in the day-to-day development and fail to realise how much the overall project is evolving, especially when it’s one as large and ambitious as Matrix!&lt;&#x2F;p&gt;
&lt;p&gt;Looking back at 2021, it’s unbelievable how much stuff has been going on in the core team (as you can tell by the length of this post - sorry!).  There’s been a really interesting mix of activity too - between massive improvements to the core functionality and baseline features that Matrix provides, and also major breakthroughs on next generation work.  But first, let’s check out what’s been happening in the wider ecosystem…&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;the-matrix-ecosystem&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-matrix-ecosystem&quot; aria-label=&quot;Anchor link for: the-matrix-ecosystem&quot;&gt;🔗&lt;&#x2F;a&gt;The Matrix Ecosystem&lt;&#x2F;h2&gt;
&lt;p&gt;Over 2021 the Matrix ecosystem has expanded unrecognisably.  This time last year we were aware of 2 governments who were seriously adopting Matrix at scale (France and Germany), with the UK and US starting to roll out initial deployments.  12 months later, and we are now aware of &lt;strong&gt;12&lt;&#x2F;strong&gt; governments who are adopting Matrix in various capacities - and we hope to be able to talk about at least some of them in public in 2022!  The UK and US have both progressed significantly too.&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile, one of the most exciting new public sector stories this year has been &lt;a href=&quot;https:&#x2F;&#x2F;www.gematik.de&#x2F;anwendungen&#x2F;ti-messenger&quot;&gt;gematik&lt;&#x2F;a&gt;: Germany’s national healthcare agency, who &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2021&#x2F;07&#x2F;21&#x2F;germanys-national-healthcare-system-adopts-matrix&quot;&gt;announced Matrix&lt;&#x2F;a&gt; as the basis for interoperable secure messaging throughout the whole healthcare sector.  This is a genuine step change for Matrix: rather than a government putting out tenders for “a secure messaging solution”, instead we are seeing tenders for Matrix solution providers.  The Matrix industry is real; it exists today, and we’re seeing more and more new providers such as &lt;a href=&quot;https:&#x2F;&#x2F;famedly.com&#x2F;&quot;&gt;Famedly&lt;&#x2F;a&gt; (building on the &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;famedly&#x2F;company&#x2F;frontend&quot;&gt;Flutter&#x2F;Dart stack&lt;&#x2F;a&gt; which powers &lt;a href=&quot;https:&#x2F;&#x2F;fluffychat.im&quot;&gt;FluffyChat&lt;&#x2F;a&gt;) and &lt;a href=&quot;https:&#x2F;&#x2F;folivo.net&#x2F;portfolio&#x2F;timmy-messenger&#x2F;&quot;&gt;Folivonet&lt;&#x2F;a&gt; (building on the &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;benkuly&#x2F;trixnity&quot;&gt;Trixnity&lt;&#x2F;a&gt; Kotlin Multiplatform stack) stepping up to get involved - as well as many more big incumbents.  We created Matrix in order to bootstrap a new decentralised communication industry, and frankly it’s amazing to see it actually taking shape.&lt;&#x2F;p&gt;
&lt;p&gt;Another big step change has been the number of existing chat providers looking to become part of the wider Matrix network. Back in September our friends at &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=jBtBiUXLqAk&amp;amp;t=1691s&quot;&gt;Rocket.Chat announced that they’re working on Matrix support&lt;&#x2F;a&gt; for federation, perhaps inspired by our case study in making &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2020&#x2F;12&#x2F;07&#x2F;gitter-now-speaks-matrix&quot;&gt;Gitter speak Matrix&lt;&#x2F;a&gt; - and meanwhile Matrix comes up a lot in the context of Twitter’s Bluesky initiative, and a few big players we can’t yet mention have also been in touch wanting to natively talk Matrix too.&lt;&#x2F;p&gt;
&lt;p&gt;We’ve also seen a huge shift in big enterprises adopting Matrix for self-sovereign secure communication (although we can’t drop any names yet 😔). This may have been spurred on by such misadventures as Electronic Arts being compromised via a &lt;a href=&quot;https:&#x2F;&#x2F;www.vice.com&#x2F;en&#x2F;article&#x2F;7kvkqb&#x2F;how-ea-games-was-hacked-slack&quot;&gt;leaked Slack access token&lt;&#x2F;a&gt;, but it feels like many of the biggest organisations now realise that unquestioningly handing their data to Slack or Teams is a bad idea, when they could have an end-to-end encrypted deployment of their own instead.&lt;&#x2F;p&gt;
&lt;p&gt;There has also been a turning point in legislation in favour of Matrix - with the EU Digital Markets Act &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;matrixdotorg&#x2F;status&#x2F;1471191916838633481&quot;&gt;pushing hard for interoperability&lt;&#x2F;a&gt; for ‘big tech’ communication services in the EU (see &lt;a href=&quot;https:&#x2F;&#x2F;interoperability.news&#x2F;2021&#x2F;12&#x2F;eu-parliament-upgrades-dma-to-open-gatekeepers-gates&#x2F;&quot;&gt;Amandine’s take&lt;&#x2F;a&gt; here), and meanwhile Eric Migicovsky, CEO at &lt;a href=&quot;https:&#x2F;&#x2F;www.beeper.com&#x2F;&quot;&gt;Beeper&lt;&#x2F;a&gt; has been busy &lt;a href=&quot;https:&#x2F;&#x2F;www.c-span.org&#x2F;video&#x2F;?c4992173&#x2F;user-clip-eric-migicovsky-testimony&quot;&gt;testifying to US Congress&lt;&#x2F;a&gt; on the merits of interoperability too. It’s not inconceivable that we will soon live in a world where governments mandate that the walled gardens will finally have to open up, and we may see a whole new level of interest in communication providers wanting to join Matrix!&lt;&#x2F;p&gt;
&lt;p&gt;Communities themselves have also been embracing Matrix more and more over the last year: we were incredibly proud to host &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2021&#x2F;02&#x2F;15&#x2F;how-we-hosted-fosdem-2021-on-matrix&quot;&gt;FOSDEM 2021&lt;&#x2F;a&gt;, the world’s biggest open source conference via Matrix (all 35K attendees!) - and we’re gearing up to do it again in February for &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;fosdem&#x2F;status&#x2F;1451475324684980241&quot;&gt;FOSDEM 2022&lt;&#x2F;a&gt; (this time with our &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2021&#x2F;12&#x2F;02&#x2F;call-for-participation-for-the-fosdem-2022-matrix-dev-room&quot;&gt;very first FOSDEM Matrix dev room&lt;&#x2F;a&gt;!). We were also really glad that &lt;a href=&quot;https:&#x2F;&#x2F;libera.chat&#x2F;&quot;&gt;Libera.chat&lt;&#x2F;a&gt; let us point a dedicated homeserver and IRC bridge at their new IRC network (meaning you can join anywhere on Libera from Matrix as #channel:libera.chat, and talk to anyone as @nick:libera.chat). High profile open source projects have been adopting Matrix all over the place - &lt;a href=&quot;https:&#x2F;&#x2F;wiki.debian.org&#x2F;Teams&#x2F;DebianSocial&#x2F;Matrix&quot;&gt;Debian&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;fedoramagazine.org&#x2F;multiple-matrix-sessions-with-element-on-fedora-linux&#x2F;&quot;&gt;Fedora&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;nixos.wiki&#x2F;wiki&#x2F;Matrix&quot;&gt;NixOS&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;wiki.archlinux.org&#x2F;title&#x2F;Matrix&quot;&gt;Arch&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;blog.torproject.org&#x2F;entering-the-matrix&#x2F;&quot;&gt;Tor&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;ansible.github.io&#x2F;community&#x2F;posts&#x2F;matrix_and_ansible.html&quot;&gt;Ansible&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;whatwg.org&#x2F;chat&quot;&gt;WHATWG&lt;&#x2F;a&gt; and many others (check out &lt;a href=&quot;https:&#x2F;&#x2F;www.ubuntubuzz.com&#x2F;2021&#x2F;10&#x2F;matrix-chat-adoption-by-community-in.html&quot;&gt;this list&lt;&#x2F;a&gt;!) now have their own Matrix servers and spaces.  (You know things are busy when we haven’t had time to do a big blog post to announce folk as important as these joining the network!)&lt;&#x2F;p&gt;
&lt;p&gt;Finally, there has been an explosion of new projects and milestones in the wider community - &lt;a href=&quot;https:&#x2F;&#x2F;conduit.rs&quot;&gt;Conduit&lt;&#x2F;a&gt; entered &lt;a href=&quot;https:&#x2F;&#x2F;conduit.rs&#x2F;release-0-2-0&#x2F;&quot;&gt;beta&lt;&#x2F;a&gt; as a super exciting lightweight Rust homeserver implementation; &lt;a href=&quot;https:&#x2F;&#x2F;fluffychat.im&quot;&gt;FluffyChat&lt;&#x2F;a&gt; hit 1.0 with an impressively polished Flutter-based experience; &lt;a href=&quot;https:&#x2F;&#x2F;beeper.com&quot;&gt;Beeper&lt;&#x2F;a&gt; pre-launched to huge amounts of mainstream excitement; &lt;a href=&quot;https:&#x2F;&#x2F;cinny.in&#x2F;&quot;&gt;Cinny&lt;&#x2F;a&gt; exploded out of the blue as an incredibly elegant next-generation web client; &lt;a href=&quot;https:&#x2F;&#x2F;keanu.im&#x2F;&quot;&gt;Keanu&lt;&#x2F;a&gt; materialised from &lt;a href=&quot;https:&#x2F;&#x2F;guardianproject.info&#x2F;&quot;&gt;The Guardian Project&lt;&#x2F;a&gt; as their glossy Matrix client suite; &lt;a href=&quot;https:&#x2F;&#x2F;commune.chat&#x2F;&quot;&gt;Commune&lt;&#x2F;a&gt; appeared as a hybrid messageboard&#x2F;chatroom interface; &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Nheko-Reborn&#x2F;nheko&#x2F;&quot;&gt;Nheko&lt;&#x2F;a&gt; has matured significantly with huge E2EE improvements and feature and VoIP polish; &lt;a href=&quot;https:&#x2F;&#x2F;apps.kde.org&#x2F;en-gb&#x2F;neochat&#x2F;&quot;&gt;NeoChat&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;quotient-im&#x2F;libQuotient&quot;&gt;libQuotient&lt;&#x2F;a&gt; development is progressing solidly; &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.gnome.org&#x2F;GNOME&#x2F;fractal&quot;&gt;Fractal&lt;&#x2F;a&gt; is busy with the &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.gnome.org&#x2F;GNOME&#x2F;fractal&#x2F;-&#x2F;tree&#x2F;fractal-next&quot;&gt;fractal-next&lt;&#x2F;a&gt; rewrite to move everything over to matrix-rust-sdk and GTK 4;  &lt;a href=&quot;https:&#x2F;&#x2F;syphon.org&#x2F;&quot;&gt;Syphon&lt;&#x2F;a&gt; continues to forge ahead as a privacy-focused Flutter-based client, and non-chat clients like &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;toger5&#x2F;TheBoard&quot;&gt;The Board&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;opentower&#x2F;populus-viewer&quot;&gt;Populus&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;DanilaFe&#x2F;matrix-highlight&quot;&gt;Matrix Highlight&lt;&#x2F;a&gt; have started to appear in earnest too!  We also had a super successful &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2021&#x2F;05&#x2F;20&#x2F;google-summer-of-code-2021&quot;&gt;Google Summer of Code&lt;&#x2F;a&gt; this year, with a record number of 7 students participating in both core team and community projects.&lt;&#x2F;p&gt;
&lt;p&gt;Please note this is just a random sample of all the community news over the last year - to get more colour on what’s been going on, we highly recommend flipping through the &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;category&#x2F;this-week-in-matrix&quot;&gt;This Week In Matrix archives&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-matrix-spec&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-matrix-spec&quot; aria-label=&quot;Anchor link for: the-matrix-spec&quot;&gt;🔗&lt;&#x2F;a&gt;The Matrix Spec&lt;&#x2F;h2&gt;
&lt;p&gt;The Matrix spec is the single source of truth of what Matrix actually is, and this year it got some major improvements thanks to a beautiful new website at &lt;a href=&quot;https:&#x2F;&#x2F;spec.matrix.org&quot;&gt;https:&#x2F;&#x2F;spec.matrix.org&lt;&#x2F;a&gt; thanks to Will Bamberg, formerly of &lt;a href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;&quot;&gt;MDN&lt;&#x2F;a&gt; (and who’s now back fighting the good fight with the MDN team at &lt;a href=&quot;https:&#x2F;&#x2F;opencollective.com&#x2F;open-web-docs&#x2F;updates&#x2F;will-bamberg-joins-open-web-docs-staff&quot;&gt;OWD&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;Aside from the new spec site, we also released our first official point release in a while - &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2021&#x2F;11&#x2F;09&#x2F;matrix-v-1-1-release&quot;&gt;Matrix 1.1&lt;&#x2F;a&gt;, and we’re going to aim to keep regular releases happening once a quarter from here on in.  It’s also worth noting that it’s very much a feature and not a bug that spec releases lag behind the various &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;docs&#x2F;spec&#x2F;proposals&quot;&gt;spec proposals&lt;&#x2F;a&gt; which fly around as the core team and community experiment with new features like spaces, threads, etc.  We very deliberately only merge change proposals to the spec which have been proven to work in real life implementations, and which have fully passed the spec review process (along with any dependencies they might have!).&lt;&#x2F;p&gt;
&lt;p&gt;Talking of which, in 2021 we saw a record &lt;strong&gt;109&lt;&#x2F;strong&gt; Matrix Spec Change proposals (MSCs) created. Even better, we closed &lt;strong&gt;62&lt;&#x2F;strong&gt; MSCs - so while the backlog is still growing, we’re still making very concrete progress.  Of the 109 new MSCs: 34 were from the wider Matrix community, 34 were from ex-community contributors who are now part of the core team, 13 were from the founding Matrix team, and 28 were from folks hired to work on Matrix by Element on behalf of the Matrix.org Foundation.  This feels like a pretty healthy blend of contributions, and while it’s true that spec work could always progress faster, things do seem to be heading in the right direction.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;blog&#x2F;img&#x2F;2021-12-22-spec.png&quot; alt=&quot;The latest MSC stats&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;In the new year, the Spec Core Team (responsible for reviewing MSCs and voting on what gets merged to the spec) is going to make a concerted effort to carve out more dedicated time for spec work - thankfully one of the side-effects of Matrix growing is that there are now a lot more people around with whom we can share other work, hopefully meaning that we can put significantly more hours into keeping the spec growing healthily.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;synapse&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#synapse&quot; aria-label=&quot;Anchor link for: synapse&quot;&gt;🔗&lt;&#x2F;a&gt;Synapse&lt;&#x2F;h2&gt;
&lt;p&gt;Synapse is the primary homeserver implementation published by the Matrix core team, and its maturity is unrecognisable from where we were a year ago.  One of the big breakthroughs has been stabilising memory usage through caching improvements - the Matrix.org synapse now reliably only uses 2-3GB of RAM on its main process, despite its activity having more than doubled over the last year (up from 513K monthly active users to 1.11M!).&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;blog&#x2F;img&#x2F;2021-12-22-perf.jpg&quot; alt=&quot;Synapse memory performance fixes&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Further signs of maturity include Synapse’s radically improved new &lt;a href=&quot;https:&#x2F;&#x2F;matrix-org.github.io&#x2F;synapse&#x2F;latest&#x2F;&quot;&gt;documentation&lt;&#x2F;a&gt; and the new &lt;a href=&quot;https:&#x2F;&#x2F;matrix-org.github.io&#x2F;synapse&#x2F;latest&#x2F;modules&#x2F;index.html&quot;&gt;module API&lt;&#x2F;a&gt;, the fact that mypy type-safety coverage has improved from ~75% to over 89.7% (across 151,903 lines of code!), and the fact that Open Tracing support has matured to the point that visualising complex cross-worker behaviour is nowadays a genuine pleasure.  Frankly, Synapse should be feeling robust and stable these days - if you see folks claiming otherwise, please check they’re not basing that on outdated info (or failing that, get them to file bug reports that we can jump on!).&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile, on the feature side, we’ve landed a huge spate of long-awaited core functionality.  Probably the best way to track it is by the Matrix Spec Change proposals (MSCs) which have been implemented (although I dare you to also go and check out Synapse’s &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;blob&#x2F;develop&#x2F;CHANGES.md&quot;&gt;changelog&lt;&#x2F;a&gt;, all 675KB of it, which is frankly a thing of beauty and will take you down a rabbithole all the way back to v0.0.0 in Aug 2014 if you so desire ;P). Major MSCs which we’ve landed include:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Spaces! It’s hard to overstate how positive this has been for Matrix’s usability: at last, we can group our rooms together however we please, both for our own edification and to share with others - and we can view space hierarchies over federation, complete with pagination (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;2946&quot;&gt;MSC2946&lt;&#x2F;a&gt;) as well as specify who can join a room based on whether they’re a member of a given space&#x2F;room (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;3083&quot;&gt;MSC3083&lt;&#x2F;a&gt;).&lt;&#x2F;li&gt;
&lt;li&gt;Threads! Yes, that’s right - coming any day now to a Matrix client close to you, we have ‘classic’ threaded messaging landing, providing sidebars of conversation through the new m.thread relation type (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;3440&quot;&gt;MSC3440&lt;&#x2F;a&gt;), building on Matrix’s existing aggregation API as used for edits and reactions.  We’ve chosen to prioritise single-level-deep-threads rather than arbitrarily-deep-trees (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;2836&quot;&gt;MSC2836&lt;&#x2F;a&gt;) as it maps more easily to a chat UX, although the two approaches are not mutually exclusive.&lt;&#x2F;li&gt;
&lt;li&gt;Aggregations! Everyone’s favourite bête noire in Matrix tends to be that aggregations for edits &amp;amp; reactions predate today’s Matrix Spec Change process and went mainstream without using a vendor prefix before their spec had been stabilised.  Better late than never, we’ve taken advantage of Threads to go back and fix what once went wrong - and now &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;2674&quot;&gt;MSC2674&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;2675&quot;&gt;MSC2675&lt;&#x2F;a&gt; and friends are hopefully on a much better track to provide a basis for how aggregations work - both in the spec and in the reference implementation in Synapse.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;blog&#x2F;img&#x2F;2021-12-22-aggs.png&quot; alt=&quot;Anatomy of a bête noire&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Social Login via multiple SSO providers (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;2858&quot;&gt;MSC2858&lt;&#x2F;a&gt;) - almost 50% of new registrations on the Matrix.org homeserver now use social login!  Interestingly the split of SSO usage is roughly 70% Google, 12% GitHub, 11% Apple, 6% Facebook and 1% GitLab. Make of that what you will!&lt;&#x2F;li&gt;
&lt;li&gt;Knocking (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;2403&quot;&gt;MSC2403&lt;&#x2F;a&gt;)! Huge thanks to Sorunome and Anoa, we now support the ability to knock to ask to join a room if not yet invited. If this sounds unfamiliar, it may be because it hasn’t landed in Element yet, but expect it to land next year.&lt;&#x2F;li&gt;
&lt;li&gt;Refresh tokens (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;2918&quot;&gt;MSC2918&lt;&#x2F;a&gt;)! At last, we have a standard way for clients to refresh their access tokens, so that if your access token leaks it will not give access to your account indefinitely.  (This also has yet to land in Element, but has been proved on a branch on Hydrogen).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Finally, last but not least, Eric from Gitter has been fearlessly hacking his way through some of Matrix’s gnarliest problems in his quest to bring Matrix+Element up to full feature parity with Gitter. In practice, this means adding the ability to incrementally import old history into existing Matrix rooms (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;2716&quot;&gt;MSC2716&lt;&#x2F;a&gt;), so we can expose the vast amounts of knowledge in Gitter’s archives directly into Matrix - and in future provide bridging in general of existing archives (Slack, Discord, mailing lists, newsgroups, forums, etc.) into Matrix.&lt;&#x2F;p&gt;
&lt;p&gt;This is a &lt;em&gt;tough&lt;&#x2F;em&gt; problem, as Matrix rooms are fundamentally immutable - events sent into a room cannot be changed.  However, we can bend time a bit and add old chapters of history to the room as if we’d just discovered them down the back of the sofa - and this is what &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;2716&quot;&gt;MSC2716&lt;&#x2F;a&gt; does.  The (rewritten!) &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;blob&#x2F;matthew&#x2F;%5BMSC2716%5D(https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;2716)&#x2F;proposals&#x2F;2716-batch-send-historical-messages.md&quot;&gt;spec proposal&lt;&#x2F;a&gt; is a thing of beauty and well worth a look, and you can see an early preview in action back on &lt;a href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;gSrqj2IzJew?t=529&quot;&gt;Matrix Live in June&lt;&#x2F;a&gt;. Over the last few months it’s been merging and maturing in Synapse and we should see it in the wild in the near future!  And for bonus points Eric’s also just added in Jump-to-date support (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;3030&quot;&gt;MSC3030&lt;&#x2F;a&gt;), letting clients jump around room history by timestamp - another Gitter feature that we sorely need, and will also help us publish excellent Gitter-style online chat archives in future.  You can see it in action in last week’s &lt;a href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;Hsyqa5ozWIo?t=581&quot;&gt;Matrix Live&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;element&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#element&quot; aria-label=&quot;Anchor link for: element&quot;&gt;🔗&lt;&#x2F;a&gt;Element&lt;&#x2F;h2&gt;
&lt;p&gt;Meanwhile, on the client side, Element continues to act as a flagship client to drive the development of the official client SDKs we ship as the Matrix.org Foundation - and our focus more than ever before has been to ensure that Matrix can be used to create mainstream-usable polished glossy apps.  After all, Matrix will only succeed if clients emerge which can punch their weight against the enormous incumbents - be they Slack, Teams, WhatsApp or Discord.&lt;&#x2F;p&gt;
&lt;p&gt;This year, improving UX quality has been front and center - and hopefully the shift has been obvious in the app (and huge thanks to everyone who tweeted&#x2F;tooted&#x2F;enthused about improvements when they saw them!).  Part of this has been ensuring that all new features are built in a design- and product-led fashion by folks who are explicitly focused on product engineering - with product design involved from the outset and with coordination and focus provided by product management folks. This is far from the typical way that FOSS operates, but if we’re to succeed against the incumbents we have to beat them at their own game (just as, for instance, Mozilla wields conventional product management in their browser wars).&lt;&#x2F;p&gt;
&lt;p&gt;More recently, there’s also been a major shift towards structured &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;element_hq&#x2F;status&#x2F;1470798993122807809&quot;&gt;user testing&lt;&#x2F;a&gt; in order to evaluate new features and analyse how users trip over the app in general, including radically improved analytics (for those who opt in!) to help visualise which bits of the app aren’t working.  In the new year, the expectation is to double down on user testing: quite simply, if you can hand Element to a casual mainstream user and they can get the core jobs done (sign up, chat to someone, call someone, etc.) without tripping over, then mission successful :)&lt;&#x2F;p&gt;
&lt;p&gt;The &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;&quot;&gt;Element blog&lt;&#x2F;a&gt; covers the work this year from the Element side, but from the Matrix side, the key changes include:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;finalising &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;spaces-blast-out-of-beta&#x2F;&quot;&gt;Spaces&lt;&#x2F;a&gt; as a way to group together rooms - providing the equivalent of Discord servers or Slack workspaces, or alternatively letting you gather your own rooms together into a private space.&lt;&#x2F;li&gt;
&lt;li&gt;building out Threads (available in labs; launching soon!)&lt;&#x2F;li&gt;
&lt;li&gt;Social Login!&lt;&#x2F;li&gt;
&lt;li&gt;radically improving Element’s Information Architecture (i.e. the layout of the UI, so that the panels and buttons are correctly semantically grouped together in a visual hierarchy)&lt;&#x2F;li&gt;
&lt;li&gt;adding &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;introducing-voice-messages-and-so-much-more&#x2F;&quot;&gt;Voice Messages&lt;&#x2F;a&gt; as a really beautiful polished feature powered by &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;3245&quot;&gt;MSC3245&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;adding Location Share (available in labs; launching soon!) powered by &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;3488&quot;&gt;MSC3488&lt;&#x2F;a&gt; (and in future &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;3489&quot;&gt;MSC3489&lt;&#x2F;a&gt; for live-location sharing - in dev on iOS right now!)&lt;&#x2F;li&gt;
&lt;li&gt;adding &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;element-1-9-1-export-is-finally-here&#x2F;&quot;&gt;Chat Export&lt;&#x2F;a&gt;, thanks to the amazing GSOC work by Jaiwanth&lt;&#x2F;li&gt;
&lt;li&gt;adding Polls via &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;3381&quot;&gt;MSC3381&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;blog&#x2F;img&#x2F;2021-12-22-spaces.gif&quot; alt=&quot;Spaces in all their glory&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;From a spec perspective, it’s been particularly exciting to be finally using Extensible Events (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;1767&quot;&gt;MSC1767&lt;&#x2F;a&gt;) for many of these new features: voice messages, location sharing and polls are all experimenting with this new idiom for expressing richer structured data over Matrix while presenting a consistent and useful ‘fallback’ representation for clients which don’t know how to natively render the richer data.&lt;&#x2F;p&gt;
&lt;p&gt;We’ve also done a huge amount of work this year in improving 1:1 VoIP - both via &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;2746&quot;&gt;MSC2746&lt;&#x2F;a&gt; and within the JS, iOS &amp;amp; Android Matrix SDKs. If you haven’t tried doing a 1:1 call via Matrix recently we’d highly recommend giving it a go - probably the main remaining bug at this point is that we need to find a better default ringtone for Element(!). Huge thanks go to Šimon Brandner both for his community contributions to VoIP and across all of Element Web - including proper screensharing for 1:1 (and group!) VoIP calls. This has also laid excellent groundwork for native Group VoIP&#x2F;Video over Matrix - more on that later.&lt;&#x2F;p&gt;
&lt;p&gt;On Element Mobile, work on all the above features has been balanced by fighting against the various platform’s quirks, and lots of under-the-hood work improving performance. iOS has gone through a long journey to get back to stability after iOS’s push notification API changes, while also improving incremental sync performance by rearchitecting the local cache in the client.  Android meanwhile has been working away improving the app; reworking Notifications, migrating to Kotlin coroutines and Hilt, and closing over 690 GH issues.  Android has also had its fair &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;element-on-google-play-store&#x2F;&quot;&gt;share of dramas&lt;&#x2F;a&gt;, including some recent long Play Store review times, but we’ve come through the other side intact.&lt;&#x2F;p&gt;
&lt;p&gt;However, we’ve been thinking more and more about the nightmarish pain point that is the amount of time we spend implementing the same features across the three different platforms. This becomes particularly apparent for security-sensitive features such as end-to-end encryption, or major API changes such as aggregations, spaces or sync v3 (more on that later). Or simply rapidly sharing improvements to implementation best practices between platforms.&lt;&#x2F;p&gt;
&lt;p&gt;Historically we consciously built platform-native Matrix SDKs in order to provide entirely idiomatic SDKs for other Matrix developers to use - and also to better dogfood the protocol and ensure that the heterogenous implementations could interoperate successfully. However, in practice, relatively few third party projects other than Element build on top of matrix-ios-sdk and matrix-android-sdk2 - and meanwhile there are more than enough other Matrix clients out there nowadays to dogfood interoperability against (including alternative experimental clients from the core team such as Hydrogen).&lt;&#x2F;p&gt;
&lt;p&gt;So, we’ve been thinking increasingly seriously about how to solve this…&lt;&#x2F;p&gt;
&lt;h2 id=&quot;a-new-hope-matrix-rust-sdk&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#a-new-hope-matrix-rust-sdk&quot; aria-label=&quot;Anchor link for: a-new-hope-matrix-rust-sdk&quot;&gt;🔗&lt;&#x2F;a&gt;A new hope: matrix-rust-sdk&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-rust-sdk&quot;&gt;matrix-rust-sdk&lt;&#x2F;a&gt; is an attempt to build a new reference client SDK for Matrix which can be used by as many platforms as possible - hopefully forever stopping us from reimplementing the wheel more than we need to. Work began towards the end of 2019, building on top of &lt;a href=&quot;https:&#x2F;&#x2F;ruma.dev&#x2F;&quot;&gt;Ruma&lt;&#x2F;a&gt;’s excellent Matrix rust crates, and poljar has been working away solidly at it ever since.  We teased matrix-rust-sdk in last year’s update, but as of this year it is properly coming of age and we’ve started using it in earnest - beginning by swapping out Element Android’s encryption implementation for matrix-rust-sdk-crypto (the E2EE cryptography crate provided by the SDK).&lt;&#x2F;p&gt;
&lt;p&gt;If you’re not familiar with Rust, the main benefits we get here are a heavy emphasis on safety and security without compromising performance; while providing a single codebase which can be used equally from iOS, native Desktop apps such as Fractal, Android (with native bindings) and even Web (via WASM, in future).  While technically this results in a “non-native” SDK relative to matrix-js-sdk, matrix-ios-sdk and matrix-android-sdk - in practice, it’s become so common to depend on native-code shared libraries (outside the web, at least) that it’s not really a problem.&lt;&#x2F;p&gt;
&lt;p&gt;Initial results look wildly promising here: “Element R” (formerly known as Corroded Element - the codename for the Rust-enhanced version of Element Android) builds are now out there, and out-perform the kotlin E2EE implementation by &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-rust-sdk&#x2F;pull&#x2F;170&quot;&gt;roughly 10x&lt;&#x2F;a&gt;, thanks to using native code and Rust’s improved parallelisation.&lt;&#x2F;p&gt;
&lt;p&gt;Our next step is to start using it on iOS, and we’ll be experimenting with a next-generation of Element iOS shortly in the new year with the SDK provided exclusively by matrix-rust-sdk.  Element will also be funding more people to work fulltime on matrix-rust-sdk itself, and to see what the developer experience is like when you use it seriously on the Web - watch this space!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bridges-bots-widgets-and-integration-managers&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#bridges-bots-widgets-and-integration-managers&quot; aria-label=&quot;Anchor link for: bridges-bots-widgets-and-integration-managers&quot;&gt;🔗&lt;&#x2F;a&gt;Bridges, Bots, Widgets and Integration Managers&lt;&#x2F;h2&gt;
&lt;p&gt;Elsewhere in Matrix, the Bridge Crew has busy polishing bridges like crazy - working away on encrypted application services (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;3202&quot;&gt;MSC3202&lt;&#x2F;a&gt;), massively improving the IRC bridge (particularly in the fallout of the great Freenode-&amp;gt;Libera migration), stabilising and extending &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-bifrost&quot;&gt;matrix-bifrost&lt;&#x2F;a&gt; (our XMPP-and-more bridge), getting libpurple bridging working properly in bifrost, getting &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-appservice-slack&quot;&gt;matrix-appservice-slack&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Half-Shot&#x2F;matrix-appservice-discord&quot;&gt;matrix-appservice-discord&lt;&#x2F;a&gt; stable enough to be hosted by &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;slack-bridging&#x2F;&quot;&gt;EMS&lt;&#x2F;a&gt;, experimenting with &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;turt2live&#x2F;matrix-bot-sdk&quot;&gt;matrix-bot-sdk&lt;&#x2F;a&gt; as an alternative bridging API, and even looking at adding &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-rust-sdk&#x2F;tree&#x2F;main&#x2F;crates&#x2F;matrix-sdk-crypto&quot;&gt;matrix-rust-sdk-crypto&lt;&#x2F;a&gt; into matrix-bot-sdk as an elegant way to power robust encrypted bridges (thus replacing Panatalaimon for that use case).&lt;&#x2F;p&gt;
&lt;p&gt;There’s also a new kid in town: &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Half-Shot&#x2F;matrix-hookshot&quot;&gt;matrix-hookshot&lt;&#x2F;a&gt; (formerly known as matrix-github) is a new all-singing-all-dancing general purpose integration built on matrix-bot-sdk, coming soon to an integration manager near you, which can bridge through to GitHub, GitLab, JIRA and freeform webhooks! Check it out a few weeks ago on &lt;a href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;55P-NdDa-UI?t=1018&quot;&gt;Matrix Live&lt;&#x2F;a&gt;. matrix-hookshot is primarily Node, but is also getting in on the Rust action with some functions being implemented in native code.&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile, change is afoot for integration managers, which have been screaming out for an overhaul for years. There was a cheeky hint in last week’s &lt;a href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;Hsyqa5ozWIo?t=724&quot;&gt;Matrix Live&lt;&#x2F;a&gt; where &lt;a href=&quot;https:&#x2F;&#x2F;dimension.t2bot.io&#x2F;&quot;&gt;Dimension&lt;&#x2F;a&gt; did an unexpected cameo looking particularly swish…  All shall be revealed next year!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;blog&#x2F;img&#x2F;2021-12-22-dimension.png&quot; alt=&quot;A whole new Dimension&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;dendrite-low-bandwidth-matrix-and-peer-to-peer-matrix&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#dendrite-low-bandwidth-matrix-and-peer-to-peer-matrix&quot; aria-label=&quot;Anchor link for: dendrite-low-bandwidth-matrix-and-peer-to-peer-matrix&quot;&gt;🔗&lt;&#x2F;a&gt;Dendrite, Low bandwidth Matrix and Peer-to-Peer Matrix&lt;&#x2F;h2&gt;
&lt;p&gt;Dendrite is our next-generation homeserver implementation written in Go, and having shipped the first beta in Oct 2020, we’ve cut another 11 releases over the course of this year - adding in features such as E2EE key backups, cross-signing, support for room versions 7, 8 and 9 (knocking and restricted join rules), massive state resolution performance improvements, an entirely new state storage implementation that uses ~15x less disk space, sync filtering, experimental support for peeking-over-federation (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;2444&quot;&gt;MSC2444&lt;&#x2F;a&gt;) - not to mention huge numbers of bug fixes. Even more excitingly, we’re in the process of ditching Kafka in favour of native-Go message queuing in the form of &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;dendrite&#x2F;compare&#x2F;nats&quot;&gt;NATS&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;p&gt;However, it’s been a bit of a weird year as the team has been repeatedly pulled onto other projects due to competing priorities - and there’s still a bunch of stuff left which is keeping us in beta.  Some of this is plain old missing features (search, push rules&#x2F;notifications, room upgrades, presence etc) - but we’ve also run up against some problems over the last few months while implementing new room versions and similar thanks to the sheer number of different microservices which Dendrite is made out of. In retrospect, it feels like Dendrite has ended up too granular, and when hacking on it you get slowed down badly by all the boilerplate required to glue the various services together.  Therefore, we’ve just started to &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;dendrite&#x2F;pull&#x2F;2055&quot;&gt;merge some of the services together&lt;&#x2F;a&gt; - still preserving horizontal scaling of course, but refactoring the architecture a bit while we’re still in beta to help speed up development again. So far things are looking promising!  We’re also really looking forwards to &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;dendrite&#x2F;pulls?q=+is%3Apr+author%3As7evinK&quot;&gt;s7evinK&lt;&#x2F;a&gt; joining the team to work on Dendrite fulltime in the coming weeks :)&lt;&#x2F;p&gt;
&lt;p&gt;Talking of competing priorities, there have been three other big missions going on at the same time as Dendrite dev: firstly - formalising Low Bandwidth Matrix. LB Matrix is super important for maximising battery life on mobile, as well as (obviously) supporting worse network conditions - and it’s effectively a prerequisite for P2P Matrix.  We did a bunch of experiments around it back in &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2019&#x2F;03&#x2F;12&#x2F;breaking-the-100-bps-barrier-with-matrix-meshsim-coap-proxy&quot;&gt;2019&lt;&#x2F;a&gt;, but earlier in the year we needed it &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;element_hq&#x2F;status&#x2F;1418632867626770433&quot;&gt;for real&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;3079&quot;&gt;MSC3079&lt;&#x2F;a&gt; was the result. The low bandwidth dialect which we’ve proposed in the MSC is designed for use on the real Internet using standard IETF protocols (CoAP + DTLS + CBOR) and so isn’t quite as exotic as the 2019 version, but still gives a ~10-20x bandwidth improvement over normal HTTP+JSON based Matrix.  It hasn’t made it to Element yet, but if you’re interested go &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2021&#x2F;06&#x2F;10&#x2F;low-bandwidth-matrix-an-implementation-guide&quot;&gt;check out the blog post&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;p&gt;Secondly, we’ve been sidetracked by the entirety of P2P Matrix.  This is our long-term mission to let Matrix run peer-to-peer without the need for any servers (or indeed Internet connectivity, thanks to Bluetooth Low Energy) by embedding servers such as Dendrite into clients such as Element and so let each Matrix Client have its own personal local homeserver.  We’ve made massive progress over the course of the year on P2P - the biggest breakthroughs being &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2021&#x2F;05&#x2F;06&#x2F;introducing-the-pinecone-overlay-network&quot;&gt;Pinecone&lt;&#x2F;a&gt; as an entirely new P2P overlay network, with the novel SNEK (sequentially networked edwards key) routing topology.  (The animation below shows a P2P network arranging itself into a SNEK!)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;blog&#x2F;img&#x2F;2021-12-22-pinecone.gif&quot; alt=&quot;SNEK&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;You can read all about it in &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2021&#x2F;05&#x2F;06&#x2F;introducing-the-pinecone-overlay-network&quot;&gt;the blog post&lt;&#x2F;a&gt;, but suffice it to say that Pinecone outperformed all the other P2P overlay networks in &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mwarning&#x2F;meshnet-lab&quot;&gt;meshnet-lab&lt;&#x2F;a&gt;’s &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mwarning&#x2F;meshnet-lab&#x2F;tree&#x2F;master&#x2F;tests&#x2F;mobility2&quot;&gt;Mobility2&lt;&#x2F;a&gt; test:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;blog&#x2F;img&#x2F;2021-12-22-pinecone-perf.png&quot; alt=&quot;Pinecone perf benchmarks&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;You can play with P2P Matrix today on iOS and Android (head over to &lt;a href=&quot;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#p2p:matrix.org&quot;&gt;#p2p:matrix.org&lt;&#x2F;a&gt; for builds), but there is some major work still to be done:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;We need to bridge to today’s Matrix network. Right now, having a weird experimental test network for P2P means that in practice nobody actually uses it other than for demos - whereas if you could actually talk to everything else in Matrix, it’d be way more compelling and interesting to use and dogfood.  We’re currently thinking about how best to do this!&lt;&#x2F;li&gt;
&lt;li&gt;We need to standardise the actual transport to be used over Pinecone.  Currently it uses HTTPS over &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Micro_Transport_Protocol&quot;&gt;μTP&lt;&#x2F;a&gt; (purely because empirically it handled packet loss and congestion well, and LB Matrix wasn’t ready at the time).  We’re currently experimenting with switching to LB Matrix using our own CoAP implementation called PineCoAP (potentially using pCoCoA congestion control, given CoAP doesn’t provide any congestion control out of the box), but this is early days.&lt;&#x2F;li&gt;
&lt;li&gt;We still need to finalise store-and-forward: if your destination is offline, do you buffer your transactions in the network somehow, or do you use another Matrix node to buffer them?&lt;&#x2F;li&gt;
&lt;li&gt;Relatedly, we need to tweak federation so that if events get lost, federation for a room can recover more gracefully than it does today - for instance, by bundling redundant auth events on transactions, or by providing more recovery mechanisms.&lt;&#x2F;li&gt;
&lt;li&gt;We still need to spec and implement multihomed accounts, so that your identity on your phone is not divorced from your identity on your laptop.&lt;&#x2F;li&gt;
&lt;li&gt;…and obviously, we need a robust post-beta Dendrite to act as the local homeserver!&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Right now focus is going back to Dendrite for a bit, but P2P work will resume again in the new year :)&lt;&#x2F;p&gt;
&lt;p&gt;Finally, the third big distraction from Dendrite has been… sync v3.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;sync-v3&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#sync-v3&quot; aria-label=&quot;Anchor link for: sync-v3&quot;&gt;🔗&lt;&#x2F;a&gt;Sync v3&lt;&#x2F;h2&gt;
&lt;p&gt;Sync v3 is shaping up to be the single most significant improvement to Matrix since we began.&lt;&#x2F;p&gt;
&lt;p&gt;Syncing data from the homeserver to the client is obviously fundamental to Matrix - and the current behaviour (sync v2) is far from perfect, as it’s designed around the assumption that your client wants to receive information for every room that it’s in.  In the early days of Matrix, this was fine: a typical user might be in tens of conversations, and it’s useful to have them all available for offline access.  Nowadays, however, it’s a disaster: users can easily accumulate hundreds or thousands of rooms - especially with rooms used to describe spaces or profiles and other structured realtime data.  Moreover, the number of rooms you’re in typically increases linearly over time, unbounded, as nobody wants to archive their old conversations.&lt;&#x2F;p&gt;
&lt;p&gt;So, the idea of sync v3 is that you only sync the strict subset of data that your client actually cares about to display in its UI - effectively making both initial and incremental sync instant, incredibly low bandwidth, and completely independent of the number of rooms you’re in (just as filesystem performance should be independent of the number of directories or files present).&lt;&#x2F;p&gt;
&lt;p&gt;For instance, the full initial sync for @matthew:matrix.org in sync v2 is 417MB of JSON uncompressed - or ~100MB if gzipped, and takes about 5 minutes to calculate on matrix.org (during which it murders the sync worker responsible and hammers the database like crazy).  By contrast, sync v3’s initial sync is 15KB uncompressed, or 5106 bytes compressed - and synced in 250 microseconds from a local sync-v3 server.  &lt;strong&gt;Yes folks, that’s somewhere between a 30,000x to 1,200,000x improvement over sync v2, depending on how you count it.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Sync v3 gets this unbelievable performance by the client defining a sliding window into the server’s datasets, sized and ordered as needed for the client’s UI. This effectively performs real-time serverside pagination, so that as the client scrolls around or filters their roomlist or membership list, the client requests new views from the server.  Meanwhile the server sends incremental updates to the client if they intersect with the sliding window.  This may sound unwieldy, but in practice it works fine (although we’ll have some interesting challenges when we get around to encrypting state events, given serverside ordering and filtering will become distinctly harder).  It also doesn’t design out offline access, as the client caches its view of the world so even if you do go offline you can still work with all the data that has sent to your client so far (and the client could even proactively paginate in other content, if it wanted to, similar to an email client synchronising for offline access).&lt;&#x2F;p&gt;
&lt;p&gt;Sync v3 exists today as a proxy called &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;sync-v3&quot;&gt;sync-v3&lt;&#x2F;a&gt; which sits between any existing homeserver and a sync-v3-capable Matrix client.  It’s very early days, but Hydrogen has &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vector-im&#x2F;hydrogen-web&#x2F;compare&#x2F;kegan&#x2F;syncv3&quot;&gt;basic v3 support&lt;&#x2F;a&gt; on a branch which we’ve been using to experiment with the API and flesh it out - and you can see a demo and intro talk in &lt;a href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;Hsyqa5ozWIo?t=59&quot;&gt;last week’s Matrix Live&lt;&#x2F;a&gt;!&lt;&#x2F;p&gt;
&lt;noscript&gt;
  Today&#x27;s Matrix Live:
  &lt;a href=&quot;https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=Hsyqa5ozWIo?t=59&quot;&gt;
    https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=Hsyqa5ozWIo?t=59
  &lt;&#x2F;a&gt;
&lt;&#x2F;noscript&gt;
&lt;youtube-player video-id=&quot;Hsyqa5ozWIo?t=59&quot;&gt;&lt;&#x2F;youtube-player&gt;
&lt;p&gt;The API itself is still in flux, but those interested can see the initial spec design at &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;sync-v3&#x2F;blob&#x2F;main&#x2F;api.md&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;sync-v3&#x2F;blob&#x2F;main&#x2F;api.md&lt;&#x2F;a&gt; and also an MSC is emerging at &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;blob&#x2F;kegan&#x2F;sync-v3&#x2F;proposals&#x2F;3575-sync.md&quot;&gt;MSC3575&lt;&#x2F;a&gt;.  Next steps will be to finish hooking up to Hydrogen (including filtering the room list), finish the MSC, and then start thinking about implementing it in other clients and servers!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;fast-joins-over-federation&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#fast-joins-over-federation&quot; aria-label=&quot;Anchor link for: fast-joins-over-federation&quot;&gt;🔗&lt;&#x2F;a&gt;Fast Joins over Federation&lt;&#x2F;h2&gt;
&lt;p&gt;While we’re on the subject of speeding up Matrix… it’s all very well being able to sync your client instantly, but the other big complaint everyone has about Matrix is how long it takes to join rooms - especially big ones.  As most people will know, it can easily take 5-10 minutes to join a large room like Matrix HQ on a new homeserver - and given this is the first experience most users have of running their own homeserver, it can prove pretty disastrous and we are determined to fix it.  It will become even more relevant when we implement peeking over federation, as the last thing you want is to have to wait 5 minutes to temporarily dip into some random federated room to see if you want to join it or not (or to sniff its room state for things like extensible profiles or &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;2313&quot;&gt;MSC2313&lt;&#x2F;a&gt; reputation rooms).&lt;&#x2F;p&gt;
&lt;p&gt;So, to address this, we’re currently in the middle of experimenting with &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;2775&quot;&gt;MSC2775&lt;&#x2F;a&gt; (Lazyloading over Federation) in Synapse. This MSC lets servers participate in a room before they’ve received the full room state by defining a subset of state which is mandatory for participation, and then letting the rest get added lazily.  It’s quite a violent change as it means the assumption that room state is complete (to the best of the server’s knowledge) is no longer true - but given Matrix already has to handle incomplete room state, it’s not necessarily a showstopper.&lt;&#x2F;p&gt;
&lt;p&gt;Watch this space for how well it works in practice, but we’re hoping for a ~20x speed improvement in joining Matrix HQ.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hydrogen&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#hydrogen&quot; aria-label=&quot;Anchor link for: hydrogen&quot;&gt;🔗&lt;&#x2F;a&gt;Hydrogen&lt;&#x2F;h2&gt;
&lt;p&gt;2021 has been a busy year for Hydrogen - our ultra-lightweight Matrix Client, which provides a small but perfectly formed progressive web app for us to experiment on! There have been no fewer than 56 releases over the course of the year, with loads of contributions from Bruno, Midhun (who joined first as a GSOCcer and then as a fulltime Element employee) and also Danila who interned at Element on Hydrogen over the summer.&lt;&#x2F;p&gt;
&lt;p&gt;People often ask why Hydrogen exists as well as Element Web - and the reason is because Element Web is (for now at least) very far from a progressive web app and is stuffed full of features, whereas Hydrogen is intended to be as lightweight and simple and efficient as possible while also targeting as wide a range of web browsers as possible (even Internet Explorer!).  It also provides a simpler platform for experimenting with new approaches such as sync v3 or OIDC without getting entangled in the constant hive of activity around Element Web.  Finally, it gives us a playground to experiment with embeddable chat clients thanks to Hydrogen’s strict &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Model%E2%80%93view%E2%80%93viewmodel&quot;&gt;MVVM&lt;&#x2F;a&gt; component model.&lt;&#x2F;p&gt;
&lt;p&gt;In terms of features, 2021 has seen huge steps forwards as Hydrogen converges on feature parity with Element - proper mentions and replies; rich formatted linkified messages; reactions; redactions; memberlist; member info; webpush notifications; proper image, video &amp;amp; file uploads; SSO login; sync v3(!) and so much more. Can’t wait to see what 2022 will bring!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;end-to-end-encryption&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#end-to-end-encryption&quot; aria-label=&quot;Anchor link for: end-to-end-encryption&quot;&gt;🔗&lt;&#x2F;a&gt;End-to-End Encryption&lt;&#x2F;h2&gt;
&lt;p&gt;2021 saw the long-awaited creation of a dedicated cryptography team to focus exclusively on improving encryption in Matrix: previously encryption expertise was split across various different areas, meaning that it could prove hard to carve out time to tackle the bigger remaining encryption challenges.&lt;&#x2F;p&gt;
&lt;p&gt;So far the team has been busy digging deep into the few remaining causes of UISIs (undecryptable messages), including automated UISI reporting and tracing E2EE flows end-to-end (from client to server to server to client).  There’s also been an initial wave of UX work - with much more to come next year as we overhaul cross-signing and device backups to make it way more user friendly.&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile, on the more foundational side of things, we’re continuing to define Decentralised MLS as a potential next-generation form of end-to-end encryption, building on the IETF’s &lt;a href=&quot;https:&#x2F;&#x2F;datatracker.ietf.org&#x2F;wg&#x2F;mls&#x2F;about&#x2F;&quot;&gt;MLS&lt;&#x2F;a&gt; work - providing much better scalability for large chat rooms and potentially helping with some causes of encryption failures.  Hubert (uhoreg) has been leading the charge here, with his &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.matrix.org&#x2F;matrix-org&#x2F;mls-ts&#x2F;-&#x2F;blob&#x2F;decentralised2&#x2F;decentralised.org&quot;&gt;latest thoughts emerging here&lt;&#x2F;a&gt; alongside a &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=UiUyWZg3J7k&quot;&gt;brand new demo&lt;&#x2F;a&gt; showing his &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.matrix.org&#x2F;uhoreg&#x2F;mls-demo&quot;&gt;DMLS simulator&lt;&#x2F;a&gt; - which under the hood is actually sending real Matrix events over DMLS!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;img src=&quot;&#x2F;blog&#x2F;img&#x2F;2021-12-22-dmls.png&quot; alt=&quot;DMLS&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Otherwise, the team has had three big projects: adding matrix-rust-sdk-crypto into Element Android (which we already covered above), arranging a fresh security audit of Matrix’s end-to-end encryption (due to complete January 2022)… and, most excitingly: vodozemac.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;vodozemac&quot;&gt;Vodozemac&lt;&#x2F;a&gt; (pronounced roughly vod-oz-eh-matz) is an entirely new implementation of our Olm and Megolm end-to-end encryption system, written from scratch in pure Rust, aiming to replace the original reference C&#x2F;C++11 implementation in &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.matrix.org&#x2F;matrix-org&#x2F;olm&quot;&gt;libolm&lt;&#x2F;a&gt;.  Originally written as an &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-rust-sdk&#x2F;compare&#x2F;vodozemac-bench&quot;&gt;experiment for matrix-rust-sdk&lt;&#x2F;a&gt; at the beginning of the year, in the last week it’s received a &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;vodozemac&#x2F;graphs&#x2F;contributors&quot;&gt;huge explosion of attention&lt;&#x2F;a&gt; from poljar and dkasak to bring it up to production quality… for we decided that if we are doing a full E2EE audit for Matrix, we should target the new and future codebase rather than burn money on re-auditing the legacy libolm library (much as the &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2016&#x2F;11&#x2F;21&#x2F;matrixs-olm-end-to-end-encryption-security-assessment-released-and-implemented-cross-platform-on-riot-at-last&quot;&gt;original 2016 review of libolm&lt;&#x2F;a&gt; happened when the library was fresh and new).&lt;&#x2F;p&gt;
&lt;p&gt;The motivation for vodozemac in general is to benefit from the intrinsic type and memory safety and fearless parallelism provided by Rust - and also maintain full type &amp;amp; memory safety throughout the matrix-rust-sdk stack, including encryption.  Over the last year we’ve been taking &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2021&#x2F;06&#x2F;14&#x2F;adventures-in-fuzzing-libolm&quot;&gt;more and more of a careful look at libolm&lt;&#x2F;a&gt;, and despite our best efforts a &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2021&#x2F;12&#x2F;13&#x2F;disclosure-buffer-overflow-in-libolm-and-matrix-js-sdk&quot;&gt;few&lt;&#x2F;a&gt; memory management bugs have crept in - which vodozemac should be immune to.  Vodozemac will solve another embarrassing problem with libolm: that its default cryptography primitives are designed for correctness rather than performance or safety.  By switching to Rust’s ed25519-dalek and rustCrypto AES primitives we should be in a much better position in terms of performance and safety.&lt;&#x2F;p&gt;
&lt;p&gt;Next up, we’ll be fully integrating vodozemac into matrix-rust-sdk, and figuring out how best to provide it as a libolm replacement in general.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;matrix-security&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#matrix-security&quot; aria-label=&quot;Anchor link for: matrix-security&quot;&gt;🔗&lt;&#x2F;a&gt;Matrix Security&lt;&#x2F;h2&gt;
&lt;p&gt;Alongside the new Cryptography team we’ve also established a new dedicated Security team for Matrix, led by dkasak.  As well as &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2021&#x2F;06&#x2F;14&#x2F;adventures-in-fuzzing-libolm&quot;&gt;fuzzing excursions&lt;&#x2F;a&gt; into libolm and similar research, Denis has been handling all our &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;security-disclosure-policy&quot;&gt;security disclosure policy&lt;&#x2F;a&gt; submissions, managing the &lt;a href=&quot;https:&#x2F;&#x2F;blog.intigriti.com&#x2F;matrix&#x2F;&quot;&gt;Intigriti bug bounty&lt;&#x2F;a&gt; programme, helping coordinate all our security releases, and coordinating the upcoming external independent security audit of vodozemac, matrix-rust-sdk, Element and Synapse.  It’s a huge step forwards to be able to fund full-time infosec researchers to focus exclusively on Matrix, and this is just the beginning!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;trust-and-safety&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#trust-and-safety&quot; aria-label=&quot;Anchor link for: trust-and-safety&quot;&gt;🔗&lt;&#x2F;a&gt;Trust and Safety&lt;&#x2F;h2&gt;
&lt;p&gt;Another place where we’ve created a dedicated team this year is around Trust &amp;amp; Safety: building tools to fight spam and abuse on our own servers, while also empowering the wider network of users, moderators and admins to manage abuse as they see fit.  This includes lots of work on Mjolnir, our primary moderation bot, but also defining MSCs such as &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;3215&quot;&gt;MSC3215&lt;&#x2F;a&gt; (Aristotle: Moderation in all things) and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;3531&quot;&gt;MSC3531&lt;&#x2F;a&gt; (Letting moderators hide messages pending moderation) and internal tooling as we experiment with different approaches.&lt;&#x2F;p&gt;
&lt;p&gt;We’ll have more updates on this in the coming year as we release the tools we’ve been working on, but suffice it to say that the goal is to empower mainstream users in the wider Matrix network to apply their own rules as they see fit, directly from the comfort of their favourite Matrix client - without having to know what a Mjolnir is (or how to run one), and without having to be a moderation expert.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;openid-connect&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#openid-connect&quot; aria-label=&quot;Anchor link for: openid-connect&quot;&gt;🔗&lt;&#x2F;a&gt;OpenID Connect&lt;&#x2F;h2&gt;
&lt;p&gt;A new project brewing throughout 2021 has been the investigation into replacing the entirety of Matrix’s authentication APIs with industry standard OpenID Connect.  Spearheaded by Quentin, this has proved to be a fascinating and challenging endeavour, but we’re starting to see some really interesting results.  The problem we’re trying to solve here is:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;As Matrix grows, we’re seeing more and more clients and services appearing which you might want to log into with your Matrix account.  But do you really want to trust each app with your account password?  And what if you only want to give it access to a small subset of your account?&lt;&#x2F;li&gt;
&lt;li&gt;Similarly, we’re seeing more and more login mechanisms used to access Matrix - it’s no longer just a matter just a username + password; many servers use single-sign-on (e.g. mozilla.org) or social login (fosdem.org, matrix.org), or layer on 2FA or MFA hardware tokens and similar to access their accounts via an SSO provider.  We also see passwordless login on the horizon.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;So, do we really want to mandate each new Matrix client to have to implement custom flows to handle this explosion of login&#x2F;registration mechanisms?  And is it even really the client’s problem in the first place?  You’re securing access to your account on your chosen server, which isn’t really a client-specific thing at all.&lt;&#x2F;p&gt;
&lt;p&gt;The real turning point for the project however has been our recent experiences building out a new wave of single-use domain-specific clients (see below) for video conferencing, whiteboarding, metaverse-browsing etc… where by &lt;em&gt;far&lt;&#x2F;em&gt; the most painful bit of the project has been hooking up the UI for login, registration, guest access, incremental signup, password reset, email verification, CAPTCHA, SSO, etc.  And that’s even when building on top of matrix-react-sdk, which theoretically has it all already thanks to Element Web!&lt;&#x2F;p&gt;
&lt;p&gt;Frankly, it has become blindingly obvious that it’s crazy for clients to reimplement this every time, and they should instead chuck the user over to a sign-on portal provided by their homeserver - just like Google and everyone else’s single-sign-on does.  And rather than inventing our own homebrew way of doing that, we should just use the existing industry standard SSO best practices defined by OpenID Connect.&lt;&#x2F;p&gt;
&lt;p&gt;The main objections which have come up against this are: “what if my Matrix client doesn’t have a web browser, or what if I want to provide my own native login UI”, and “does this design out the idea of using a single password to access your account as well as your E2EE history”?  In both instances, we have workarounds: in practice, there are so many Matrix clients around that we won’t be removing today’s legacy login&#x2F;registration APIs any time soon (just like HTTP Basic Auth is still very much a thing on the web!).  And in terms of “cryptographic login”, there are ways we could daisychain the auth required to unlock your E2EE storage to also authenticate you with your server - although this would be a major extension (much as cryptographic login is already today!)&lt;&#x2F;p&gt;
&lt;p&gt;The current status is that we’ve defined a set of initial MSCs (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;2964&quot;&gt;MSC2964&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;2965&quot;&gt;MSC2965&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;2966&quot;&gt;MSC2966&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;2967&quot;&gt;MSC2967&lt;&#x2F;a&gt;), and are implementing an initial Open ID Connect auth server (in Rust!) called &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-authentication-service&quot;&gt;matrix-authentication-service&lt;&#x2F;a&gt; (better name suggestions welcome!) designed to sit alongside your homeserver, and we’re experimenting with hooking &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;sandhose&#x2F;hydrogen-web&#x2F;tree&#x2F;sandhose&#x2F;oidc-login&quot;&gt;Hydrogen&lt;&#x2F;a&gt; (and some of the new domain-specific clients) up to see how it feels.  But if it goes as well as we think it might, folks should prepare for 2022 to be the year where Matrix’s authentication system finally gets fixed!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;native-matrix-video-voip-conferencing&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#native-matrix-video-voip-conferencing&quot; aria-label=&quot;Anchor link for: native-matrix-video-voip-conferencing&quot;&gt;🔗&lt;&#x2F;a&gt;Native Matrix Video&#x2F;VoIP Conferencing&lt;&#x2F;h2&gt;
&lt;p&gt;One of the most anticipated features in Matrix over the years has been the prospect of native, decentralised, end-to-end encrypted video and voice conferencing.  Today, voice and video conferencing in Matrix works by embedding Jitsi as a third party centralised service into your chatroom.  This works fairly well - but Jitsi is an entirely separate service with lots of moving parts, and its own concept of users and access control (provided by XMPP!) and its megolm-based end-to-end-encryption doesn’t actually integrate with Matrix’s own Olm identities, verification or cross-signing.  The fact that the conference is then logically centralised on whoever is hosting the Jitsi service also misses one Matrix’s main goals - that users should be able to hold a conversation without being dependent on any single service or provider.  Plus it’s really confusing that Matrix has proper native 1:1 calls for DMs… but then switches to a totally different system in group chats.&lt;&#x2F;p&gt;
&lt;p&gt;So, this year we set out to fix it - and succeeded :D  The solution hinges around &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;blob&#x2F;matthew&#x2F;group-voip&#x2F;proposals&#x2F;3401-group-voip.md&quot;&gt;MSC3401&lt;&#x2F;a&gt; - a spec proposal that describes how to extend native 1:1 calls to work for groups, while providing real flexibility on how to actually mix the calls together.  At the simplest extreme, it defines how full mesh calls work (where every client simply calls every other client simultaneously) - but then also defines how you can mix calls together either using a single focus (conferencing server) or multiple foci run by different parties, where foci can either be Selective Forwarding Units (SFUs, like Jitsi) or Multipoint Conferencing Units (MCUs, like FreeSWITCH).  The end result is to give us decentralised, cascading, end-to-end encrypted conferencing which even has direct compatibility with today’s 1:1 Matrix calling, letting you easily hook in bots and bridges which already support 1:1 Matrix calls!&lt;&#x2F;p&gt;
&lt;p&gt;Robert Long has been frantically hacking away at the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vector-im&#x2F;matrix-video-chat&quot;&gt;initial implementation&lt;&#x2F;a&gt; over the last few months, fleshing out full-mesh conferencing at first and getting it running in as many browsers as possible (including Mobile Safari and Chrome Android!).  We were hoping to fully unveil the end result in time for Christmas, but in practice we hit some last minute snags (turns out Matthew forgot guest users can’t use TURN, who knew? so much for incremental login! 😰) which have pushed the launch to early next year.  But hopefully in a few weeks, you’ll be able to start jumping on a native group call in Matrix!&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile, those interested can see all the gory details from our CommCon 2021 talk a few weeks ago, complete with a demo of the shape of things to come…&lt;&#x2F;p&gt;
&lt;noscript&gt;
  Today&#x27;s Matrix Live:
  &lt;a href=&quot;https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=A4k7DVIK5TE&quot;&gt;
    https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=A4k7DVIK5TE
  &lt;&#x2F;a&gt;
&lt;&#x2F;noscript&gt;
&lt;youtube-player video-id=&quot;A4k7DVIK5TE&quot;&gt;&lt;&#x2F;youtube-player&gt;
&lt;p&gt;Next up, we’ll be working on building an &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;3401&quot;&gt;MSC3401&lt;&#x2F;a&gt;-compatible SFU so we can go beyond full mesh (which typically supports a maximum of ~7 callers).  Our candidates right now are mediasoup, ion-sfu, janus and signal-calling-service - we’ll let you know how it goes!  Also, if you’re interested in helping us build this out quicker, we are frantically searching for more WebRTC &amp;amp; VoIP gurus to &lt;a href=&quot;https:&#x2F;&#x2F;apply.workable.com&#x2F;elementio&#x2F;j&#x2F;25BB112FBD&#x2F;&quot;&gt;join the team at Element&lt;&#x2F;a&gt; working on this.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;applications-beyond-chat&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#applications-beyond-chat&quot; aria-label=&quot;Anchor link for: applications-beyond-chat&quot;&gt;🔗&lt;&#x2F;a&gt;Applications Beyond Chat&lt;&#x2F;h2&gt;
&lt;p&gt;Finally, 2021 was the year where we seriously started building out functionality on Matrix which goes far beyond plain old chat rooms.&lt;&#x2F;p&gt;
&lt;p&gt;Work began in the summer as a research project led by Ryan, formerly tech lead for Element Web - looking at ways to store hierarchical structured data into Matrix while preserving real-time semantics; effectively using Matrix as a collaborative decentralised object tree, providing CRDT (Conflict-free Replicated Data Types) to allow richer applications to be built on Matrix.  This journey led him to create &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;patience&quot;&gt;Patience&lt;&#x2F;a&gt; as a test environment for building out these sort of clients, and meanwhile Timo (famous of &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;toger5&#x2F;TheBoard&quot;&gt;The Board&lt;&#x2F;a&gt;) joined the team to build out &lt;a href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;Hsyqa5ozWIo?t=1054&quot;&gt;Full Screen Widgets&lt;&#x2F;a&gt; in Element, providing a much better UI for beyond-chat experiments.&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile, Matthew Weidner and the Composable Systems Lab at CMU stunned us all by presenting a complete CRDT solution using Matrix named &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;composablesys&#x2F;collabs&quot;&gt;Collabs&lt;&#x2F;a&gt; at &lt;a href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;Exr0iY_D-vw?t=382&quot;&gt;Strange Loop 2021&lt;&#x2F;a&gt;.  This is &lt;em&gt;really&lt;&#x2F;em&gt; impressive stuff - the brave of heart can go and embed a Matrix-powered end-to-end-encrypted collaborative markdown editor straight into Element via Collabs by following the &lt;a href=&quot;https:&#x2F;&#x2F;compoventuals-tests.herokuapp.com&#x2F;&quot;&gt;instructions here&lt;&#x2F;a&gt;.  In practice, Collabs works by serialising the CRDT updates as base64 blobs inside Matrix timeline events (hello &lt;a href=&quot;https:&#x2F;&#x2F;svn.apache.org&#x2F;repos&#x2F;asf&#x2F;incubator&#x2F;wave&#x2F;whitepapers&#x2F;federation&#x2F;wavespec.html#anchor35&quot;&gt;Wave&lt;&#x2F;a&gt;, is that you?), but we’re now investigating how you might reconcile this with maintaining a proper realtime object tree in Matrix.&lt;&#x2F;p&gt;
&lt;p&gt;It’s hard to overstate how powerful storing freeform tree CRDTs in Matrix would be.  It could open up everything from decentralised encrypted collaborative document editing to collaborative whiteboarding and collaborative &lt;a href=&quot;https:&#x2F;&#x2F;figma.com&#x2F;&quot;&gt;Figma&lt;&#x2F;a&gt;-style (or &lt;a href=&quot;https:&#x2F;&#x2F;penpot.app&#x2F;&quot;&gt;Penpot&lt;&#x2F;a&gt;- or &lt;a href=&quot;https:&#x2F;&#x2F;www.blender.org&#x2F;&quot;&gt;Blender&lt;&#x2F;a&gt;-style) design.  You could even start storing an HTML DOM into a room, alongside its binary assets, giving you a multiplayer DOM to build on… and then imagine if you could store the &lt;a href=&quot;https:&#x2F;&#x2F;developer.mozilla.org&#x2F;en-US&#x2F;docs&#x2F;WebAssembly&#x2F;Understanding_the_text_format&quot;&gt;syntax tree&lt;&#x2F;a&gt; of the code operating on that DOM alongside it, in the same room.  Before you know it, we will have created kind of some incredible &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Smalltalk&quot;&gt;Smalltalk&lt;&#x2F;a&gt; &#x2F; &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Croquet_Project&quot;&gt;Croquet&lt;&#x2F;a&gt; &#x2F; &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Alan_Kay&quot;&gt;Alan Kay&lt;&#x2F;a&gt; nirvana where code is data and data is code and it’s all running live in some kind of decentralised encrypted multiplayer Metaverse :D&lt;&#x2F;p&gt;
&lt;p&gt;While we’ve been looking at storing object trees in Matrix, another obvious angle that has emerged is to use Matrix for encrypted decentralised file storage. &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;3089&quot;&gt;MSC3089&lt;&#x2F;a&gt; is a proposal on how you might represent hierarchies of files in Matrix - where each room acts effectively as a directory of files, with spaces forming a directory structure (much as they do already in today’s Matrix), leveraging Matrix’s existing decentralised access control mechanisms to control who can access what.  Combine such a file storage system with the collaborative editing capabilities mentioned above, and suddenly a really exciting proposition starts to emerge.  We’re investigating this right now, and all will be revealed early next year…&lt;&#x2F;p&gt;
&lt;p&gt;Finally, and last but not least, Robert Long has been building on top of our shiny new Native Matrix Voice&#x2F;Video Conferencing capabilities to use Matrix as the communication backbone for a truly open, equitable and interoperable vision of the Metaverse.  The best way of describing it is to look at his awesome &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=e26UJRCGfGk&amp;amp;t=2263s&quot;&gt;Third Room demo from the Open Metaverse Interoperability Group demo session&lt;&#x2F;a&gt; in September:&lt;&#x2F;p&gt;
&lt;noscript&gt;
  Today&#x27;s Matrix Live:
  &lt;a href=&quot;https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=e26UJRCGfGk?t=2263s&quot;&gt;
    https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=e26UJRCGfGk?t=2263s
  &lt;&#x2F;a&gt;
&lt;&#x2F;noscript&gt;
&lt;youtube-player video-id=&quot;e26UJRCGfGk?t=2263s&quot;&gt;&lt;&#x2F;youtube-player&gt;
&lt;p&gt;Now, some folks will recall that since day one (in fact, since before day one) the hope for Matrix was that it might end up as the communications fabric of the Metaverse.  We were about 4 years early when we &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2017&#x2F;04&#x2F;04&#x2F;opening-up-cyberspace-with-matrix-and-webvr&quot;&gt;first starting enthusing about this&lt;&#x2F;a&gt;, and then still ahead of our time when we did the world’s first &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2018&#x2F;02&#x2F;05&#x2F;3-d-video-calling-with-matrix-webrtc-and-webvr-at-fosdem-2018&quot;&gt;3D Video calling&lt;&#x2F;a&gt; over Matrix.  However, it now feels like the world has finally caught up - and we’re in grave danger of being overtaken by a dystopia where the big tech companies balkanize the Metaverse into a series of closed proprietary user-exploiting walled gardens, much like today’s incumbent chat silos - but even worse.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;This is our chance to fix it before it’s too late&lt;&#x2F;strong&gt;, and &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;careers&quot;&gt;Element is funding a small but highly targeted team&lt;&#x2F;a&gt; to focus exclusively on building out open interoperable Metaverse over Matrix - ensuring that collaboration in 3D (and 2D) spatial environments in future is decentralised, secure and standards-based.  This obviously ties in directly with the rest of the Beyond Chat projects listed above: it’s early days, but it’s incredibly exciting to imagine where we could end up if this works!&lt;&#x2F;p&gt;
&lt;p&gt;Finally, a question which has kept coming up while working on Beyond Chat projects has been whether to implement this new functionality as Matrix widgets, bake them into existing Matrix clients, or build them as domain-specific dedicated Matrix clients.  But perhaps we’re thinking about this all wrong: what if your Matrix client was just a browser for Matrix rooms?  Some of these could be chatrooms.  Some of these could be VoIP&#x2F;Video conferences or Discord-style voice&#x2F;video rooms.  Some of these could be message boards or mailing lists.  Some of these could be collaborative editors or whiteboards.  Some of these could be 3D views into the metaverse.  Some of these could be rendered via widgets; some could be rendered natively if the client knows how.  And some of these could even be good old web pages(!!!).&lt;&#x2F;p&gt;
&lt;p&gt;Imagine if your Matrix client was effectively a genuine browser of arbitrary decentralised realtime content?  If your view into a Matrix room was just that: a full window view into that room, be it textual or 2D or 3D - and your Matrix client was just a browser which added the necessary chrome and navigation to help you tab between rooms, login and logout, manage your encryption, track who’s in the room, track your notifications, etc.?&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile, if you’re in a web browser, you might hop into a lightweight single-page domain-specific webapp which happens to use Matrix for collaboration.  Or if you’re in a Matrix client&#x2F;browser, you could hop to the same matrix URL to get at the same functionality with all the supporting chrome and UI overlays sliding in as needed…&lt;&#x2F;p&gt;
&lt;p&gt;Perhaps the vision of Matrix as the missing communication layer of the open Web is more literal than we ever thought.  Eitherway, it will be fascinating to see how Applications Beyond Chat evolves over the next year.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;2022&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#2022&quot; aria-label=&quot;Anchor link for: 2022&quot;&gt;🔗&lt;&#x2F;a&gt;2022&lt;&#x2F;h2&gt;
&lt;p&gt;Now, I dare you to cross-reference all of the above with &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2020&#x2F;12&#x2F;25&#x2F;the-matrix-holiday-special-2020#2021&quot;&gt;last year’s predictions for 2021&lt;&#x2F;a&gt; to see how we did :D In practice, the only things from the list we haven’t got to are peeking-over-federation (although arguably fast joins are a key part of that), account portability, and restoring incremental sign-up (although our new clients have it!).&lt;&#x2F;p&gt;
&lt;p&gt;So, here go the predictions for 2022 (keeping it short, otherwise it’ll be 2023 before this blog post gets finished…):&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Client polish and performance&lt;&#x2F;strong&gt; - our prime directive is to ensure that Matrix clients can be built with UX polish and quality which exceeds our centralised alternatives.  In practice, this means:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Element must spark joy&lt;&#x2F;strong&gt;.  Ensuring Element’s Information Architecture continues to be simplified and refined, and that &lt;em&gt;nobody&lt;&#x2F;em&gt; who knows how to use a computer hits a WTF moment when first using the app.  Never again do we want to see someone on Twitter saying “I have no idea how to use Matrix”.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Instant launch&lt;&#x2F;strong&gt;.  With Sync v3 and matrix-rust-sdk we hope to make Element launch instantly on all platforms - including initial sync.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Fast joins&lt;&#x2F;strong&gt;.  We should never get bored while waiting to join a room or accept an invite.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Spaces&lt;&#x2F;strong&gt;.  While Spaces are already a huge improvement in letting users organise and discover rooms, there’s still much more to be done:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Flair&lt;&#x2F;strong&gt; - Users who are members of a space should be able to announce it loud and proud with a Flair badge on their avatar, like we used to with the old pre-spaces Communities feature (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;3219&quot;&gt;MSC3219&lt;&#x2F;a&gt; being the potential proposal).&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Synchronising access controls&lt;&#x2F;strong&gt; - You should be able to apply access controls based on whether a user is a member of a given group (so that if you invite them to #moderators:example.com, they automatically get made moderator in all the rooms in a given space).  It looks likely that this will be implemented at last using joepie91’s &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;3216&quot;&gt;MSC3216&lt;&#x2F;a&gt; proposal for Synchronized access control for Spaces (rather than Matthew’s original &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;2962&quot;&gt;MSC2962&lt;&#x2F;a&gt; - an excellent example of the community steering the spec process :)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Bulk joins&lt;&#x2F;strong&gt; - It should be a one-button operation to join all the rooms in a space.&lt;&#x2F;li&gt;
&lt;li&gt;**Subspaces **- as more and more spaces emerge, the ability to navigate them as a hierarchy becomes more and more useful.  We want to get to the point where we can turn off the Matrix.org public rooms list, and instead present a Space tree of all the good rooms we know about in Matrix… delegating over curation to the wider community; building a huge USENET-style hierarchy of where to go in Matrix.  To do that, we need subspaces to sing!&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Removing communities&#x2F;groups&lt;&#x2F;strong&gt;, which will then be entirely superseded by spaces.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;**Threads **go-live!&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Location share&lt;&#x2F;strong&gt; go-live&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Pinned messages&lt;&#x2F;strong&gt;, so the most important messages are always visible to everyone n the room&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Starred messages&lt;&#x2F;strong&gt;, so you never lose a message ever again&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Custom emoji&lt;&#x2F;strong&gt;, finally merging in all the custom emoji work from the community.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;matrix-rust-sdk&lt;&#x2F;strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Element iOS on rust-sdk&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Element Android on rust-sdk-crypto&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;…and experiment to see how matrix-rust-sdk feels on Web? It’s a real shame that &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;daydream-mx&#x2F;Daydream&quot;&gt;Daydream&lt;&#x2F;a&gt; got archived…&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Encryption&lt;&#x2F;strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Vodozemac&lt;&#x2F;strong&gt; in matrix-rust-sdk, maybe even elsewhere.&lt;&#x2F;li&gt;
&lt;li&gt;**Updated E2EE Audit **spanning vodozemac, olm+megolm, matrix-rust-sdk… and a representative sample of a typical Element+Synapse deployment.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;DMLS&lt;&#x2F;strong&gt; - getting to the point where we can experiment with it in real clients.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Encryption Agility&lt;&#x2F;strong&gt; - the ability to &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;issues&#x2F;3516&quot;&gt;migrate encrypted history&lt;&#x2F;a&gt; is going to become really important as we evolve our E2EE, whether that’s by adding in post-quantum algorithms, or moving from Megolm to MLS, or any other shifts.  We will need to start thinking about it in 2022.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Next-generation MSCs&lt;&#x2F;strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Aggregations&lt;&#x2F;strong&gt; - finalising the foundational MSCs for aggregations, at last&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Extensible events&lt;&#x2F;strong&gt; - finalising the foundational MSCs for extensible events, at last&lt;&#x2F;li&gt;
&lt;li&gt;**Sync v3 **- finalising the MSC and implementing it in matrix-rust-sdk&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Fast joins&lt;&#x2F;strong&gt; - getting them implemented in Synapse and Dendrite&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Peeking over federation&lt;&#x2F;strong&gt; - getting them implemented in Synapse and Dendrite&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Extensible profiles&lt;&#x2F;strong&gt; - who needs a facebook wall when you have a profile room on Matrix?&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Open ID Connect&lt;&#x2F;strong&gt; - using OIDC as an alternative auth mechanism for new clients.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Gitter parity&lt;&#x2F;strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Importing the Gitter archives into Matrix&lt;&#x2F;strong&gt; via &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;2716&quot;&gt;MSC2716&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Implementing excellent public static Matrix archives&lt;&#x2F;strong&gt; (replacing both view.matrix.org and gitter.im’s static views)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Transfiguring Gitter into a Gitter-themed Element&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Dendrite&lt;&#x2F;strong&gt;
&lt;ul&gt;
&lt;li&gt;**Parity with Synapse **- and out of beta, with any luck!&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;P2P Matrix&lt;&#x2F;strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Exposing the normal Matrix network via P2P!&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Multihomed accounts&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Store and forward&lt;&#x2F;strong&gt; (if only by relaying via other P2P Matrix nodes)&lt;&#x2F;li&gt;
&lt;li&gt;**Low bandwidth transports **- via PineCoAP or similar&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Making federation robust in a highly disconnected network.&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Hydrogen&lt;&#x2F;strong&gt;
&lt;ul&gt;
&lt;li&gt;**Daily Driver **- making sure that Hydrogen can be readily used as a daily driver Matrix client, even if it lacks full parity with Element.&lt;&#x2F;li&gt;
&lt;li&gt;**Embeddable Hydrogen **- making the most of Hydrogen as a tiny lightweight PWA to embed it into existing websites.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Bots and Bridges&lt;&#x2F;strong&gt;
&lt;ul&gt;
&lt;li&gt;**Landing End-to-Bridge-Encryption **for all existing matrix-appservice-bridge based bridges&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;All the integrations!&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;First-class UI for configuring integrations!&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Trust &amp;amp; Safety&lt;&#x2F;strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Empower users to manage abuse within their communities&lt;&#x2F;strong&gt;.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Native Group Voice&#x2F;Video Conferencing&lt;&#x2F;strong&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Launch a standalone conferencing app!&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Build a &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;3401&quot;&gt;MSC3401&lt;&#x2F;a&gt;-capable SFU&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Add native group calling to Element&lt;&#x2F;strong&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Border gateways&lt;&#x2F;strong&gt;
&lt;ul&gt;
&lt;li&gt;Something we didn’t mention in 2021 is the increasing interest in building border gateways and hardware cross domain gateways to safely link different Matrix federations together.  We expect to see a lot of activity in this space in 2022, and there should be some new MSCs too :)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Beyond Chat&lt;&#x2F;strong&gt;
&lt;ul&gt;
&lt;li&gt;**Metaverse on Matrix **- building out the dream as per above!&lt;&#x2F;li&gt;
&lt;li&gt;**Collaborative editing **- extending Matrix to store trees of events, and collaborate on them in realtime - starting with a collaborative editor!&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;File storage in Matrix&lt;&#x2F;strong&gt; - building out real-life file storage on top of Matrix.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;So, there you have it. If you’ve got this far… it’s incredible; you’re amazing: thank you for reading!  The sheer length of this update shows just how much Matrix has grown in 2021 relative to previous years; it’s frankly terrifying to imagine how long the equivalent post will be next year.  We may have to change the format a little :)&lt;&#x2F;p&gt;
&lt;p&gt;And that’s a wrap for 2021: we hope you stay safe and have an excellent end of the year.  Huge thanks for flying Matrix and supporting the project - we literally wouldn’t be here without you.&lt;&#x2F;p&gt;
&lt;p&gt;- Matthew, Amandine &amp;amp; the whole Matrix core team.&lt;&#x2F;p&gt;
</content>
</entry>

    
<entry xml:lang="en">
    <title>The Matrix Holiday Special 2020</title>
    <published>2020-12-25T04:26:00+00:00</published>
    <updated>2020-12-25T04:26:00+00:00</updated>
    <author>
      <name>Matthew Hodgson</name>
    </author>
    <link rel="alternate" href="https://c956b204.matrix-website.pages.dev/blog/2020/12/25/the-matrix-holiday-special-2020/" type="text/html"/>
    <id>https://c956b204.matrix-website.pages.dev/blog/2020/12/25/the-matrix-holiday-special-2020/</id>
    <content type="html">&lt;p&gt;Hi all,&lt;&#x2F;p&gt;
&lt;p&gt;Over the years it’s become a tradition to write an end-of-year wrap-up on Christmas Eve, reviewing all the things the core Matrix team has been up over the year, and looking forwards to the next (e.g. here’s &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2019&#x2F;12&#x2F;24&#x2F;the-2019-matrix-holiday-update&quot;&gt;last year’s edition&lt;&#x2F;a&gt;).  These days there’s so much going on in Matrix it’s impossible to cover it all (and besides, we now have &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;category&#x2F;this-week-in-matrix&quot;&gt;This Week In Matrix&lt;&#x2F;a&gt; and better blogging in general to cover events as they happen). So here’s a quick overview of the highlights:&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Looking back at our &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2019&#x2F;12&#x2F;24&#x2F;the-2019-matrix-holiday-update#2020&quot;&gt;plans for 2020&lt;&#x2F;a&gt; in last year’s wrap-up, amazingly it seems we pretty much achieved what we set out to do.  Going through the bulletpoints in order:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;We &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2020&#x2F;05&#x2F;06&#x2F;cross-signing-and-end-to-end-encryption-by-default-is-here&quot;&gt;turned on End-to-end Encryption by default&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;We have a dedicated team making major improvements to First-Time User Experience in Element (as of the last few months; hopefully you’ve been noticing the improvements!)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;welcome-to-element&#x2F;&quot;&gt;RiotX became Element Android and shipped&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Communities have been completely reinvented as &lt;a href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;_Ade0FZfnWo?t=39&quot;&gt;Spaces&lt;&#x2F;a&gt; (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;commits&#x2F;matthew&#x2F;msc1772&#x2F;proposals&#x2F;1772-groups-as-rooms.md&quot;&gt;MSC1772&lt;&#x2F;a&gt;) and while in alpha currently, they should ship in Jan.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2020&#x2F;11&#x2F;03&#x2F;how-we-fixed-synapses-scalability&quot;&gt;Synapse scalability is fixed&lt;&#x2F;a&gt;: we now shard horizontally by event - and Synapse is now pretty much &lt;a href=&quot;https:&#x2F;&#x2F;patrick.cloke.us&#x2F;areweasyncyet&#x2F;&quot;&gt;entirely async&#x2F;await&lt;&#x2F;a&gt;!&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2020&#x2F;10&#x2F;08&#x2F;dendrite-is-entering-beta&#x2F;&quot;&gt;Dendrite Beta shipped&lt;&#x2F;a&gt;, as did the &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2020&#x2F;06&#x2F;02&#x2F;introducing-p-2-p-matrix&#x2F;&quot;&gt;initial P2P Matrix experiments&lt;&#x2F;a&gt;, which have subsequently continued to evolve significantly (although we haven’t implemented &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;blob&#x2F;rav&#x2F;proposal&#x2F;remove_mxids_from_events&#x2F;proposals&#x2F;1228-removing-mxids-from-events.md&quot;&gt;MSC1228&lt;&#x2F;a&gt; or &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;blob&#x2F;neilalexander&#x2F;identities&#x2F;proposals&#x2F;2787-portable-identities.md&quot;&gt;MSC2787&lt;&#x2F;a&gt; portable accounts yet). Check out the &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2020&#x2F;12&#x2F;15&#x2F;dendrite-2020-progress-update&quot;&gt;Dendrite end-of-year update&lt;&#x2F;a&gt; for more.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;_Ade0FZfnWo?t=939&quot;&gt;MLS experiments are in full swing&lt;&#x2F;a&gt; - we got the first MLS messages passing over Matrix a few days ago, and Decentralised MLS work is back on the menu after an initial sprint in May.&lt;&#x2F;li&gt;
&lt;li&gt;There’s been a valiant mission to improve Bridge UX in the form of &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;2346&quot;&gt;MSC2346&lt;&#x2F;a&gt; and its implementations in Element Web, although this has ended up failing to get to the top of the todo list (sorry Half-Shot! :&#x2F;)&lt;&#x2F;li&gt;
&lt;li&gt;Spec progress has improved somewhat, and we are very excited to have welcomed Will Bamberg (formerly MDN) to support the spec from a professional tech writer perspective, with &lt;a href=&quot;https:&#x2F;&#x2F;friendly-yonath-3de225.netlify.app&#x2F;&quot;&gt;the all-new engine&lt;&#x2F;a&gt; landing any day now! We’re still experimenting with ways to ensure the spec gets enough time allocated to keep up with the backlog, however - particularly community contributions.&lt;&#x2F;li&gt;
&lt;li&gt;...and in terms of Abuse&#x2F;Reputation - we properly &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2020&#x2F;10&#x2F;19&#x2F;combating-abuse-in-matrix-without-backdoors&quot;&gt;kicked off our anti-abuse work&lt;&#x2F;a&gt; and launched a first PoC implementation in the depths of &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2020&#x2F;12&#x2F;18&#x2F;introducing-cerulean#whats-with-the-decentralised-reputation-button&quot;&gt;Cerulean&lt;&#x2F;a&gt; last week.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Perhaps more interesting is the stuff we didn’t predict (or at least didn’t want to pre-announce ;) for 2020:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Riot, Modular and New Vector got unified at last behind a single name: &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;welcome-to-element&#x2F;&quot;&gt;Element&lt;&#x2F;a&gt;; hopefully the shock has worn off by now :)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2020&#x2F;03&#x2F;03&#x2F;moznet-irc-is-dead-long-live-mozilla-matrix&quot;&gt;Mozilla joined Matrix&lt;&#x2F;a&gt; in force, turning off Moznet IRC in favour of going full Matrix.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2020&#x2F;09&#x2F;30&#x2F;welcoming-gitter-to-matrix&quot;&gt;We welcomed Gitter&lt;&#x2F;a&gt; into the heart of the Matrix ecosystem (with &lt;a href=&quot;https:&#x2F;&#x2F;element.io&#x2F;blog&#x2F;gitter-is-joining-element&#x2F;&quot;&gt;Element acquiring Gitter&lt;&#x2F;a&gt; from &lt;a href=&quot;https:&#x2F;&#x2F;about.gitlab.com&#x2F;blog&#x2F;2020&#x2F;09&#x2F;30&#x2F;gitter-moves-to-element&#x2F;&quot;&gt;Gitlab&lt;&#x2F;a&gt; in order to ensure Gitter’s Matrix integration acts as a reference for integrating future chat silos into Matrix) - with &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2020&#x2F;12&#x2F;07&#x2F;gitter-now-speaks-matrix&quot;&gt;native Matrix support in Gitter&lt;&#x2F;a&gt; going live shortly afterwards.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2020&#x2F;05&#x2F;21&#x2F;welcoming-automattic-to-matrix&quot;&gt;Automattic&lt;&#x2F;a&gt; launched itself into the Matrix ecosystem with an investment in Element, and since then we’ve been working on getting Matrix better integrated and available to them (although all of Element’s Matrix-for-governments activity has ended up delaying this a bit).  If you want to work for Automattic on integrating Matrix, &lt;a href=&quot;https:&#x2F;&#x2F;automattic.com&#x2F;work-with-us&#x2F;matrix-integrations-engineer&#x2F;&quot;&gt;they’re hiring&lt;&#x2F;a&gt;!&lt;&#x2F;li&gt;
&lt;li&gt;We previewed &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2020&#x2F;12&#x2F;18&#x2F;introducing-cerulean&quot;&gt;Cerulean&lt;&#x2F;a&gt; as a super-exciting proof-of-concept client, demonstrating how social media could work on Matrix, with native threading, profiles-as-rooms, decentralised reputation, and (shortly) peeking-over-federation.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2020&#x2F;12&#x2F;17&#x2F;matrix-to-reloaded&quot;&gt;We completely rewrote matrix.to&lt;&#x2F;a&gt; and relaunched it as a much more capable and friendly permalink redirection service; a precursor to finally getting matrix:&#x2F;&#x2F; URLs everywhere!&lt;&#x2F;li&gt;
&lt;li&gt;We certainly didn’t predict that the “&lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2020&#x2F;04&#x2F;06&#x2F;running-your-own-secure-communication-service-with-matrix-and-jitsi&quot;&gt;how to install Synapse&lt;&#x2F;a&gt;” video tutorial published at the beginning of the COVID-19 pandemic would end up with 25.5K views (and counting…)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Then, there’s whole new waves of exciting stuff going on.  The most obvious has to be the amount of Government uptake we’ve seen with Matrix this year, following on from &lt;a href=&quot;https:&#x2F;&#x2F;joinup.ec.europa.eu&#x2F;collection&#x2F;open-source-observatory-osor&#x2F;document&#x2F;french-government-launches-house-developed-messaging-service-tchap&quot;&gt;France embracing Matrix&lt;&#x2F;a&gt; across the public sector last year.  Firstly the German armed forces announced their &lt;a href=&quot;https:&#x2F;&#x2F;www.bwi.de&#x2F;news-blog&#x2F;news&#x2F;artikel&#x2F;open-source-matrix-ist-einheitlicher-messenger-standard-fuer-die-bundeswehr&quot;&gt;transition to Matrix&lt;&#x2F;a&gt;, and then the German states of Schleswig-Holstein and Hamburg announced a &lt;a href=&quot;https:&#x2F;&#x2F;sifted.eu&#x2F;articles&#x2F;element-germany-deal&#x2F;&quot;&gt;mammoth 500K user Matrix deployment&lt;&#x2F;a&gt; for education and public administration.  Meanwhile, North Rhine Westphalia (the biggest state in Germany) launched their own Matrix-powered &lt;a href=&quot;https:&#x2F;&#x2F;www.logineo.schulministerium.nrw.de&#x2F;LOGINEO-NRW&#x2F;NEU-LOGINEO-NRW-Messenger&#x2F;Messenger.html&quot;&gt;messager for education&lt;&#x2F;a&gt;; loads of different universities have rolled out Matrix for collaboration  - and we hear &lt;a href=&quot;https:&#x2F;&#x2F;famedly.com&quot;&gt;Famedly&lt;&#x2F;a&gt; is &lt;a href=&quot;https:&#x2F;&#x2F;www.businessinsider.de&#x2F;gruenderszene&#x2F;health&#x2F;famedly-kommunikation-app-gesundheitswesen&#x2F;&quot;&gt;making good progress&lt;&#x2F;a&gt; with Matrix-powered healthcare messaging solutions.  Finally, outside of Germany, we’re seeing the first official deployments in the UK government and US federal government - we’ll share details where possible (but sometimes big deployments of encrypted communication systems want to remain discreet).  It’s incredibly exciting to see Matrix spreading across the public sector and education, and we’re hoping this will follow a similar pattern to how the Internet, email or indeed the Web first developed: a mix of high profile public sector deployments, complemented by a passionate grass-roots technical community, eventually spreading to span the rest of society :).&lt;&#x2F;p&gt;
&lt;p&gt;Another exciting thing which emerged this year is the amazing academic work that Karlsruhe Institute of Technology’s &lt;a href=&quot;https:&#x2F;&#x2F;dsn.tm.kit.edu&#x2F;english&#x2F;&quot;&gt;Decentralized Systems and Network Services Research Group&lt;&#x2F;a&gt; has been conducting on Matrix.  This really came on the radar back in June when their &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2020&#x2F;06&#x2F;16&#x2F;matrix-decomposition-an-independent-academic-analysis-of-matrix-state-resolution&quot;&gt;Matrix Decomposition: Analysis of an Access Control Approach on Transaction-based DAGs without Finality&lt;&#x2F;a&gt; paper was published - a truly fascinating analysis of how state resolution works in Matrix, and how we manage to preserve access control within rooms without using blockchain-style ‘sealed blocks’ (and has helped fix a few nasty bugs!).  I’m not sure any of us realised that Matrix’s state resolution counts as a new field of research, but it’s been great to follow along with their independent work.  Most recently, and even more excitingly, they’re circulating a preview of their &lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2011.06488&quot;&gt;Analysis of the Matrix Event Graph Replicated Data Type&lt;&#x2F;a&gt; paper - a deep analysis of the properties of Matrix DAGs themselves.  We highly recommend reading the papers (what better way to spend the holiday break!).  To give a taste, the final paragraph of the paper concludes:&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;arxiv.org&#x2F;abs&#x2F;2011.06488&quot;&gt;&lt;img src=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;img&#x2F;2020-12-25-meg-summary.png&quot; alt=&quot;MEG summary&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;2020 has also seen the arrival and maturation of a whole new generation of Matrix clients - &lt;a href=&quot;https:&#x2F;&#x2F;hydrogen.element.io&quot;&gt;Hydrogen&lt;&#x2F;a&gt; is &lt;em&gt;really&lt;&#x2F;em&gt; impressive as an experimental next-generation Web (and Mobile Web) client; an account with 3000 rooms that uses 1.4GB of RAM on Element Web uses 14MB of RAM on Hydrogen and launches instantly, complete with excellent E2EE implementation.  It even works on MSIE!  The whole app, including dependencies, is about 70KB of code (200KB including Olm).  Meanwhile, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-rust-sdk&quot;&gt;matrix-rust-sdk&lt;&#x2F;a&gt; is coming along well, providing a general purpose native library for writing excellent native Matrix clients.  Fractal merged initial matrix-rust-sdk a few weeks ago, and we’ll be experimenting with switching to it in Element iOS and Element Android (for its e2ee) in the coming year.  It’s not inconceivable to think of a world where matrix-rust-sdk ends up being the no-brainer official SDK for native apps, and Hydrogen’s SDK becomes the no-brainer official SDK for JS apps.&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile, in the community, there’s been so much activity it’s untrue.  But on the subject of maturing apps, it’s been incredibly exciting to see &lt;a href=&quot;https:&#x2F;&#x2F;invent.kde.org&#x2F;network&#x2F;neochat&quot;&gt;NeoChat&lt;&#x2F;a&gt; emerge as an official KDE Matrix client (built on &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;quotient-im&#x2F;libQuotient&quot;&gt;libQuotient&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;develop.kde.org&#x2F;frameworks&#x2F;kirigami&quot;&gt;Kirigami&lt;&#x2F;a&gt;, forked from &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;spectral-im&#x2F;spectral&quot;&gt;Spectral&lt;&#x2F;a&gt;), &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.com&#x2F;famedly&#x2F;fluffychat&quot;&gt;FluffyChat&lt;&#x2F;a&gt; going from strength to strength; &lt;a href=&quot;https:&#x2F;&#x2F;nheko.im&#x2F;nheko-reborn&#x2F;nheko&quot;&gt;Nheko&lt;&#x2F;a&gt; continuing to mature impressively; &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mirukana&#x2F;mirage&quot;&gt;Mirage&lt;&#x2F;a&gt; appearing out of nowhere as a fully featured desktop client; &lt;a href=&quot;https:&#x2F;&#x2F;gitlab.gnome.org&#x2F;GNOME&#x2F;fractal&quot;&gt;Fractal&lt;&#x2F;a&gt; merging matrix-rust-sdk etc.  On the serverside, &lt;a href=&quot;http:&#x2F;&#x2F;conduit.rs&#x2F;&quot;&gt;Conduit&lt;&#x2F;a&gt; was the big community story of the year - with an incredibly fast Rust + Sled server appearing out of the blue, with viable federation coming up on the horizon.  The best bet for an overview of all things community is to checkout the &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;category&#x2F;this-week-in-matrix&quot;&gt;TWIM backlogs&lt;&#x2F;a&gt; however - there’s simply way too much stuff to mention it all here.&lt;&#x2F;p&gt;
&lt;p&gt;Obviously, no 2020 wrap-up post would be complete without acknowledging the COVID-19 pandemic - which increased focus on Matrix and other remote collaboration technology more than anyone could have predicted (especially given all the privacy missteps from Zoom, Teams and others).  One of the highlights of the year was seeing the HOPE (Hackers On Planet Earth) conference shift &lt;a href=&quot;https:&#x2F;&#x2F;hackaday.com&#x2F;2020&#x2F;08&#x2F;11&#x2F;hope-2020-delivers-historic-marathon-of-hacking&#x2F;&quot;&gt;their entire proceedings over to Matrix&lt;&#x2F;a&gt; - turning the conference into a 10 day television station of premium hacking content, with Matrix successfully providing the social glue to preserve a sense of community despite going virtual.  Similarly, we’re incredibly excited that FOSDEM 2021 is highly likely to run primarily via Matrix (with bridges to IRC and XMPP, of course) - our work is going to be cut out for us in January to ensure the amazing atmosphere of FOSDEM is preserved online for the &amp;gt;8,500 participants and ~800 talks.  And if any other event organisers are reading this - please do reach out if you’re interested in going online via Matrix: we want Matrix to be the best possible ecosystem for online communities, including virtual events, and we’ll be happy to help :)&lt;&#x2F;p&gt;
&lt;p&gt;Talking of FOSDEM, a really fun bit of work which landed in Element this year was to (finally!) polish Widgets: the ability to embed arbitrary webapps into Matrix chatrooms.  This includes being able to embed widgets in the RightPanel on Element Web, the LeftPanel too, add as many as you like to a room, resize them(!), and generally build much more sophisticated dashboards of additional content.  Modal and fullscreen widgets are coming too, as are ways to simplify and unify access control.  It turns out that these have arrived in the nick of time for events like FOSDEM, where we’re expecting to very heavily use widgets to embed video streams, video conferences, schedules, and generally automate the workflow of the conference via adding in web UIs as widgets wherever necessary.  The work for this has been driven by the various German education deployments, where the same tricks are invaluable for automating online learning experiences.  We originally wrote Widgets back in 2017 as a proof-of-concept to try to illustrate how chatrooms could be used to host proper custom UIs, and it&#x27;s fantastic to see that dream finally come of age.&lt;&#x2F;p&gt;
&lt;p&gt;Finally, it’s been really exciting to see major progress in recent months on what’s essentially a whole new evolution of Matrix.  Two years ago, a quiet patch during the Christmas holidays gave birth to a whole bunch of wild science fiction Matrix Spec Changes: &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;1772&quot;&gt;MSC1772&lt;&#x2F;a&gt;: Spaces (groups as rooms), &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;1769&quot;&gt;MSC1769&lt;&#x2F;a&gt;: Profiles as rooms, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;1767&quot;&gt;MSC1767&lt;&#x2F;a&gt;: Extensible events, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;1776&quot;&gt;MSC1776&lt;&#x2F;a&gt;: Peeking over &#x2F;sync, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;1777&quot;&gt;MSC1777&lt;&#x2F;a&gt;: Peeking over federation, etc.  This was in part trying to ensure that we had something to look forward to when we emerged from the tunnel of launching Matrix 1.0, and in part trying to draw a coherent high-level sketch of what the next big wave of Matrix features could look like.  Inevitably the MSCs got stuck in limbo for ages while we exited beta, launched Matrix 1.0, turned on E2EE by default etc - but in the latter half of this year they’ve hit the top of the todo list and it’s been incredibly exciting to see entirely new features landing once again.  Implementation for Spaces is in in full swing and &lt;a href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;_Ade0FZfnWo?t=39&quot;&gt;looking great&lt;&#x2F;a&gt;; Profiles-as-rooms are effectively being trialled in Cerulean; Peeking over &#x2F;sync has landed in Dendrite and peeking over federation is in PR (and unlocks all sorts of desirable features for using rooms more generically than we have today, including Spaces).  Only Extensible events remains in limbo for now (we have enough to handle getting the others landed!)&lt;&#x2F;p&gt;
&lt;p&gt;Of these, Spaces has turned out to be exciting in wholly unexpected ways.  While prototyping the UX for how best to navigate hierarchies of spaces, we had a genuine epiphany: the ability for anyone to define and share arbitrary hierarchies of rooms makes Matrix effectively a global decentralised hierarchical file system (where the ‘files’ are streams of realtime data, but can obviously store static content too).  The decentralised access controls that KIT DSN &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2020&#x2F;06&#x2F;16&#x2F;matrix-decomposition-an-independent-academic-analysis-of-matrix-state-resolution&quot;&gt;wrote about&lt;&#x2F;a&gt; could &lt;em&gt;literally&lt;&#x2F;em&gt; be file-system style access controls; enforcing access on a global decentralised hierarchy.  We obviously have shared hierarchical filesystems today thanks to Dropbox and Google Drive, but these of course are centralised and effectively only store files - whereas Spaces could potentially scale to the whole web.  In fact, you could even think of Spaces as flipping Matrix entirely on its head: the most defining building block going forwards could be the Spaces themselves rather than the rooms and events - just as directories are intrinsic to how you navigate a conventional filesystem.  How has Matrix got this far without the concept of folders&#x2F;directories?!&lt;&#x2F;p&gt;
&lt;p&gt;Right now these thoughts are just overexcited science fiction, but the potential really is mindblowing.  It could give us a global read&#x2F;write web for organising any arbitrary realtime data - with the social controls via ACLs to delegate and crowdsource curation of hierarchies however folks choose.  The Matrix.org Foundation could seed a ‘root’ hierarchy, go curate all the rooms we know about into some Linnean-style taxonomy, delegate curation of the various subspaces to moderators from the community, and hey presto we’ve reinvented USENET… but with modern semantics, and without the rigid governance models.  Hell, we could just mount (i.e. bridge) USENET straight into it.  And any other hierarchical namespace of conversations you can think of - Google Groups, Stackoverflow, Discourse, IMAP trees…&lt;&#x2F;p&gt;
&lt;p&gt;Of course, the initial Spaces implementation is going to be focused of on letting communities publish their existing rooms, and users organise their own rooms, rather than managing an infinite ever-expanding global space hierarchy - but given we’ve been designing Spaces to support government (and inter-government) scales of Spaces, it’s not inconceivable to think we could use it to navigate gigantic public shared Spaces in the longer term.&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, enough Space scifi - what’s coming up in 2021?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;2021&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#2021&quot; aria-label=&quot;Anchor link for: 2021&quot;&gt;🔗&lt;&#x2F;a&gt;2021&lt;&#x2F;h2&gt;
&lt;p&gt;Our current hit list is:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Spaces&lt;&#x2F;strong&gt; - see above :)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Social Login&lt;&#x2F;strong&gt; - we’re going to be making Single Sign On (SSO) a proper first-class citizen in Matrix (and Synapse and Element) in the coming weeks, and enabling it on the matrix.org homeserver, so users can do single-click logins via Github&#x2F;Gitlab&#x2F;Google and other SSO providers.  Obviously this means your Matrix identity will be beholden to your identity provider (IdP), but this may well be preferable for many users who just want a single-click way to enter Matrix and don’t care about being tied to a given IdP.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;VoIP&lt;&#x2F;strong&gt; - we have a &lt;em&gt;lot&lt;&#x2F;em&gt; of work in flight at the moment to make 1:1 VoIP super robust.  Some of it has already landed in Element, but the rest will land in the coming weeks - and then we’re hoping to revisit Matrix-native group voice&#x2F;video.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Voice messaging&lt;&#x2F;strong&gt; - we’re hoping to finally add voice messaging to Element (and Matrix)&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Location sharing&lt;&#x2F;strong&gt; - ...and this too.&lt;&#x2F;li&gt;
&lt;li&gt;**P2P **- Lots of P2P work on the horizon, now Dendrite is increasingly stable.  First of all we need to iterate more on Pinecone, our pre-alpha next-generation P2P overlay network - and then sort out account portability, and privacy-preserving store-and-forward.  We’re hoping to see the live P2P Matrix network turn on this year, however, and ideally see homeservers (probably Dendrite) multihoming by default on both today’s Matrix as well as the P2P network, acting as gateways between the two.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Threads&lt;&#x2F;strong&gt; - Cerulean is excellent proof for how threading could work in Matrix; we just need to get it implemented in Element!&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Peeking&lt;&#x2F;strong&gt; - Peeking is going to become so much more important for participating in non-chat rooms, such as Spaces, Profiles, Reputation feeds, etc.  We’ll finish it in Dendrite, and then implement it in Synapse too.&lt;&#x2F;li&gt;
&lt;li&gt;**Decentralised Reputation **- Cerulean has the first implementation of decentralised reputation for experimentation purposes, and we’ll be working solidly on it over the coming year to empower users to counter abuse by applying their own subjective reputation feeds to their content.&lt;&#x2F;li&gt;
&lt;li&gt;**Incremental Signup **- Once upon a time, Element (Riot) had the ability to gradually sign-up without the user even really realising they’d signed up.  We want to bring it back - perhaps this will be the year?&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;DMLS&lt;&#x2F;strong&gt; - with the first &lt;a href=&quot;https:&#x2F;&#x2F;datatracker.ietf.org&#x2F;wg&#x2F;mls&quot;&gt;MLS&lt;&#x2F;a&gt; messages flowing over Matrix, we want to at least provide MLS as an option alongside Megolm for encryption.  It should be radically more performant in larger rooms (logarithmic rather than linear complexity), but lacks deniability (the assurance that you cannot prove a user said something in retrospect, in order to blackmail them or similar), and is still unproven technology.  We’ll aim to prove it in 2021.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;E2EE improvements&lt;&#x2F;strong&gt; - We improved E2EE immeasurably in 2020; turning it on by default, adding cross-signing, QR code verification etc.  But usability and reliability can still be improved.  We’ll be looking at further simplifying the UX, and potentially combining together your login password and recovery&#x2F;security passphrase so you only have one password to remember going forwards.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;Hydrogen&lt;&#x2F;strong&gt; - We’ll keep polishing Hydrogen, bringing it towards feature parity with Element, ensure its SDK is available for other clients, and start seeing how we can use it in Element itself.  For instance, the Spaces-aware RoomList in Element may well end up stealing alien technology from Hydrogen.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;matrix-rust-sdk&lt;&#x2F;strong&gt; - Similarly, we’ll keep polishing matrix-rust-sdk; stealing inspiration from Hydrogen’s state model, and start migrating bits of the native mobile Element apps to use it.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;strong&gt;The Spec&lt;&#x2F;strong&gt; - get Will’s new spec website live, and get improving all the surrounding material too.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;I’m sure I’m missing lots here, but these are the ones which pop immediately to mind.  You can also check &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vector-im&#x2F;roadmap&#x2F;projects&#x2F;1&quot;&gt;Element&#x27;s public roadmap&lt;&#x2F;a&gt;, which covers all the core Matrix work donated by Element (as well as everything else Element is getting up to).&lt;&#x2F;p&gt;
&lt;p&gt;As always, huge huge thanks goes to the whole Matrix community for flying Matrix and keeping the dream alive and growing faster than ever.  It’s been a rough year, and we hope that you’ve survived it intact (and you have our sincere sympathies if you haven’t).  Let’s hope that 2021 will be a massive improvement, and that the whole Matrix ecosystem will continue to prosper in the new year.&lt;&#x2F;p&gt;
&lt;p&gt;-- Matthew, Amandine, and the whole Matrix team.&lt;&#x2F;p&gt;
</content>
</entry>

    
<entry xml:lang="en">
    <title>The 2019 Matrix Holiday Update!</title>
    <published>2019-12-24T00:00:00+00:00</published>
    <updated>2019-12-24T00:00:00+00:00</updated>
    <author>
      <name>Matthew Hodgson</name>
    </author>
    <link rel="alternate" href="https://c956b204.matrix-website.pages.dev/blog/2019/12/24/the-2019-matrix-holiday-update/" type="text/html"/>
    <id>https://c956b204.matrix-website.pages.dev/blog/2019/12/24/the-2019-matrix-holiday-update/</id>
    <content type="html">&lt;p&gt;Hi all,&lt;&#x2F;p&gt;
&lt;p&gt;Every year we do an annual wrap-up and retrospective of all the things happening in the Matrix core team - if you’re feeling particularly curious or bored you can check out the &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2015&#x2F;12&#x2F;25&#x2F;the-matrix-holiday-special&#x2F;&quot;&gt;2015&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2016&#x2F;12&#x2F;26&#x2F;the-matrix-holiday-special-2016-edition&#x2F;&quot;&gt;2016&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2017&#x2F;12&#x2F;25&#x2F;the-matrix-holiday-mini-special-2017-edition&#x2F;&quot;&gt;2017&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2018&#x2F;12&#x2F;25&#x2F;the-2018-matrix-holiday-special&#x2F;&quot;&gt;2018&lt;&#x2F;a&gt; editions for context.  The idea is to look at the bigger picture trends in Matrix outside of the weekly &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;category&#x2F;this-week-in-matrix&#x2F;&quot;&gt;TWIM&lt;&#x2F;a&gt; posts to get an idea of the stuff which we made progress on, and the stuff which still remains.&lt;&#x2F;p&gt;
&lt;p&gt;That said, it’s hard to know where to start - Matrix accelerated more than ever before in 2019, and there’s been progress on pretty much all battlefronts.  So as a different format, let’s take the &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2018&#x2F;12&#x2F;25&#x2F;the-2018-matrix-holiday-special#2019&quot;&gt;stuff we said we had planned for 2019&lt;&#x2F;a&gt; from the end of last year’s update and see what we actually achieved...&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;2019-the-immediate-priorities&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#2019-the-immediate-priorities&quot; aria-label=&quot;Anchor link for: 2019-the-immediate-priorities&quot;&gt;🔗&lt;&#x2F;a&gt;2019: the immediate priorities&lt;&#x2F;h2&gt;
&lt;p&gt;So, our immediate priorities for 2019 were:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;r0 spec releases across the board (aka Matrix 1.0)&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Implementing them in Synapse&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;✅ Well, unless you’ve been floating in a sensory deprivation tank for the last year, hopefully you spotted that Matrix (as a protocol) finally exited beta - starting off with the announcement at FOSDEM in February of the &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2019&#x2F;02&#x2F;04&#x2F;matrix-at-fosdem-2019&#x2F;&quot;&gt;first stable release of the Server-Server API&lt;&#x2F;a&gt;, alongside the Synapse 0.99.x series as we began the process of migrating to the 1.0 APIs.&lt;&#x2F;p&gt;
&lt;p&gt;Specifically this meant killing off self-signed certificates, adding .well-known server discovery and implementing room version semantics so we could upgrade the underlying room version algorithm to fix the residual flaws.  This culminated in June with the &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2019&#x2F;06&#x2F;11&#x2F;introducing-matrix-1-0-and-the-matrix-org-foundation&#x2F;&quot;&gt;official release of Matrix 1.0&lt;&#x2F;a&gt; - now including the remaining APIs and a stable release of Synapse 1.0.  The emphasis was on addressing all the main pre-1.0 design flaws rather than adding features or performance, but with 1.0 out the door at last we’ve been able to make progress there too.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Landing the Riot redesign&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;✅ The full redesign of Riot’s UI on Web&#x2F;Desktop landed shortly after FOSDEM in Feb with &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@RiotChat&#x2F;the-big-1-0-68fa7c6050be&quot;&gt;The Big 1.0&lt;&#x2F;a&gt;. Cosmetically we got most of the new look &amp;amp; feel in place, and have had very positive feedback overall - although some of the UX thinkos of the old app remain and coming up on the radar for fixing.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Finalising the Matrix.org Foundation&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;✅ This happened too, coincident with releasing Matrix 1.0 in June - read all about it at &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;foundation&quot;&gt;https:&#x2F;&#x2F;matrix.org&#x2F;foundation&lt;&#x2F;a&gt;. So far the governance and legal infrastructure the Foundation provides has helped the project significantly, and while it was a mammoth task to organise, we’re very glad it’s here!  Huge thanks go out to Jon, Ross and Jutta for agreeing to join the foundation as Guardians - they have been excellent in patiently listening to the various dramas of the year and ensuring Matrix’s neutrality and that we keep an even keel.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Landing all the new E2E encryption UX and features&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The good news on E2E encryption is that we’ve been making solid progress throughout the year - the bad news is that we are still yet to turn it on by default.  Progress updates for the various pieces of the puzzle are as follows:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;✅ The final UX is pretty much locked down (after several iterations as we try to tread the balance between trustworthiness and security) - here’s a &lt;a href=&quot;https:&#x2F;&#x2F;www.figma.com&#x2F;file&#x2F;wwqBo5oAFfk8XKmtd2YaIs&#x2F;Cross-signing&quot;&gt;sneak preview&lt;&#x2F;a&gt; of what we’re aiming at.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;🏗 Cross-signing is the single biggest remaining piece of work in progress - letting users attest to the trustworthiness of their own devices, so you only ever have to trust a given user once rather than trusting all their devices individually. We gave a &lt;a href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;C2eE7rCUKlE?t=2974&quot;&gt;very early demo&lt;&#x2F;a&gt; of an experimental implementation back at FOSDEM in Feb, inspired by some of the initial spec proposal at &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;uhoreg&#x2F;matrix-doc&#x2F;blob&#x2F;cross-signing&#x2F;proposals&#x2F;1680-cross-signing.md&quot;&gt;MSC1680&lt;&#x2F;a&gt; (MSC = Matrix Spec Change, our &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;docs&#x2F;spec&#x2F;proposals&quot;&gt;process for evolving Matrix&lt;&#x2F;a&gt;).&lt;&#x2F;p&gt;
&lt;p&gt;However, having played with it a bit, MSC1680 turned out to be too generic and complicated (it worked by the user signing a device with any other of their devices, building a twisted maze of which device vouched for which) - and we replaced it with &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;1756&quot;&gt;MSC1756&lt;&#x2F;a&gt;, which shifts the model to be the simpler “the user has a key, which they use to sign their devices”. However, this in turn requires more infrastructure - you need somewhere secure to store your signing key, which prompted &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;uhoreg&#x2F;matrix-doc&#x2F;blob&#x2F;ssss&#x2F;proposals&#x2F;1946-secure_server-side_storage.md&quot;&gt;MSC1946&lt;&#x2F;a&gt; - Secure Secret Storage &amp;amp; Sharing (SSSS): the ability to sync your signing key between devices by storing it (encrypted, of course) on the server.&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile, it also became obvious that the primitives for key verification needed to be improved too: introducing verification by emoji comparison (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;issues&#x2F;1267&quot;&gt;MSC1267&lt;&#x2F;a&gt;) and QR codes (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;issues&#x2F;1543&quot;&gt;MSC1543&lt;&#x2F;a&gt;), and switching key verification to be performed in the context of a DM (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;2241&quot;&gt;MSC2241&lt;&#x2F;a&gt;) so that you can see your verification history, find verifications, and easily dip in and out of verifying users as needed.&lt;&#x2F;p&gt;
&lt;p&gt;Whilst everyone else was panicking about Matrix 1.0 and associated baggage, Uhoreg was off in the wilderness plugging his way through all of this - iterating on the design, speccing it and implementing it in synapse and matrix-js-sdk, complete with a test jig to demonstrate it all working (&lt;a href=&quot;https:&#x2F;&#x2F;scitech.video&#x2F;videos&#x2F;watch&#x2F;1c8a0262-dee9-4927-b9e9-9856a7f4d8bf&quot;&gt;part 1&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;scitech.video&#x2F;videos&#x2F;watch&#x2F;d1ef04a8-397a-4570-a9a9-cef143ea637c&quot;&gt;part 2&lt;&#x2F;a&gt;).  Over the last few months the rest of the team has joined him though, and we’ve been frantically working away implementing it all on both Riot&#x2F;Web, iOS &amp;amp; RiotX&#x2F;Android.  For instance - here’s &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;_matrix&#x2F;media&#x2F;r0&#x2F;download&#x2F;matrix.org&#x2F;IoFfFRWTmRNTbNDzfmKFPvLq&quot;&gt;verification happening in DM&lt;&#x2F;a&gt; between Riot&#x2F;Web &amp;amp; RiotX a few weeks ago, and here’s a very early (unskinned) cut of &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;_matrix&#x2F;media&#x2F;r0&#x2F;download&#x2F;matrix.org&#x2F;tAWxQKhrfiPxBvtAOQfMiGjW&quot;&gt;verification&lt;&#x2F;a&gt; happening in Riot&#x2F;Web’s RightPanel a few days ago.&lt;&#x2F;p&gt;
&lt;p&gt;We were hoping to get cross-signing ready for the end of 2019, but in practice we’re now sprinting to get it done by FOSDEM 2020 in Feb - not least because we have a main-stage talk proposed to tell everyone how we landed it and turned on E2E by default... ;)&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;✅ Support for non-E2E clients.  The last thing we want is to make it impossible to write a simple Matrix client, or to suddenly excommunicate (hah) all the existing Matrix bots &amp;amp; bridges which haven’t implemented E2E.  To this end, poljar created &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;pantalaimon&quot;&gt;pantalaimon&lt;&#x2F;a&gt; - our very own Matrix daemon, which can sit in the background and offload all your E2EE from your Matrix client by acting as a transparent Matrix proxy which magically encrypts everything.  Built on matrix-nio and asyncio python3, We use it in production today for running various bots and it works excellently.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;✅ Support for search in E2E rooms.  Hot off the heels of pantalaimon’s success, poljar also created &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;seshat&quot;&gt;seshat&lt;&#x2F;a&gt; - a native library for clientside indexing encrypted Matrix events written in Rust, powered by the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;tantivy-search&#x2F;tantivy&quot;&gt;tantivy&lt;&#x2F;a&gt; full-text search engine.  (pantalaimon also has support for indexing via tantivy, which involved contributing python bindings for tantivy, but we ended up going with Rust so we could embed it natively in as many Matrix clients as possible).  Seshat is particularly cool in that the indexes themselves are encrypted in on disk - and in future could even be synced between clients using &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;uhoreg&#x2F;matrix-doc&#x2F;blob&#x2F;ssss&#x2F;proposals&#x2F;1946-secure_server-side_storage.md&quot;&gt;SSSS&lt;&#x2F;a&gt; so you don’t have to reindex your messages every time you log in on a new device.  Seshat is implemented behind a labs flag on Riot&#x2F;Desktop and it will ship as soon Riot&#x2F;Desktop’s build pipeline is fully updated to support native modules (which will also unlock other goodies, such as using faster&#x2F;safer native E2E primitives, safer key storage, and Discord-style keyboard-shortcuts for VoIP).&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;🏗 Fixing “unable to decrypt” errors.  We’ve done big sprint over the last month or so to track down the final straggling causes of unable to decrypt errors.  Some of these are legitimate bugs (e.g. &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;6399&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;6399&lt;&#x2F;a&gt;) - but many are artefacts of the current architecture: for instance, if the sender has no way to know your device was in the room when it encrypted a message, you won’t be able to decrypt.  We’re addressing this by improving better error messages and feedback so the user isn’t surprised by what’s going on (aiming for Jan) - and in future we’ll have to revisit E2E’s fundamentals to ensure that it’s impossible to receive a message without also receiving the key to decrypt it.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;✅ Support for push notifications in E2E rooms.  This is kinda solved right now by having all clients get (silently) pushed whenever they receive a message in an E2E room with push enabled, and relying on the client to be woken up by the push in order to decrypt the message in order to display the push notification.  However, this is battery intensive, and we could probably do better - but this isn’t a blocker for going live.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;🏗 Support for FilePanel and NotifPanel in E2E rooms.  Seshat should fix this by indexing all your messages (and so tracking whether they contain pushes or files, and populating up your local view of your file &amp;amp; notif panels respectively) - just need to ensure it’s hooked up.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;...and that’s where things stand right now on E2E by default.  We’ll start turning it on by default for private rooms as soon as the UX has landed (probably starting first with new DMs and private rooms, prompting the user in case they want to opt out - and then migrating existing ones).  It’s worth noting that we have poured a &lt;em&gt;lot&lt;&#x2F;em&gt; of work into E2E encryption now - often to the detriment of the rest of Matrix; our rich featureset and decentralisation has combined to make this a tough nut to crack, but the end is in sight.  Thanks to all for your patience and support while we’ve been working through this.&lt;&#x2F;p&gt;
&lt;p&gt;That takes us to the end of the stuff we planned to prioritise in 2019 - but what about the more speculative medium-term stuff which was on the menu this time last year?&lt;&#x2F;p&gt;
&lt;h2 id=&quot;2019-the-medium-term-priorities&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#2019-the-medium-term-priorities&quot; aria-label=&quot;Anchor link for: 2019-the-medium-term-priorities&quot;&gt;🔗&lt;&#x2F;a&gt;2019: the medium-term priorities&lt;&#x2F;h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Reworking and improving Communities&#x2F;Groups.&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;We have some really promising UX work and a fairly early spec proposal (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;blob&#x2F;matthew&#x2F;msc1772&#x2F;proposals&#x2F;1772-groups-as-rooms.md&quot;&gt;MSC1772&lt;&#x2F;a&gt;), but work in earnest hasn’t kicked off yet. It’s going to be one of the next big projects though.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Reactions.&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;✅ Riot now has Reactions! 🎉🎉🎉  The only remaining work is to finish the remaining rough edges of the spec proposal (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;blob&#x2F;matthew&#x2F;msc1849&#x2F;proposals&#x2F;1849-aggregations.md&quot;&gt;MSC1849&lt;&#x2F;a&gt;) and actually land them in the Matrix spec proper.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;E2E-encrypted Search&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;✅ &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;seshat&quot;&gt;Seshat&lt;&#x2F;a&gt; exists! (see above)&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Filtering. (empowering users to filter out rooms &amp;amp; content they&#x27;re not interested in).&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;✅ We’ve ended up thinking lots in 2019 about empowering users to filter content.  The main impetus has been to ensure that users and communities can filter out abuse (on their own terms), and also to start building infrastructure which can be used for folks to share their own filters.  Over the last few months, this has started to take concrete form - with the arrival of &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;blob&#x2F;msc2313&#x2F;proposals&#x2F;2313-moderation-policy-rooms.md&quot;&gt;MSC2313&lt;&#x2F;a&gt; “Moderation policies as rooms”, and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;mjolnir&quot;&gt;Mjolnir&lt;&#x2F;a&gt; - a bot you can run to enforce moderation policies on your rooms.  It’s all quite early, but we expect a lot more work in this space over the coming year (and it’s wryly amusing that &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;jack&#x2F;status&#x2F;1204766078468911106&quot;&gt;Twitter has also woken up&lt;&#x2F;a&gt; to it being an interesting problem needing to be solved.)&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Extensible events&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Sorry folks; no progress here since a flurry of spec work (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;blob&#x2F;matthew&#x2F;msc1767&#x2F;proposals&#x2F;1767-extensible-events.md&quot;&gt;MSC1767&lt;&#x2F;a&gt;) back in Jan 2019. The good news is that the spec proposal seems to be relatively well received. The bad news is that we haven’t had bandwidth to finish reviewing it, implementing it and migrating it anywhere. It blocks a bunch of really useful stuff in Matrix, and there are users willing to pay for it (via New Vector) - we’ll get to it as soon as we can.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Editable messages.&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;✅ These landed too and are a thing of joy!  Just need to merge &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;blob&#x2F;matthew&#x2F;msc1849&#x2F;proposals&#x2F;1849-aggregations.md&quot;&gt;MSC1849&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Extensible Profiles (we&#x27;ve actually been experimenting with this already).&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Similar to Extensible Events, there was a flurry of spec work (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;blob&#x2F;matthew&#x2F;msc1769&#x2F;proposals&#x2F;1769-extensible-profiles-as-rooms.md&quot;&gt;MSC1769&lt;&#x2F;a&gt;) back in Jan, but little progress since.  This will also unlock a lot of really useful features - e.g. custom status, custom profile data, social timeline rooms etc.  We’ll likely get to it shortly after communities work.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Threading.&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;🏗 So we actually landed label-based threading (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;blob&#x2F;matthew&#x2F;msc2326&#x2F;proposals&#x2F;2326-label-based-filtering.md&quot;&gt;MSC2326&lt;&#x2F;a&gt;) in Synapse 1.6, but it’s not exposed in Riot yet (or elsewhere).  It doesn’t have quite the same semantics as Slack-style threading; the idea is to filter down your room based on which messages are tagged as part of a given topic.  However, it’s very powerful, and it’ll be fun to add it to Riot at some point in 2020.  Meanwhile, better-than-label-based-threading is also on the cards, although slightly lower priority than some of the other stuff in this section.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Landing the Riot&#x2F;Android rewrite&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;🏗 As you probably know, RiotX is a full rewrite of Riot&#x2F;Android in Kotlin using modern AndroidX and Jetpack idioms - and it entered beta &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@RiotChat&#x2F;introducing-the-riotx-beta-for-android-b17952e8f771&quot;&gt;back in June&lt;&#x2F;a&gt;.  Since then we’ve been frantically working away on both playing catch-up with the old app… as well as implementing all the new stuff (reactions, edits, new E2E verification, cross-signing etc) which makes no sense to waste time adding in Riot&#x2F;Android, but also pushes out the timeline on RiotX itself.&lt;&#x2F;p&gt;
&lt;p&gt;We’re currently sprinting to try to get RiotX ready for FOSDEM in February - hopefully users will have felt the app starting to really stabilise over the last few months (it even supports breadcrumbs now!)&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Considering whether to do a similar overhaul of Riot&#x2F;iOS&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;🏗 It’s cheating a bit, but Manu (the lead developer on Riot&#x2F;iOS and delivery manager of Riot&#x2F;Mobile in general) has been hacking on an entirely new client called &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;manuroe&#x2F;messagerie&quot;&gt;Messagerie&lt;&#x2F;a&gt; in his spare time, using SwiftUI.  The idea of throwing away the whole UI layer and replacing it with the latest best practices sounds suspiciously like RiotX - it’ll be interesting to see how RiotX&#x2F;iOS takes shape next year!&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Scaling synapse via sharding the master process&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;We ended up bottlenecked on IO rather than CPU in 2019, and as a result we worked on splitting synapse’s database across multiple database instances on a per-table granularity.  However, the master process itself doesn’t shard yet; so we’re now bottlenecked on CPU and need to get on and do this asap to unlock further Synapse scalability for mega-monolithic-deployments like the Matrix.org homeserver.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Bridge UI for discovery of users&#x2F;rooms and bridge status&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;🏗 There’s been a bit of movement in the last few weeks on this, but nothing concrete yet.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Bandwidth-efficient transports&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;✅ We finished the 100bps CoAP transport proof-of-concept for Matrix, demoed it at FOSDEM and &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2019&#x2F;03&#x2F;12&#x2F;breaking-the-100-bps-barrier-with-matrix-meshsim-coap-proxy&quot;&gt;shipped it in March&lt;&#x2F;a&gt;. However, we haven’t progressed it much further; it really needs a corporate sponsor who wants to fund work to finish it off and bake it properly into Matrix. &lt;strong&gt;If you’re interested, please &lt;a href=&quot;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;@matthew:matrix.org&quot;&gt;get in touch&lt;&#x2F;a&gt;.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Bandwidth-efficient routing&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;🏗 We also did a bunch of related work on bandwidth-efficient routing, which sadly hasn’t been released yet.  However, it’s interesting to note that the &lt;a href=&quot;https:&#x2F;&#x2F;dsn.tm.kit.edu&#x2F;english&#x2F;&quot;&gt;Decentralized Systems and Network Services Research Group&lt;&#x2F;a&gt; at Karlsruhe Institute of Technology’s Institute of Telematics has been looking into this space too - c.f. their &lt;a href=&quot;https:&#x2F;&#x2F;publikationen.bibliothek.kit.edu&#x2F;1000100364&quot;&gt;A Glimpse of the Matrix&lt;&#x2F;a&gt; paper, which ponders very similar problems.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Getting Dendrite to production.&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;🏗 Dendrite work has been bubbling away in the background thanks to Anoa, Brendan, cnly (our GSoC dendrite contributor) and others.  Inevitably most of our bandwidth has gone into getting Synapse to 1.0 and making sure it’s fit for purpose, but we want and need to keep Dendrite alive for next-generation purposes - and in fact New Vector is hiring new people to work on it in 2020.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Inline widgets (polls etc)&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;🏗 We have an MSC (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;2192&quot;&gt;MSC2192&lt;&#x2F;a&gt;), but not an implementation.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Improving VoIP over Matrix.&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Very little progress here, frustratingly.  Jitsi has been upgraded and conference calls should kick ass these days (let us know if they don’t), but 1:1 needs a lot of love.  Hopefully we’ll get to it in 2020.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Adding more bridges, and improving the current ones.&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Lots of bridging progress in 2020 - all new puppeting Slack support; huge fixes to the IRC bridge (including shifting to Postgres at last); Bifrost (the XMPP bridge) progressed too, and there’s been loads of community bridging work around WhatsApp, Discord and others.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Account portability&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;li&gt;&lt;em&gt;Replacing MXIDs with public keys&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;We’ve just started looking at implementing these seriously via &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;blob&#x2F;rav&#x2F;proposal&#x2F;remove_mxids_from_events&#x2F;proposals&#x2F;1228-removing-mxids-from-events.md&quot;&gt;MSC1228&lt;&#x2F;a&gt; (as of last week) - expect progress in 2020.&lt;&#x2F;p&gt;
&lt;p&gt;So that sums up progress on the medium term menu - as you can see, a bunch actually happened; a bunch made progress; a few didn’t happen at all.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;2019-the-longer-term-priorities&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#2019-the-longer-term-priorities&quot; aria-label=&quot;Anchor link for: 2019-the-longer-term-priorities&quot;&gt;🔗&lt;&#x2F;a&gt;2019: the longer-term priorities&lt;&#x2F;h2&gt;
&lt;p&gt;Finally, on the longer term radar:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Shared-code cross-platform client SDKs (e.g. sharing a native core library between matrix-{js,ios,android}-sdk)&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;No progress here.  Instead, all three main platforms have continued to write and maintain their own platform-specific SDKs for now.  &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;seshat&quot;&gt;Seshat&lt;&#x2F;a&gt; however will be the first piece of native rust code shared across all 3 platforms - let’s see how that goes first...&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Matrix daemons (e.g. running an always-on client as a background process in your OS which apps can connect to via a lightweight CS API)&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;✅ &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;pantalaimon&quot;&gt;Pantalaimon&lt;&#x2F;a&gt; lives!&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Push notifications via Matrix (using a daemon-style architecture)&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;No progress here, unless you count the CoAP low-bandwidth work.  However, Bubu (also Riot&#x2F;Android Fdroid maintainer) has been working on a project called &lt;a href=&quot;https:&#x2F;&#x2F;bubu1.eu&#x2F;openpush&#x2F;&quot;&gt;OpenPush&lt;&#x2F;a&gt; which looks to help in this space (albeit not built on Matrix, but could be used by Matrix).  There are a few other related projects.  If someone wants to build this on top of Matrix + CoAP please get in touch asap!&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Clientside homeservers (i.e. p2p matrix) - e.g. compiling Dendrite to WASM and running it in a service worker.&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;🏗 Work is actually happening on this currently.  Dendrite has successfully compiled to WASM and runs, and we’ve had it (almost) talking HTTP tunnelled over libp2p as part of P2P Matrix experiments.  In 2020 we’re going to be investing a lot in P2P Matrix - to give users full control of their communication without even having to run a server, and also to simplify onboarding and account portability enormously.  We have a talk about this accepted for FOSDEM 2020 (&lt;a href=&quot;https:&#x2F;&#x2F;fosdem.org&#x2F;2020&#x2F;schedule&#x2F;event&#x2F;dip_p2p_matrix&#x2F;&quot;&gt;The Path to P2P Matrix&lt;&#x2F;a&gt;) and we’re actively (frantically) hacking on Dendrite to make it happen - keep an eye out for how things develop!&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Experimenting with MLS for E2E Encryption&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;🏗 Now that E2E-by-default has entered the “it works! let’s land it in Riot asap” phase, Uhoreg has had some time to start thinking about the longer term future of encryption in Matrix.  &lt;a href=&quot;https:&#x2F;&#x2F;datatracker.ietf.org&#x2F;wg&#x2F;mls&#x2F;charter&#x2F;&quot;&gt;MLS (Messaging Layer Security)&lt;&#x2F;a&gt; is the IETF’s initiative to define a standard mechanism for end-to-end-encrypted group chats, which has some major algorithmic improvements over Olm&#x2F;Megolm and the Double Ratchet Algorithm as used by Signal.  The catch is that it doesn’t work at all well with decentralisation - however, we’ve been &lt;a href=&quot;https:&#x2F;&#x2F;mailarchive.ietf.org&#x2F;arch&#x2F;msg&#x2F;mls&#x2F;MnLJkbJ_Mwe8Oz0Ll6delGJLPz4&quot;&gt;working with them&lt;&#x2F;a&gt; to try to ensure MLS can work in a decentralised world.  More recently, uhoreg has had a chance to think a lot more about this and we’re working on a proposal for Decentralised MLS which builds on plain MLS while also giving the semantics needed for Matrix.  It’s all very experimental at this point (and the proof-of-concept implementation is written in &lt;a href=&quot;https:&#x2F;&#x2F;julialang.org&#x2F;&quot;&gt;Julia&lt;&#x2F;a&gt;!) - but looks promising.  We’ll share more asap, and will certainly be investing more time in this in 2020..&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Storing and querying more generic data structures in Matrix (e.g. object trees; scene graphs)&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Sadly no progress here :(&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;Alternate use cases for VR, IoT, etc.&lt;&#x2F;em&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;...and none here either.&lt;&#x2F;p&gt;
&lt;p&gt;So, of all the myriad things on our radar for 2019 (as of Dec 2018), hopefully this gives some idea of where we hit the mark.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;2019-the-unpredictable-bits&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#2019-the-unpredictable-bits&quot; aria-label=&quot;Anchor link for: 2019-the-unpredictable-bits&quot;&gt;🔗&lt;&#x2F;a&gt;2019: the unpredictable bits&lt;&#x2F;h2&gt;
&lt;p&gt;However, there’s also a tonne of other stuff which happened which wasn’t explicitly on the radar.  On the synapse side, we finished fully migrating from Python 2 to Python 3, and started using asyncio and all the latest Python 3 goodies!  We finally &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;6358&quot;&gt;implemented configurable history retention&lt;&#x2F;a&gt; for servers and rooms! We even implemented &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;6409&quot;&gt;self-destructing messages&lt;&#x2F;a&gt; in Synapse (not that Riot exposes them yet). And there has been loads of optimisation and performance work since 1.0 landed in June.&lt;&#x2F;p&gt;
&lt;p&gt;On the ops side, we overhauled all our ops processes and security after the Matrix.org &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2019&#x2F;05&#x2F;08&#x2F;post-mortem-and-remediations-for-apr-11-security-incident&#x2F;&quot;&gt;datacenter breach&lt;&#x2F;a&gt; in April, throwing away our legacy infrastructure and rebuilding it properly - and subsequently have been expanding our ops team from one dedicated ops person to four.  We also found ourselves having to do another emergency datacenter migration back in November when the old one was unable to reliably service IO for our database cluster.&lt;&#x2F;p&gt;
&lt;p&gt;We also spent a bunch time after shipping Matrix 1.0 working on tightening up Matrix’s privacy model - particularly around third party identity servers, integration managers, and making sure that folks self-hosting Matrix don’t accidentally depend on use 3rd party services without realising it.  If you missed out on the fun at the time, you can read all about it &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2019&#x2F;06&#x2F;30&#x2F;tightening-up-privacy-in-matrix&#x2F;&quot;&gt;here&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2019&#x2F;09&#x2F;27&#x2F;privacy-improvements-in-synapse-1-4-and-riot-1-4&#x2F;&quot;&gt;here&lt;&#x2F;a&gt;.  This ended up being way more work than we expected, but we’re very glad to have sorted it out now.&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile, mainstream uptake of Matrix has properly taken off, with the French Government launching Tchap (their fork of Riot), now with hundreds of thousands of daily active users.  The &lt;a href=&quot;https:&#x2F;&#x2F;www.heise.de&#x2F;newsticker&#x2F;meldung&#x2F;Open-Source-Bundeswehr-baut-eigene-verschluesselte-Messenger-App-4623404.html&quot;&gt;German Government revealed today&lt;&#x2F;a&gt; that they are also formally trialling Matrix, starting with the Bundeswehr (Ministry of Defense); we’ve been helping them out with the deployment too. It is not an exaggeration to suggest that we could end up with an official cross-government Matrix network, publicly federated with the wider Internet, for self-hosted encrypted decentralised instant messaging.  In fact Ulrich Kelber, the Bundesdatenschutzbeauftragte (Federal Data Protection Commissioner) for Germany &lt;a href=&quot;https:&#x2F;&#x2F;www.golem.de&#x2F;news&#x2F;whatsapp-matrix-oder-xmpp-bmi-sucht-einen-messenger-fuer-bundesbehoerden-1912-145326.html&quot;&gt;pointed out&lt;&#x2F;a&gt;: “You could even set up a privacy-friendly messenger service in cooperation with France, which in the medium term could represent a real alternative to existing products on the market as a pan-European solution”.&lt;&#x2F;p&gt;
&lt;p&gt;Alongside all this, &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2019&#x2F;12&#x2F;19&#x2F;welcoming-mozilla-to-matrix&#x2F;&quot;&gt;Mozilla announced&lt;&#x2F;a&gt; they are replacing the Moznet IRC network with Matrix; &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2019&#x2F;02&#x2F;20&#x2F;welcome-to-matrix-kde&#x2F;&quot;&gt;KDE joined Matrix&lt;&#x2F;a&gt; in Feb, &lt;a href=&quot;https:&#x2F;&#x2F;phabricator.wikimedia.org&#x2F;T230531&quot;&gt;Wikimedia&lt;&#x2F;a&gt; is getting set up on their server, and more and more massive players (including the largest in the world) keep getting in touch to find out how they can best get onboard Matrix - it’s incredibly exciting.  It also means that we were able to &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;2019&#x2F;10&#x2F;10&#x2F;new-vector-raises-8-5-m-to-accelerate-matrix-riot-modular&#x2F;&quot;&gt;raise capital&lt;&#x2F;a&gt; to keep folks employed to work on Matrix fulltime via &lt;a href=&quot;https:&#x2F;&#x2F;vector.im&quot;&gt;New Vector&lt;&#x2F;a&gt; and scale up &lt;a href=&quot;https:&#x2F;&#x2F;modular.im&quot;&gt;Modular.im&lt;&#x2F;a&gt; as a paid hosting platform - which massively helps support core Matrix development.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;2020&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#2020&quot; aria-label=&quot;Anchor link for: 2020&quot;&gt;🔗&lt;&#x2F;a&gt;2020&lt;&#x2F;h2&gt;
&lt;p&gt;All that remains now is to make some predictions for 2020.  Our main priorities are:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Get E2E enabled for private rooms by default (see above).&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Riot First-time User Experience (FTUE).  While we redesigned Riot’s UI in 2019, there are still far too many weird gotchas which trip over new users.  Starting in October we began a shift to completely change how Riot development works - transitioning the project to being led by the UX design team rather than the dev team, and ensuring that the design team considers the app holistically across all 3 platforms.  Above all else, our priority is to make it kick ass for normal non-technical mainstream users - not just for opensourcey wizards.  This is a tough ask, but we believe it’s literally make-or-break for the project in the long term if Matrix is ever to become as prevalent as Slack or WhatsApp, and we are throwing everything we have at it.  The second that E2E is on by default, the entirety of the Riot teams will be focusing on the mission to clear our &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vector-im&#x2F;riot-web&#x2F;issues?q=is%3Aopen+is%3Aissue+label%3Aproject%3Aftue&quot;&gt;FTUE backlog&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;RiotX. We’re shipping RiotX on Android as fast as we can - currently users on Riot&#x2F;Android are left high and dry and we need to do everything we can to finish RiotX and get them upgraded as rapidly as possible.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Communities.  Off the back of FTUE comes the importance of grouping rooms &amp;amp; users together into communities in a much better way than we have today.  This will be up next.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Synapse: shard the master by user&#x2F;room to avoid being it being bottlenecked on CPU.  We also need to apply smarter queue management on federation traffic to better reduce the memory footprint (and so eliminate complexity limits on small-footprint hosted servers!) - and we also desperately need to speed up joins.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Dendrite &amp;amp; P2P Matrix: the plan currently is to use Dendrite as the basis for our P2P Matrix experiments.  In practice this means making it federate using &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;blob&#x2F;rav&#x2F;proposal&#x2F;remove_mxids_from_events&#x2F;proposals&#x2F;1228-removing-mxids-from-events.md&quot;&gt;MSC1228&lt;&#x2F;a&gt;-semantics (no point in wasting time implementing the ‘legacy’ key management), and then experiment with hooking it up to various P2P transports (e.g. our low-bandwidth CoAP transport) and discovery systems (e.g. mDNS; libp2p; etc).  How we go about actually getting it into production depends entirely on how well the experiment goes; we could evolve Matrix to be hybrid CS&#x2F;P2P; we could treat it as a new protocol and bridge to it; who knows.  Watch this space...&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;MLS: figure out our plan for next-generation E2E - for better scaling, and better reliability, and what (if anything) we should do with &lt;a href=&quot;https:&#x2F;&#x2F;datatracker.ietf.org&#x2F;wg&#x2F;mls&#x2F;charter&#x2F;&quot;&gt;MLS&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Bridges: loads of work on the horizon to put a better UX on Bridging.  Bridge stability has improved enormously over the last year (thanks Half-Shot!) but we need to transition from being robust but ugly to being robust and polished...&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Spec: we need to work out how to go faster on reviewing MSCs (both our own and from the wider community).  While the governance process in general feels healthier than it’s ever been, empirically we’re not exactly burning through the MSC backlog - and this is in part that MSC work is squeezed in alongside the other dayjob stuff everyone’s working on. Finding the right balance between sculpting spec and sculpting code is tough, but we’re going to try to improve it in 2020.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;li&gt;
&lt;p&gt;Abuse &#x2F; Reputation: we want to empower users to make their own minds up about what content they want to see and not see on Matrix (or what they want to host or not host on their servers &#x2F; communities &#x2F; rooms).  &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;mjolnir&quot;&gt;Mjolnir&lt;&#x2F;a&gt; is a good start, but we’ll be continuing to work on this throughout the year.&lt;&#x2F;p&gt;
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Meanwhile, all the things listed above that we didn’t get to in 2019 are of course still options on the menu too.&lt;&#x2F;p&gt;
&lt;p&gt;So there you have it.  I’ve not even tried to talk about the amazing stuff that the wider Matrix community has been up to - whether that’s amazing new clients like &lt;a href=&quot;https:&#x2F;&#x2F;dittochat.org&#x2F;&quot;&gt;Ditto&lt;&#x2F;a&gt; (React Native!) or &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;kiliankoe&#x2F;nio&quot;&gt;Nio!&lt;&#x2F;a&gt; (SwiftUI), or new bridges like &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;tulir&#x2F;mautrix-facebook&quot;&gt;mautrix-facebook&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;tulir&#x2F;mautrix-hangouts&quot;&gt;mautrix-hangouts&lt;&#x2F;a&gt;, or even poljar’s secret rewrite of &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;poljar&#x2F;weechat-matrix-rs&quot;&gt;weechat-matrix in Rust&lt;&#x2F;a&gt;; your best bet there is to skim through &lt;a href=&quot;https:&#x2F;&#x2F;matrix.org&#x2F;blog&#x2F;category&#x2F;this-week-in-matrix&#x2F;&quot;&gt;TWIM&lt;&#x2F;a&gt;.  Huge undying thanks go out though to everyone who builds on Matrix and keeps the ecosystem maturing and growing (especially while we’re scurrying around shoring up the foundations) - there’s simply no point in Matrix as a protocol without the vibrant community building on top.&lt;&#x2F;p&gt;
&lt;p&gt;All told, it’s been a bit of an epic year (both in terms of wins and fails), and all that remains is to thank &lt;em&gt;everyone&lt;&#x2F;em&gt; who continues to use Matrix (particularly our &lt;a href=&quot;https:&#x2F;&#x2F;www.patreon.com&#x2F;matrixdotorg&quot;&gt;Patreon&lt;&#x2F;a&gt; supporters) for their ongoing support and for helping the project accelerate forwards.  More than ever before, the world needs free and open communication open to all; the age of proprietary communication silos may be coming to an end - consigned to live alongside AOL CDs and Compuserve IDs in the history books.  With your support, Matrix can provide a decent mainstream yet decentralised alternative - and we’ll do everything we can to make that happen in 2020.&lt;&#x2F;p&gt;
&lt;p&gt;Happy holidays!&lt;&#x2F;p&gt;
&lt;p&gt;Matthew, Amandine &amp;amp; the whole Matrix.org team.&lt;&#x2F;p&gt;
</content>
</entry>

    
<entry xml:lang="en">
    <title>The 2018 Matrix Holiday Special!</title>
    <published>2018-12-25T00:00:00+00:00</published>
    <updated>2018-12-25T00:00:00+00:00</updated>
    <author>
      <name>Matthew Hodgson</name>
    </author>
    <link rel="alternate" href="https://c956b204.matrix-website.pages.dev/blog/2018/12/25/the-2018-matrix-holiday-special/" type="text/html"/>
    <id>https://c956b204.matrix-website.pages.dev/blog/2018/12/25/the-2018-matrix-holiday-special/</id>
    <content type="html">&lt;p&gt;Hi all,&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s that time again where we break out the mince pies and brandy butter (at least for those of us in the UK) and look back on the year to see how far Matrix has come, as well as anticipate what 2019 may bring!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;overview&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#overview&quot; aria-label=&quot;Anchor link for: overview&quot;&gt;🔗&lt;&#x2F;a&gt;Overview&lt;&#x2F;h3&gt;
&lt;p&gt;It&#x27;s fair to say that 2018 has been a pretty crazy year.  We have had one overriding goal: to take the &lt;a href=&quot;&#x2F;blog&#x2F;2018&#x2F;01&#x2F;29&#x2F;status-partners-up-with-new-vector-fueling-decentralised-comms-and-the-matrix-ecosystem&#x2F;&quot;&gt;funding&lt;&#x2F;a&gt; we received in January, stabilise and freeze the protocol and get it and the reference implementations out of beta and to a 1.0 - to provide a genuinely open and decentralised mainstream alternative to the likes of Slack, Discord, WhatsApp etc.  What&#x27;s so crazy about that, you might ask?&lt;&#x2F;p&gt;
&lt;p&gt;Well, in parallel with this we&#x27;ve also seen adoption of Matrix accelerating ahead of our dev plan at an unprecedented speed: with France selecting Matrix to power the communication infrastructure of its whole public sector - first &lt;a href=&quot;&#x2F;blog&#x2F;2018&#x2F;04&#x2F;26&#x2F;matrix-and-riot-confirmed-as-the-basis-for-frances-secure-instant-messenger-app&#x2F;&quot;&gt;trialling over the summer&lt;&#x2F;a&gt;, and now &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;matrixdotorg&#x2F;status&#x2F;1070392608801910784&quot;&gt;confirmed for full roll-out&lt;&#x2F;a&gt; as of a few weeks ago.  Meanwhile there are several other similar-sized projects on the horizon which we can&#x27;t talk about yet.  We&#x27;ve had the growing pains of establishing &lt;a href=&quot;https:&#x2F;&#x2F;vector.im&quot;&gt;New Vector&lt;&#x2F;a&gt; as a startup in order to hire the core team and support these projects.  We&#x27;ve launched &lt;a href=&quot;https:&#x2F;&#x2F;modular.im&quot;&gt;Modular&lt;&#x2F;a&gt; to provide professional-quality SaaS Matrix hosting for the wider community and help fund the team.  And most importantly, we&#x27;ve also been establishing the non-profit &lt;a href=&quot;&#x2F;blog&#x2F;2018&#x2F;10&#x2F;29&#x2F;introducing-the-matrix-org-foundation-part-1-of-2&#x2F;&quot;&gt;Matrix.org Foundation&lt;&#x2F;a&gt; to formalise the open governance of the Matrix protocol and protect and isolate it from any of the for-profit work.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;However: things have just about come together.  Almost all the spec work for 1.0 is done and we are now aiming to get a 1.0 released in time by the end of January (in time for FOSDEM).  Meanwhile Synapse has improved massively in terms of performance and stability (not least having migrated over to &lt;a href=&quot;&#x2F;blog&#x2F;2018&#x2F;12&#x2F;21&#x2F;porting-synapse-to-python-3&#x2F;&quot;&gt;Python 3&lt;&#x2F;a&gt;); Riot&#x27;s spectacular redesign is now &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@RiotChat&#x2F;redesign-experimenters-needed-afa7c2d4c858&quot;&gt;available for testing&lt;&#x2F;a&gt; right now; E2E encryption is more stable than ever with the usability rework &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-js-sdk&#x2F;compare&#x2F;develop...uhoreg:e2e_cross-signing&quot;&gt;landing&lt;&#x2F;a&gt; as we speak.  And we&#x27;ve even got a full rewrite of Riot&#x2F;Android in the wings.&lt;&#x2F;p&gt;
&lt;p&gt;But it&#x27;s certainly been an interesting ride.  Longer-term spec work has been delayed by needing to apply band-aids to mitigate abuse of the outstanding issues.  Riot redesign was pushed back considerably due to prioritising Riot performance over UX. The E2E UX work has forced us to consider E2E holistically… which does not always interact well with structuring the dev work into bite-sized chunks.  Dendrite has generally been idling whilst we instead pour most of our effort into getting to 1.0 on Synapse (rather than diluting 1.0 work across both projects). These tradeoffs have been hard to make, but hopefully we have chosen the correct path in the end.&lt;&#x2F;p&gt;
&lt;p&gt;Overall, as we approach 1.0, the project is looking better than ever - hopefully everyone has seen both Riot and Synapse using less RAM and being more responsive and stable, E2E being more reliable, and anyone who has played with the &lt;a href=&quot;https:&#x2F;&#x2F;riot.im&#x2F;experimental&quot;&gt;Riot redesign&lt;&#x2F;a&gt; beta should agree that it is light-years ahead of yesterday&#x27;s Riot and something which can genuinely surpass today&#x27;s centralised proprietary incumbents. And that is unbelievably exciting :D&lt;&#x2F;p&gt;
&lt;p&gt;We&#x27;d like to thank everyone for continuing to support Matrix - especially our &lt;a href=&quot;http:&#x2F;&#x2F;patreon.com&#x2F;matrixdotorg&quot;&gt;Patreon&lt;&#x2F;a&gt; &amp;amp; &lt;a href=&quot;http:&#x2F;&#x2F;liberapay.com&#x2F;matrixdotorg&quot;&gt;Liberapay&lt;&#x2F;a&gt; supporters, whose donations continue to be critical for helping fund the core dev team, and also those who are supporting the project indirectly by hosting homeservers with &lt;a href=&quot;https:&#x2F;&#x2F;modular.im&quot;&gt;Modular&lt;&#x2F;a&gt;.  We are going to do everything humanly possible to ship 1.0 over the coming weeks, and then the sky will be the limit!&lt;&#x2F;p&gt;
&lt;p&gt;Before going into what else 2019 will hold, however, let&#x27;s take the opportunity to give a bit more detail on the various core team projects which landed in 2018…&lt;&#x2F;p&gt;
&lt;h2 id=&quot;france&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#france&quot; aria-label=&quot;Anchor link for: france&quot;&gt;🔗&lt;&#x2F;a&gt;France&lt;&#x2F;h2&gt;
&lt;p&gt;DINSIC (France&#x27;s Ministry of Digital, IT &amp;amp; Comms) have been busy building out their massive cross-government Matrix deployment and custom Matrix client throughout most of the year.  After the &lt;a href=&quot;&#x2F;blog&#x2F;2018&#x2F;04&#x2F;26&#x2F;matrix-and-riot-confirmed-as-the-basis-for-frances-secure-instant-messenger-app&#x2F;&quot;&gt;announcement in April&lt;&#x2F;a&gt;, this started off with an initial deployment over the summer, and is now moving towards the full production rollout, as confirmed at the Paris Open Source Summit a few weeks ago by Mounir Mahjoubi, the Secretary of State of Digital.  All the press coverage about this ended up in French, with the biggest writeup being at &lt;a href=&quot;https:&#x2F;&#x2F;www.cio-online.com&#x2F;actualites&#x2F;lire-mounir-mahjoubi%C2%A0-%C2%A0le-libre-n-est-pas-toujours-moins-cher-mais-c-est-toujours-plus-transparent%C2%A0-10842.html&quot;&gt;CIO Online&lt;&#x2F;a&gt;, but the main mention of Matrix (badly translated from French) is:&lt;&#x2F;p&gt;
&lt;p style=&quot;padding-left: 30px;&quot;&gt;&lt;i&gt;Denouncing the use of tools such as WhatsApp; a practice that has become commonplace within ministerial offices, Mounir Mahjoubi announced the launch in production of Tchap, based on Matrix and Riot: an instant messaging tool that will be provided throughout the administrations. So, certainly, developing a product can have a certain cost. Integrating it too. &quot;Free is not always cheaper but it&#x27;s always more transparent,&quot; admitted the Secretary of State.
&lt;&#x2F;i&gt;&lt;&#x2F;p&gt;
The project really shows off Matrix at its best, with up to 60 different deployments spread over different ministries and departments; multiple clusters per Ministry; end-to-end encryption enabled by default (complete with e2e-aware antivirus scanning); multiple networks for different classes of traffic; and the hope of federating with the public Matrix network once the S2S API is finalised and suitable border gateways are available.  It&#x27;s not really our project to talk about, but we&#x27;ll try to share as much info as we can as roll-out continues.
&lt;h2 id=&quot;the-matrix-specification&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-matrix-specification&quot; aria-label=&quot;Anchor link for: the-matrix-specification&quot;&gt;🔗&lt;&#x2F;a&gt;The Matrix Specification&lt;&#x2F;h2&gt;
&lt;p&gt;A major theme throughout the year has been polishing the &lt;a href=&quot;&#x2F;docs&#x2F;spec&quot;&gt;Matrix Spec&lt;&#x2F;a&gt; itself for its first full stable release, having had more than enough time to see which bits work in practice now and which bits need rethinking.  This all kicked off with the &lt;a href=&quot;&#x2F;blog&#x2F;2018&#x2F;05&#x2F;17&#x2F;introducing-matrix-specification-changes&#x2F;&quot;&gt;creation of the Matrix Spec Change process&lt;&#x2F;a&gt; back in May, which provides a formal process for reviewing and accepting contributions from anyone into the spec.  Getting the balance right between agility and robustness has been quite tough here, especially pre-1.0 where we&#x27;ve needed to move rapidly to resolve the remaining long-lived sticking points.  However, a process like this risks encouraging the classic “&lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Perfect_is_the_enemy_of_good&quot;&gt;Perfect is the Enemy of Good&lt;&#x2F;a&gt;” problem, as all and sundry jump in to apply their particular brand of perfectionism to the spec (and&#x2F;or the process around it) and risk smothering it to death with enthusiasm.  So we&#x27;ve ended up iterating a few times on the process and hopefully now converged on an approach which will work for 1.0 and beyond. If you haven&#x27;t checked out the current &lt;a href=&quot;&#x2F;docs&#x2F;spec&#x2F;proposals&quot;&gt;proposals guide&lt;&#x2F;a&gt; please give it a look, and feel free to marvel at all the MSCs in flight.  You can also see a &lt;a href=&quot;&#x2F;~richardv&#x2F;proposal_news.html&quot;&gt;quick and dirty timeline of all the MSC status changes&lt;&#x2F;a&gt; since we introduced the process, to get an idea of how it&#x27;s all been progressing.&lt;&#x2F;p&gt;
&lt;p&gt;In August we had a big sprint to cut &lt;a href=&quot;&#x2F;blog&#x2F;2018&#x2F;09&#x2F;03&#x2F;matrix-spec-update-august-2018&#x2F;&quot;&gt;stable “r0” releases of all the APIs&lt;&#x2F;a&gt; of the spec which had not yet reached a stable release (i.e. all apart from the Client-Server API, which has been stable since Dec 2015 - hence in part the large number of usable independent Matrix clients relative to the other bits of the ecosystem).  In practice, we managed to release 3 out of the 4 remaining APIs - but needed more time to solve the remaining blocking issues with the Server-Server API. So since August (modulo operational and project distractions) we&#x27;ve been plugging away on the S2S API.  &lt;&#x2F;p&gt;
&lt;p&gt;The main blocking issue for a stable S2S API has been State Resolution. This is the fundamental algorithm used to determine the state of a given room whenever a race or partition happens between the servers participating in it.  For instance: if Alice kicks Bob on her server at the same time as Charlie ops Bob on his server, who should win? It&#x27;s vital that all servers reach the same conclusion as to the state of the room, and we don&#x27;t want servers to have to replicate a full copy of the room&#x27;s history (which could be massive) to reach a consistent conclusion.  Matrix&#x27;s original state resolution algorithm dates back to the initial usable S2S implementation at the beginning of 2015 - but over time deficiencies in the algorithm became increasingly apparent. The most obvious issue is the “&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;2432&quot;&gt;Hotel California&lt;&#x2F;a&gt;” bug, where users can be spontaneously re-joined to a room they&#x27;ve previously left if the room&#x27;s current state is merged with an older copy of the room on another server and the ‘wrong&#x27; version wins the conflict - a so-called state-reset.&lt;&#x2F;p&gt;
&lt;p&gt;After a lot of thought we ended up proposing an &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;blob&#x2F;erikj&#x2F;state_res_rejections&#x2F;proposals&#x2F;1442-state-resolution.md&quot;&gt;all new State Resolution algorithm&lt;&#x2F;a&gt; in July 2018, nicknamed State Resolution Reloaded.  This extends the original algorithm to consider the ‘auth chain&#x27; of state events when performing state resolution (i.e. the sequence of events that a given state event cites as evidence of its validity) - as well as addressing a bunch of other issues.  For those wishing to understand in more detail, there&#x27;s &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;blob&#x2F;erikj&#x2F;state_res_rejections&#x2F;proposals&#x2F;1442-state-resolution.md&quot;&gt;the MSC&lt;&#x2F;a&gt; itself, the formal terse description of the algorithm now merged into the &lt;a href=&quot;&#x2F;docs&#x2F;spec&#x2F;server_server&#x2F;unstable.html#state-resolution-algorithm-for-version-2-rooms&quot;&gt;unstable S2S spec&lt;&#x2F;a&gt; - or alternatively there&#x27;s an excellent &lt;a href=&quot;https:&#x2F;&#x2F;matrix.uhoreg.ca&#x2F;stateres&#x2F;reloaded.html&quot;&gt;step-by-step explanation and guided example&lt;&#x2F;a&gt; from uhoreg (warning: contains Haskell :)  Or you can watch Erik and Matthew try to explain it all on &lt;a href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;f6ZdmPSUUBA&quot;&gt;Matrix Live&lt;&#x2F;a&gt; back in July.&lt;&#x2F;p&gt;
&lt;p&gt;Since the initial proposal in July, the algorithm has been proofed out in a &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-test-state-resolution-ideas&quot;&gt;test jig&lt;&#x2F;a&gt;, iterated on some more to better specify &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;1693&quot;&gt;how to handle rejected events&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;4040&quot;&gt;implemented in Synapse&lt;&#x2F;a&gt;, and is now ready to roll.  The only catch is that to upgrade to it we&#x27;ve had to introduce the concept of &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;1516&#x2F;files&quot;&gt;room versioning&lt;&#x2F;a&gt;, and to flush out historical issues we require you to &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;blob&#x2F;rav&#x2F;room_upgrades&#x2F;proposals&#x2F;1501-room-version-upgrades.md&quot;&gt;re-create rooms to upgrade them&lt;&#x2F;a&gt; to the new resolution algorithm. Getting the logistics in place for this is a massive pain, but we&#x27;ve got an approach now which should be sufficient. Clients will be free to smooth over the transition in the UI as gracefully as possible (and in fact Riot has this already hooked up).  So: watch this space as v2 rooms with all-new state resolution in the coming weeks!&lt;&#x2F;p&gt;
&lt;p&gt;Otherwise, there are a bunch of other issues in the S2S API which we are still working through (e.g. &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;blob&#x2F;erikj&#x2F;event_id_hashes&#x2F;proposals&#x2F;1640-event-id-as-hashes.md&quot;&gt;changing event IDs to be hashes&lt;&#x2F;a&gt; of event contents to avoid lying about IDs, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;1711&quot;&gt;switching to use normal X.509 certificates for federation&lt;&#x2F;a&gt; and so resolve problems with Perspectives, etc).  &lt;&#x2F;p&gt;
&lt;p&gt;Once these land and are implemented in Synapse over the coming weeks, we will be able to finally declare a 1.0!&lt;&#x2F;p&gt;
&lt;p&gt;Also on the spec side of things, it&#x27;s worth noting that a lot of effort went into improving performance for clients in the form of the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;issues&#x2F;1227&quot;&gt;Lazy Loading Members MSC&lt;&#x2F;a&gt;.  This ended up consuming a lot of time over the summer as we updated Synapse and the various matrix-*-sdks (and thus Riot) to only calculate and send details to the clients about members who are currently talking in a room, whereas previously we sent the entire state of the room to the client (even including users who had left). The end result however is a 3-5x reduction in RAM on Riot, and a 3-5x speedup on initial sync.  The current MSC is currently being &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;1758&quot;&gt;merged as we speak&lt;&#x2F;a&gt; into the main spec (thanks Kitsune!) for inclusion in upcoming CS API 0.5.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-matrix-org-foundation-cic&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-matrix-org-foundation-cic&quot; aria-label=&quot;Anchor link for: the-matrix-org-foundation-cic&quot;&gt;🔗&lt;&#x2F;a&gt;The Matrix.org Foundation (CIC!)&lt;&#x2F;h2&gt;
&lt;p&gt;Alongside getting the open spec process up and running, we&#x27;ve been establishing The Matrix.org Foundation as an independent non-profit legal entity responsible for neutrally safeguarding the Matrix spec and evolution of the protocol.  This kicked off in June with the “&lt;a href=&quot;&#x2F;blog&#x2F;2018&#x2F;06&#x2F;20&#x2F;towards-open-governance-for-matrix-org&#x2F;&quot;&gt;Towards Open Governance&lt;&#x2F;a&gt;” blog post, and continued with the &lt;a href=&quot;&#x2F;blog&#x2F;2018&#x2F;10&#x2F;29&#x2F;introducing-the-matrix-org-foundation-part-1-of-2&#x2F;&quot;&gt;formal incorporation&lt;&#x2F;a&gt; of The Matrix.org Foundation in October.  Since then, we&#x27;ve spent a lot of time with the non-profit lawyers evolving &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;issues&#x2F;1318&quot;&gt;MSC1318&lt;&#x2F;a&gt; into the final Articles of Association (and other guidelines) for the Foundation.  This work is basically solved now; it just needs MSC1318 to be updated with the conclusions (which we&#x27;re running late on, but is top of Matthew&#x27;s MSC todo list).&lt;&#x2F;p&gt;
&lt;p&gt;In other news, we have confirmation that the &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Community_interest_company&quot;&gt;Community Interest Company&lt;&#x2F;a&gt; (CIC) status for The Matrix.org Foundation has been approved - this means that the CIC Regulator has independently reviewed the initial Articles of Association and approved that they indeed lock the mission of the Foundation to be non-profit and to act solely for the good of the wider online community.  In practice, this means that the Foundation will be formally renamed The Matrix.org Foundation C.I.C, and provides a useful independent safeguard to ensure the Foundation remains on track.&lt;&#x2F;p&gt;
&lt;p&gt;The remaining work on the Foundation is:&lt;&#x2F;p&gt;
&lt;ul&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Update and land MSC1318, particularly on clarifying the relationship between the legal Guardians (Directors) of the Foundation and the technical members of the core spec team, and how funds of the Foundation will be handled.
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Update the Articles of Association of the Foundation based on the end result of MSC1318
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Transfer any Matrix.org assets over from New Vector to the Foundation.  Given Matrix&#x27;s code is all open source, there isn&#x27;t much in the way of assets - we&#x27;re basically talking about the matrix.org domain and website itself.
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Introduce the final Guardians for the Foundation.
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
We&#x27;ll keep you posted with progress as this lands over the coming months.
&lt;h2 id=&quot;riot&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#riot&quot; aria-label=&quot;Anchor link for: riot&quot;&gt;🔗&lt;&#x2F;a&gt;Riot&lt;&#x2F;h2&gt;
&lt;p&gt;2018 has been a bit of a chrysalis year for Riot: the vast majority of work has been going into the &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@RiotChat&#x2F;a-sneak-peek-at-a-whole-new-riot-im-1114df653782&quot;&gt;massive redesign&lt;&#x2F;a&gt; we started in May to improve usability &amp;amp; cosmetics, performance, stability, and E2E encryption usability improvements.  We&#x27;ve consciously spent most of the year feature frozen in order to polish what we already have, as we&#x27;ve certainly been guilty in the past of landing way too many features without necessarily applying the needed amount of UX polish.&lt;&#x2F;p&gt;
&lt;p&gt;However, as of today, we&#x27;re super-excited to announce that Riot&#x27;s redesign is at the point where the intrepid can start experimenting with it - in fact, internally most of the team has switched over to dogfooding (testing) the redesign as of a week or so ago.  Just shut down your current copy of Riot&#x2F;Web or Desktop and go to &lt;a href=&quot;https:&#x2F;&#x2F;riot.im&#x2F;experimental&quot;&gt;https:&#x2F;&#x2F;riot.im&#x2F;experimental&lt;&#x2F;a&gt; instead if you want to experiment (we don&#x27;t recommend running both at the same time).  Please note that it is still work-in-progress and there&#x27;s a lot of polish still to land and some cosmetic bugs still hanging around, but it&#x27;s definitely at the point of feeling better than the old app.  Most importantly, please provide feedback (by hitting the lifesaver-ring button at the bottom left) to let us know how you get on. See the &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@RiotChat&#x2F;redesign-experimenters-needed-afa7c2d4c858&quot;&gt;Riot blog&lt;&#x2F;a&gt; for more details!&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2018&#x2F;12&#x2F;Screenshot-2018-12-25-at-04.00.44.avif&quot;&gt;&lt;img class=&quot;aligncenter size-large wp-image-3854&quot; src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2018&#x2F;12&#x2F;Screenshot-2018-12-25-at-04.00.44-1024x578.png&quot; alt=&quot;&quot; width=&quot;1024&quot; height=&quot;578&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile, on the performance and stability side of things - Lazy Loading (see above) made a &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@RiotChat&#x2F;riot-im-web-0-17-and-ios-0-7-6-smaller-footprint-faster-launch-5ddd18a65abb&quot;&gt;massive difference&lt;&#x2F;a&gt; to performance on all platforms; shrinking RAM usage by 3-5x and similarly speeding up launch and initial sync times.  Ironically, this ended up pushing back the redesign work, but hopefully the performance improvements will have been noticeable in the interim.  We also &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vector-im&#x2F;riot-web&#x2F;issues&#x2F;6477&quot;&gt;switched&lt;&#x2F;a&gt; the entire rich text composer from using Facebook&#x27;s &lt;a href=&quot;https:&#x2F;&#x2F;draftjs.org&#x2F;&quot;&gt;Draft.js&lt;&#x2F;a&gt; library to instead use &lt;a href=&quot;https:&#x2F;&#x2F;www.slatejs.org&quot;&gt;Slate.js&lt;&#x2F;a&gt; (which has generally been a massive improvement for stability and maintainability, although took &lt;em&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-react-sdk&#x2F;pull&#x2F;1890&quot;&gt;ages&lt;&#x2F;a&gt;&lt;&#x2F;em&gt; to land - huge thanks to t3chguy for getting it over the line). Meanwhile Travis has been blitzing through a massive list of key “&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vector-im&#x2F;riot-web&#x2F;projects&#x2F;12&quot;&gt;First Impression&lt;&#x2F;a&gt;” bugs to ensure that as many of Riot&#x27;s most glaring usability gotchas are solved.&lt;&#x2F;p&gt;
&lt;p&gt;We also welcomed ever-popular &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@RiotChat&#x2F;stickers-are-here-introducing-riot-im-0-15-for-web-desktop-284c32b93acc&quot;&gt;Stickers&lt;&#x2F;a&gt; to the fold - the first instance of per-account rather than per-room widgets, which ended up requiring a lot of new infrastructure in both Riot and the underlying integration manager responsible for hosting the widgets.  But judging by how popular they are, the effort seems to be worth it - and paves the way for much more exciting interactive widgets and integrations in future!&lt;&#x2F;p&gt;
&lt;p&gt;An unexpectedly large detour&#x2F;distraction came in the form of GDPR back in May - we spent a month or so running around ensuring that both Riot and Matrix are GDPR compliant (including the necessary legal legwork to establish how GDPR even applies to a decentralised technology like Matrix).  If you missed all that fun, you can &lt;a href=&quot;&#x2F;blog&#x2F;2018&#x2F;05&#x2F;08&#x2F;gdpr-compliance-in-matrix&#x2F;&quot;&gt;read about it here&lt;&#x2F;a&gt;.  Hopefully we won&#x27;t have to do anything like that again any time soon...&lt;&#x2F;p&gt;
&lt;p&gt;And finally: on the mobile side, much of the team has been distracted helping out France with their Matrix deployment.  However, we&#x27;ve been plugging away on Riot&#x2F;Mobile, keeping pace with the development on Riot&#x2F;Web - but most excitingly, we&#x27;ve also found time to experiment with a &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vector-im&#x2F;riot-android-redesign-PoC&#x2F;tree&#x2F;develop&quot;&gt;complete rewrite of Riot&#x2F;Android&lt;&#x2F;a&gt; in Kotlin, using Realm and Rx (currently nicknamed Riot X).  The rewrite was originally intended as a test-jig for experimenting with the redesign on mobile, but it&#x27;s increasingly becoming a fully fledged Matrix client… which launches and syncs over 5x faster than today&#x27;s Riot&#x2F;Android.  If you&#x27;re particularly intrepid you should be able to run the app by checking out the project in Android Studio and hitting ‘run&#x27;. We expect the rewrite to land properly in the coming months - watch this space for progress!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;e2e-encryption&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#e2e-encryption&quot; aria-label=&quot;Anchor link for: e2e-encryption&quot;&gt;🔗&lt;&#x2F;a&gt;E2E Encryption&lt;&#x2F;h2&gt;
&lt;p&gt;One of the biggest projects this year has been to get E2E encryption out of beta and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vector-im&#x2F;riot-web&#x2F;issues&#x2F;6779&quot;&gt;turned on by default&lt;&#x2F;a&gt;.  Now, whilst the encryption itself in Matrix has been &lt;a href=&quot;&#x2F;blog&#x2F;2016&#x2F;11&#x2F;21&#x2F;matrixs-olm-end-to-end-encryption-security-assessment-released-and-implemented-cross-platform-on-riot-at-last&#x2F;&quot;&gt;cryptographically robust&lt;&#x2F;a&gt; since 2016 - its usability has been minimal at best, and we&#x27;d been running around polishing the underlying implementation rather than addressing the UX.  However, this year that changed, as we opened a war on about 6 concurrent battlefronts to address the remaining issues. These are:&lt;&#x2F;p&gt;
&lt;ul&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Holistic UX.  Designing a coherent, design-led UX across all of the encryption and key-management functionality.  Nad (who joined Matrix as a fulltime Lead UI&#x2F;UX designer in August) has been leading the charge on this - you can see a &lt;a href=&quot;&#x2F;blog&#x2F;2018&#x2F;11&#x2F;02&#x2F;user-experience-preview-end-to-end-encryption-by-default&#x2F;&quot;&gt;preview of the end result&lt;&#x2F;a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt; here.  Meanwhile, Dave and Ryan are working through implementing it as we speak.
&lt;&#x2F;span&gt;
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Decryption failures (UISIs).  Whenever something goes wrong with E2E encryption, the symptoms are generally the same: you find yourself unable to decrypt other people&#x27;s messages.  We&#x27;ve been plugging away chasing these down - for instance, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-js-sdk&#x2F;pull&#x2F;597&quot;&gt;switching from localStorage to IndexedDB&lt;&#x2F;a&gt; in Riot&#x2F;Web for storing encryption state (to make it harder for multiple tabs to collide and corrupt your encryption state); providing mechanisms to &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-js-sdk&#x2F;pull&#x2F;780&quot;&gt;unwedge Olm sessions&lt;&#x2F;a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt; which have got corrupted (e.g. by restoring from backup); and many others.  We also added full telemetry to track the number of UISIs people are seeing in practice - and the good news is that over the course of the year their occurrence has been steadily reducing.  The bad news is that there are still some edge cases left: so please, whenever you fail to decrypt a message, please make sure you submit a bug report and debug logs from *both* the sender and receiving device.  The end is definitely in sight on these, however, and good news is other battlefronts will also help mitigate UISIs.
&lt;&#x2F;span&gt;
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Incremental Key Backup.  Previously, if you only used one device (e.g. your phone) and you lost that phone, you would lose all your E2E history unless you were in the habit of explicitly manually backing up your keys.  Nowadays, we have the ability to optionally let users encrypt their keys with a passphrase (or recovery key) and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;1703&quot;&gt;constantly upload them to the server&lt;&#x2F;a&gt; for safe keeping.  This was a significant chunk of work, but has actually &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-react-sdk&#x2F;pull&#x2F;2169&quot;&gt;landed already&lt;&#x2F;a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt; in Riot&#x2F;Web and Riot&#x2F;iOS, but is hidden behind a “Labs” feature flag in Settings whilst we test it and sort out the final UX.
&lt;&#x2F;span&gt;
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Cross-signing Keys. Previously, the only way to check whether you were talking to a legitimate user or an imposter was to independently compare the fingerprints of the keys of the device they claim to be using.  In the near future, we will let users prove that they own their devices by &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;pull&#x2F;1756&quot;&gt;signing them with a per-user identity key&lt;&#x2F;a&gt;, so you only have to do this check once. We&#x27;ve actually &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-js-sdk&#x2F;pull&#x2F;795&quot;&gt;already implemented&lt;&#x2F;a&gt; one iteration of cross-signing, but this &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;issues&#x2F;1680&quot;&gt;allowed arbitrary devices for a given user to attest each other&lt;&#x2F;a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt; (which creates a directed graph of attestations, and associated problems with revocations), hence switching to a simpler approach.
&lt;&#x2F;span&gt;
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Improved Verification. Verifying keys by manually comparing elliptic key fingerprints is incredibly cumbersome and tedious.  Instead, we have proposals for using &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;issues&#x2F;1267&quot;&gt;Short Authentication String&lt;&#x2F;a&gt; comparisons and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;issues&#x2F;1543&quot;&gt;QR-code scanning&lt;&#x2F;a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt; to simplify the process.  uhoreg is currently implementing these as we speak :)
&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Search.  Solving encrypted search is Hard, but t3chguy did a lot of work earlier in the year to build out &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-search&quot;&gt;matrix-search&lt;&#x2F;a&gt;: essentially a js-sdk bot which you can host, hand your keys to, and will archive your history using a golang full-text search engine (bleve) and expose a search interface that replaces Synapse&#x27;s default one.  Of all the battlefronts this one is progressing the least right now, but the hope is to integrate it into Riot&#x2F;Desktop or other clients so that folks who want to index all their conversations have the means to do so.  On the plus side, all the necessary building blocks are available thanks to t3chguy&#x27;s hacking.
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
So, TL;DR: E2E is hard, but the end is in sight thanks to a lot of blood, sweat and tears.  It&#x27;s possible that we may have opened up too many battlefronts in finishing it off rather than landing stuff gradually.  But it should be transformative when it all lands - and we&#x27;ll finally be able to turn it on by default for private conversations.  Again, we&#x27;re aiming to pull this together by the end of January.
&lt;p&gt;Separately, we&#x27;ve been keeping a close eye on &lt;a href=&quot;https:&#x2F;&#x2F;datatracker.ietf.org&#x2F;wg&#x2F;mls&#x2F;about&#x2F;&quot;&gt;MLS&lt;&#x2F;a&gt; - the IETF&#x27;s activity around standardising scalable group E2E encryption.  MLS has a lot of potential and could provide algorithmic improvements over Olm &amp;amp; Megolm (whist paving the way for interop with other MLS-encrypted comms systems).  But it&#x27;s also quite complicated, and is at risk of designing out support of decentralised environments. For now, we&#x27;re obviously focusing on ensuring that Matrix is rock solid with Olm &amp;amp; Megolm, but once we hit that 1.0 we&#x27;ll certainly be experimenting a bit with MLS too.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;homeservers&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#homeservers&quot; aria-label=&quot;Anchor link for: homeservers&quot;&gt;🔗&lt;&#x2F;a&gt;Homeservers&lt;&#x2F;h2&gt;
&lt;p&gt;The story of the Synapse team in 2018 has been one of alternating between solving scaling and performance issues to support the ever-growing network (especially the massive matrix.org server)... and dealing with S2S API issues; both in terms of fixing the design of State Resolution, Room Versioning etc (see the Spec section above) and doing stop-gap fixes to the current implementation.&lt;&#x2F;p&gt;
&lt;p&gt;Focusing on the performance side of things, the main wins have been:&lt;&#x2F;p&gt;
&lt;ul&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Splitting yet more functionality out into worker processes which can scale independently of the master Synapse process.
&lt;&#x2F;span&gt;
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Yet more profiling and optimisation (particularly caching).  Between this and the worker split-out we were able to resolve the performance ceiling that we hit over the summer, and as of right now matrix.org feels relatively snappy.
&lt;&#x2F;span&gt;
&lt;&#x2F;span&gt;
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;Lazy Loading Members.
&lt;&#x2F;span&gt;
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;a href=&quot;&#x2F;blog&#x2F;2018&#x2F;12&#x2F;21&#x2F;porting-synapse-to-python-3&#x2F;&quot;&gt;Python 3&lt;&#x2F;a&gt;.  As everyone should have seen by now, Synapse is now Python 3 by default as of 0.34, which provides significant RAM and CPU improvements across the board as well as a path forwards given Python 2&#x27;s planned demise at the end of 2019.  If you&#x27;re not running your Synapse on Python 3 today, you are officially doing it wrong.
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
There are also some major improvements which haven&#x27;t fully landed yet:
&lt;span style=&quot;font-weight: 400;&quot;&gt;
&lt;&#x2F;span&gt;
&lt;ul&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;State compression.  We have a new algorithm for storing room state which is ~10x more efficient than the current one.  We&#x27;ll be migrating to it in by default in future. If you&#x27;re feeling particularly intrepid you can actually &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;rust-synapse-compress-state&quot;&gt;manually use it today&lt;&#x2F;a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt; (but we don&#x27;t recommend it yet).
&lt;&#x2F;span&gt;
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Incremental state resolution.  Before we got sucked into redesigning state resolution in general, Erik came up with a &lt;a href=&quot;&#x2F;_matrix&#x2F;media&#x2F;v1&#x2F;download&#x2F;jki.re&#x2F;ubNfLtrmXZMmlGjJZYPnlHHy&quot;&gt;proof that it&#x27;s possible to memoize state resolution&lt;&#x2F;a&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt; and incrementally calculate it whenever state is resolved in a room rather than recalculate it from scratch each time (as is the current implementation).  This would be a significant performance improvement, given non-incremental state res can consume a lot of CPU (making everything slow down when there are lots of room extremities to resolve), and can consume a lot of RAM and has been one of the reasons that synapse&#x27;s RAM usage can sometimes spike badly. The good news is that the new state res algorithm was designed to also work in this manner.  The bad news is that we haven&#x27;t yet got back to implementing it yet, given the new algorithm is only just being rolled out now.
&lt;&#x2F;span&gt;
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;issues&#x2F;1229&quot;&gt;Chunks&lt;&#x2F;a&gt;.  Currently, Synapse models all events in a room as being part of a single DAG, which can be problematic if you can see lots of disconnected sections of the DAG (e.g. due to intermittent connectivity somewhere in the network), as Synapse will frantically try to resolve all these disconnected sections of DAG together.  Instead, a better solution is to explicitly model these sections of DAG as separate entities called Chunks, and not try to resolve state between disconnected Chunks but instead consider them independent fragments of the room - and thus simplify state resolution calculations significantly. It also fixes an S2S API design flaw where previously we trusted the server to state the ordering (depth) of events they provided; with chunks, the receiving server can keep track of that itself by tracking a DAG of chunks (as well as the normal event DAG within the chunks).  Now, most of the work for this happened already, but is &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;3785&quot;&gt;currently parked&lt;&#x2F;a&gt; until new state res has landed.
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
Meanwhile, over on Dendrite, we made the conscious decision to get 1.0 out the door on Synapse first rather than trying to implement and iterate on the stuff needed for 1.0 on both Synapse &amp; Dendrite simultaneously.  However, Dendrite has been ticking along thanks to work from Brendan, Anoa and APWhitehat - and the plan is to use it for more niche homeserver work at first; e.g. constrained resource devices (Dendrite uses 5-10x less RAM than Synapse on Py3), clientside homeservers, experimental routing deployments, etc.  In the longer term we expect it to grow into a fully fledged HS though!
&lt;h2 id=&quot;bridging&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#bridging&quot; aria-label=&quot;Anchor link for: bridging&quot;&gt;🔗&lt;&#x2F;a&gt;Bridging&lt;&#x2F;h2&gt;
&lt;p&gt;2018 was a bit of a renaissance for Bridging, largely thanks to Half-Shot coming on board in the Summer to work on IRC bridging and finally get to the bottom of the stability issues which plagued Freenode for the previous, uh, few years.  Meanwhile the Slack bridge got its first ever release - and more recently there&#x27;s some Really Exciting Stuff happening with &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-appservice-purple&quot;&gt;matrix-appservice-purple&lt;&#x2F;a&gt;; a properly usable bridge through to any protocol that libpurple can speak… and as of a few days ago also supports &lt;em&gt;native&lt;&#x2F;em&gt; XMPP bridging via XMPP.js.  There&#x27;ll probably be a dedicated blogpost about all of this in the new year, especially when we deploy it all on Matrix.org. Until then, the best bet is to learn more is to watch &lt;a href=&quot;https:&#x2F;&#x2F;youtu.be&#x2F;B0faoVdw0ak&quot;&gt;last week&#x27;s Matrix Live&lt;&#x2F;a&gt; and hear it all first hand.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;modular&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#modular&quot; aria-label=&quot;Anchor link for: modular&quot;&gt;🔗&lt;&#x2F;a&gt;Modular&lt;&#x2F;h2&gt;
&lt;p&gt;One of the biggest newcomers of 2018 was the launch of &lt;a href=&quot;https:&#x2F;&#x2F;modular.im&quot;&gt;Modular.im&lt;&#x2F;a&gt; in October - the world&#x27;s first commercial Matrix hosting service.  Whilst (like Riot), Modular isn&#x27;t strictly-speaking a Matrix.org project - it feels appropriate to mention it here, not least because it&#x27;s helping directly fund the core Matrix dev team.&lt;&#x2F;p&gt;
&lt;p&gt;So far Modular has seen a lot of interest from folks who want to spin up a super-speedy dedicated homeserver run by us rather than having to spend the time to build one themselves - or folks who have yet to migrate from IRC and want a better-than-IRC experience which still bridges well.  One of the nice bits is that the servers are still decentralised and completely operationally independent of one another, and there have been a bunch of really nice refinements since launch, including the ability to point your own DNS at the server; matrix-&amp;gt;matrix migration tools; with custom branding and other goodness coming soon.  If you want one-click Matrix hosting, please give Modular a go :)&lt;&#x2F;p&gt;
&lt;p&gt;Right now we&#x27;re promoting Modular mainly to existing Matrix users, but once the Riot redesign is finished you should expect to see some very familiar names popping up on the platform :D&lt;&#x2F;p&gt;
&lt;h2 id=&quot;twim&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#twim&quot; aria-label=&quot;Anchor link for: twim&quot;&gt;🔗&lt;&#x2F;a&gt;TWIM&lt;&#x2F;h2&gt;
&lt;p&gt;Unless you were living under a rock, you&#x27;ll hopefully have also realised that 2018 was the year that brought us &lt;a href=&quot;&#x2F;blog&#x2F;category&#x2F;general&#x2F;this-week-in-matrix&#x2F;&quot;&gt;This Week In Matrix&lt;&#x2F;a&gt; (TWIM) - our very own blog tracking all the action across the whole Matrix community on a weekly basis.  Thank you to everyone who contributes updates, and to Ben for editing it each week. Go flip through the archives to find out what&#x27;s been going on in the wider community over the course of the year!  (This blog post is already way too long without trying to cover the rest of the ecosystem too :)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;shapes-of-things-to-come&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#shapes-of-things-to-come&quot; aria-label=&quot;Anchor link for: shapes-of-things-to-come&quot;&gt;🔗&lt;&#x2F;a&gt;Shapes of Things to Come&lt;&#x2F;h2&gt;
&lt;p&gt;Finally, a little Easter egg (it is Christmas, after all) for anyone crazy enough to have read this far: The eagle-eyed amongst you might have noticed that one of our accepted talks for FOSDEM 2019 is “&lt;a href=&quot;https:&#x2F;&#x2F;fosdem.org&#x2F;2019&#x2F;schedule&#x2F;event&#x2F;matrix&#x2F;&quot;&gt;Breaking the 100bps barrier with Matrix&lt;&#x2F;a&gt;” in the Real Time Communications devroom.  We don&#x27;t want to spoil the full surprise, but here&#x27;s a quick preview of some of the more exotic &lt;a href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Skunkworks_project&quot;&gt;skunkworks&lt;&#x2F;a&gt; we&#x27;ve been doing on low-bandwidth routing and transports recently.  Right now it shamelessly assumes that you&#x27;re running within a trusted network, but once we solve that it will of course be be proposed as an MSC for Matrix proper.  A full write-up and code will follow, but for now, here&#x27;s a mysterious video…&lt;&#x2F;p&gt;
&lt;div&gt;&lt;noscript&gt;
  Today&#x27;s Matrix Live:
  &lt;a href=&quot;https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=vimXuCTxV6k&quot;&gt;
    https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=vimXuCTxV6k
  &lt;&#x2F;a&gt;
&lt;&#x2F;noscript&gt;
&lt;youtube-player video-id=&quot;vimXuCTxV6k&quot;&gt;&lt;&#x2F;youtube-player&gt;

&lt;p&gt;(If you&#x27;re interested in running Matrix over low-bandwidth networks, please &lt;a href=&quot;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;@matthew:matrix.org&quot;&gt;get in touch&lt;&#x2F;a&gt; - we&#x27;d love to hear from you...)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;2019&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#2019&quot; aria-label=&quot;Anchor link for: 2019&quot;&gt;🔗&lt;&#x2F;a&gt;2019&lt;&#x2F;h2&gt;
&lt;p&gt;So, what will 2019 bring?&lt;&#x2F;p&gt;
&lt;p&gt;In the short term, as should be obvious from the above, our focus is on:&lt;&#x2F;p&gt;
&lt;ul&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;r0 spec releases across the board (aka Matrix 1.0)
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Implementing them in Synapse
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Landing the Riot redesign
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Landing all the new E2E encryption UX and features
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Finalising the Matrix.org Foundation
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
However, beyond that, there&#x27;s a lot of possible options on the table in the medium term:
&lt;ul&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Reworking and improving Communities&#x2F;Groups.
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Reactions.
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;E2E-encrypted Search
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Filtering. (empowering users to filter out rooms &amp; content they&#x27;re not interested in).
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Extensible events.
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Editable messages.
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Extensible Profiles (we&#x27;ve actually been experimenting with this already).
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Threading.
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Landing the Riot&#x2F;Android rewrite
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Scaling synapse via sharding the master process
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Bridge UI for discovery of users&#x2F;rooms and bridge status
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Considering whether to do a similar overhaul of Riot&#x2F;iOS
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Bandwidth-efficient transports
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Bandwidth-efficient routing
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Getting Dendrite to production.
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Inline widgets (polls etc)
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;ul&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Improving VoIP over Matrix.
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;ul&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Adding more bridges, and improving the current ones..
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Account portability
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Replacing MXIDs with public keys
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
In the longer term, options include:
&lt;ul&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Shared-code cross-platform client SDKs (e.g. sharing a native core library between matrix-{&#x27;{&#x27;}js,ios,android{&#x27;}&#x27;}-sdk)
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Matrix daemons (e.g. running an always-on client as a background process in your OS which apps can connect to via a lightweight CS API)
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Push notifications via Matrix (using a daemon-style architecture)
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Clientside homeservers (i.e. p2p matrix) - e.g. compiling Dendrite to WASM and running it in a service worker.
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Experimenting with MLS for E2E Encryption
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Storing and querying more generic data structures in Matrix (e.g. object trees; scene graphs)
&lt;&#x2F;li&gt;
 	&lt;li style=&quot;font-weight: 400;&quot;&gt;Alternate use cases for VR, IoT, etc.
&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
Obviously we&#x27;re not remotely going to do all of that in 2019, but this serves to give a taste of the possibilities on the menu post-1.0; we&#x27;ll endeavour to publish a more solid roadmap when we get to that point.
&lt;p&gt;And on that note, it&#x27;s time to call this blogpost to a close. Thanks to anyone who read this far, and thank you, as always, for flying Matrix and continuing to support the project.  The next few months should be particularly fun; all the preparation of 2018 will finally pay off :)&lt;&#x2F;p&gt;
&lt;p&gt;Happy holidays,&lt;&#x2F;p&gt;
&lt;p&gt;Matthew, Amandine &amp;amp; the whole Matrix.org team.&lt;&#x2F;p&gt;
</content>
</entry>

    
<entry xml:lang="en">
    <title>The Matrix Holiday Mini-Special (2017 edition)</title>
    <published>2017-12-25T00:00:00+00:00</published>
    <updated>2017-12-25T00:00:00+00:00</updated>
    <author>
      <name>Matthew Hodgson</name>
    </author>
    <link rel="alternate" href="https://c956b204.matrix-website.pages.dev/blog/2017/12/25/the-matrix-holiday-mini-special-2017-edition/" type="text/html"/>
    <id>https://c956b204.matrix-website.pages.dev/blog/2017/12/25/the-matrix-holiday-mini-special-2017-edition/</id>
    <content type="html">&lt;p&gt;Hi folks,&lt;&#x2F;p&gt;
&lt;p&gt;Since we began Matrix it&#x27;s been a sort of tradition to do a huge update on Christmas Eve to reflect on the past year and tease the future - you can check out the &lt;a href=&quot;&#x2F;blog&#x2F;2016&#x2F;12&#x2F;26&#x2F;the-matrix-holiday-special-2016-edition&#x2F;&quot;&gt;2016 edition&lt;&#x2F;a&gt; or the &lt;a href=&quot;&#x2F;blog&#x2F;2015&#x2F;12&#x2F;25&#x2F;the-matrix-holiday-special&#x2F;&quot;&gt;2015 edition&lt;&#x2F;a&gt; and a sort of &lt;a href=&quot;&#x2F;blog&#x2F;2015&#x2F;01&#x2F;07&#x2F;synapse-0-6-1-released-and-other-news&#x2F;&quot;&gt;proto-update for 2014&lt;&#x2F;a&gt; too if you&#x27;re feeling nostalgic.  This year I&#x27;m going to try to keep it short though, as I&#x27;m hoping to write a Very Big Update related to long-term-funding progress in the relatively near future.&lt;&#x2F;p&gt;
&lt;p&gt;2017 has been a weird year for us: progress in the core team has been relatively badly impacted by the mission to secure long-term funding, with myself (Matthew) &amp;amp; Amandine spending the vast majority of our time handling the meta-problem of keeping the core team secure rather than actually working on the project itself.  Meanwhile we&#x27;ve lost a few of the original team during the disruption, which has particularly impacted Spec, E2E and Dendrite progress (such are the risks of running a very lean team in the first place!).  However, against the odds, we have (hopefully) prevailed - and this is almost &lt;strong&gt;entirely&lt;&#x2F;strong&gt; due to the massive support we&#x27;ve seen through donations via &lt;a href=&quot;https:&#x2F;&#x2F;patreon.com&#x2F;matrixdotorg&quot;&gt;Patreon&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;liberapay.com&#x2F;matrixdotorg&quot;&gt;Liberapay&lt;&#x2F;a&gt;, Ethereum, Bitcoin and &lt;a href=&quot;https:&#x2F;&#x2F;paypal.me&#x2F;matrixdotorg&quot;&gt;PayPal&lt;&#x2F;a&gt;, and some much-appreciated paid consulting work.&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Simply put, without the donation support we would have not been able to pay the core team over the last 3 months, and we would not be able to pay for the legal costs of setting up the team as an independent company, and we would be completely screwed for securing large-scale long-term funding if we couldn&#x27;t point to the community&#x27;s support as evidence that Matrix is worthy of funding.  So: we sincerely owe our thanks to those who heeded the &lt;a href=&quot;&#x2F;blog&#x2F;2017&#x2F;07&#x2F;07&#x2F;a-call-to-arms-supporting-matrix&#x2F;&quot;&gt;call to arms&lt;&#x2F;a&gt; and are supporting us.  We&#x27;ve also been pretty lucky in benefiting from the skyrocketing value of Ethereum and Bitcoin donations.  And even if&#x2F;when long-term funding is secured for New Vector (the company we formed in July to hire the core team), donations will continue to be vital to support the Matrix.org Foundation itself as an independent non-profit entity - as it&#x27;s obviously not in Matrix.org&#x27;s interests to be entirely financially dependent on New Vector.  Hopefully this whole episode will end up being a bit like a &lt;a href=&quot;http:&#x2F;&#x2F;www.startrek.com&#x2F;article&#x2F;john-trimbles-contribution-to-saving-star-trek&quot;&gt;Save Star Trek&lt;&#x2F;a&gt; scenario - where something fun and amazing almost gets almost wiped out when it&#x27;s only a few years old due to corporate factors... only for the community to band together to save it, and then for it to go from strength to strength for the next 50 years or more! :D&lt;&#x2F;p&gt;
&lt;p&gt;That said, we&#x27;ve made some major progress this year anyway: the addition of Widgets to Matrix; the addition of Communities (aka Groups) and Flair; major improvements to E2E encryption (even though it&#x27;s not out of beta yet); lots of progress on Dendrite (the minimum-viable phase 1 is now about 75% complete); switching everything over to Jitsi for group video conferencing; rewriting onboarding for Riot&#x2F;Web; Antiscam&#x2F;spam support for cryptocommunities; the whole VR proof-of-concept of Matrix+WebVR+WebRTC video and voip calling; Version 0.3 of the Matrix spec; and a whole lot more which I&#x27;m probably forgetting right now.  And meanwhile the community has been more active than ever, with major new clients like &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mujx&#x2F;nheko&quot;&gt;Nheko&lt;&#x2F;a&gt; hitting the scene with a large and loyal community of open source contributors (over the last few weeks I&#x27;ve literally seen more nheko PRs fly past than Riot ones!) - and we&#x27;ve also been &lt;em&gt;incredibly&lt;&#x2F;em&gt; glad of community contributions towards Dendrite.  Dendrite is already way ahead of Synapse in terms of % community contributed code - we have hope that it will end up being a model FOSS project :)&lt;&#x2F;p&gt;
&lt;p&gt;So what lies ahead?  It&#x27;s hard to predict the level of progress we&#x27;re going to make in the core team, as it really depends on long-term funding.  Whatever happens, one of our top priorities is to improve our governance so that everyone can better contribute in places that have historically been more blocked on the core team (i.e. the spec; synapse)... whilst still maintaining coherency across the project.  Ideally we&#x27;ll end up with more folks pushing Matrix forwards from both the wider world and the core team however, and right now the main priorities are:&lt;&#x2F;p&gt;
&lt;ul&gt;
 	&lt;li&gt;Phase 2 of Communities: letting users filter their current view of Matrix to rooms associated with a given subset of communities (if desired), for Slack&#x2F;Discord-style semantics&lt;&#x2F;li&gt;
 	&lt;li&gt;Fixing the remaining end-to-end encryption failures (although the majority of them have now been solved)&lt;&#x2F;li&gt;
 	&lt;li&gt;Finalising proper UI&#x2F;UX for end-to-end encryption (at last), including the option to transparently back up your room keys if desired.&lt;&#x2F;li&gt;
 	&lt;li&gt;Dendrite Phase 1&lt;&#x2F;li&gt;
 	&lt;li&gt;Performance in Riot (on all platforms)&lt;&#x2F;li&gt;
 	&lt;li&gt;Editable messages&lt;&#x2F;li&gt;
 	&lt;li&gt;Reactions&lt;&#x2F;li&gt;
 	&lt;li&gt;Making widgets much more useful&lt;&#x2F;li&gt;
 	&lt;li&gt;Paid integrations and hosting options to help avoid further funding nightmares.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
Looking at the bigger picture, what we&#x27;d really love for 2018 would be to finally get to a 1.0 release of the Matrix Spec (i.e. catching up on our massive backlog of merging unstable spec drafts &amp; proposals into the spec) - and for Dendrite to start to replace Synapse as the reference home server from Matrix.org and become really ubiquitous, and for E2E encryption be turned on by default in private rooms.  Beyond the above list, we don&#x27;t really have any other features urgently planned (threading, for instance, is on hold until we have the rest of the above sorted) - but we believe that if we stabilise everything we have today (plus that list), then there is no reason for Matrix to not fulfil its full potential as a true global open decentralised communications standard.  And then it&#x27;s on to threading, P2P matrix, decentralised reputation and all that good stuff!
&lt;p&gt;It&#x27;s going to be a crazy year ahead, either way: so thank you, once again, for supporting Matrix - whether that&#x27;s financially, or by contributing code, or running a server, or just using the protocol as a user.  We literally wouldn&#x27;t be here without you!! :)&lt;&#x2F;p&gt;
&lt;p&gt;Matthew, Amandine &amp;amp; the whole core team.&lt;&#x2F;p&gt;
</content>
</entry>

    
<entry xml:lang="en">
    <title>The Matrix Holiday Special! (2016 edition)</title>
    <published>2016-12-26T00:00:00+00:00</published>
    <updated>2016-12-26T00:00:00+00:00</updated>
    <author>
      <name>Matthew Hodgson</name>
    </author>
    <link rel="alternate" href="https://c956b204.matrix-website.pages.dev/blog/2016/12/26/the-matrix-holiday-special-2016-edition/" type="text/html"/>
    <id>https://c956b204.matrix-website.pages.dev/blog/2016/12/26/the-matrix-holiday-special-2016-edition/</id>
    <content type="html">&lt;p&gt;We seem to have fallen into the pattern of giving seasonal &#x27;state of the union&#x27; updates on the Matrix blog, despite best intentions to blog more frequently... although given the &lt;a href=&quot;&#x2F;blog&#x2F;2016&#x2F;11&#x2F;12&#x2F;the-matrix-autumn-special&#x2F;&quot;&gt;Autumn Update&lt;&#x2F;a&gt; ended up being posted in November this one is going to be a relatively incremental update.  Let&#x27;s jump straight in:&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;e2e-encryption&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#e2e-encryption&quot; aria-label=&quot;Anchor link for: e2e-encryption&quot;&gt;🔗&lt;&#x2F;a&gt;E2E Encryption&lt;&#x2F;h2&gt;
&lt;p&gt;Unless you&#x27;ve been in a coma for the last month you&#x27;ll have hopefully noticed that we &lt;a href=&quot;&#x2F;blog&#x2F;2016&#x2F;11&#x2F;21&#x2F;matrixs-olm-end-to-end-encryption-security-assessment-released-and-implemented-cross-platform-on-riot-at-last&#x2F;&quot;&gt;launched the formal beta for E2E Encryption&lt;&#x2F;a&gt; across matrix-{&#x27;{&#x27;}js,ios,android{&#x27;}&#x27;}-sdk (and thus Riot&#x2F;{&#x27;{&#x27;}Web, iOS, Android{&#x27;}&#x27;}) in November, complete with the successful &lt;a href=&quot;http:&#x2F;&#x2F;nccgroup.trust&#x2F;us&#x2F;our-research&#x2F;matrix-olm-cryptographic-review&quot;&gt;independent public security assessment&lt;&#x2F;a&gt; of our Olm and Megolm cryptography library from NCC Group.  So far the beta has gone well in parts: the core Olm&#x2F;Megolm crypto library has held up well with no bugfixes at all required since the audit (yay!).  However, we&#x27;ve hit a lot of different edge cases in the wild where devices can fail to share their outbound session ratchet state to other devices present in the room.  This results in the infamous &quot;Unknown Inbound Session ID&quot; (UISI) errors which many folks will have seen (now renamed to the more meaningful &quot;Unable to decrypt: The sender&#x27;s device has not sent us the keys for this message&quot; error).&lt;&#x2F;p&gt;
&lt;p&gt;Unfortunately there&#x27;s a bunch of entirely different causes for this, both platform-specific and cross-platform, and we&#x27;ve been running around untangling all the error reports and getting to the bottom of it.  The good news is that we think we now know the vast majority of the causes, and fixes are starting to land.  We&#x27;ve also just finished a fairly time-consuming formal crypto code-review on the three application SDK implementations (JS, iOS &amp;amp; Android) to shake out any other issues.  Meanwhile some new features have also landed - e.g. the ability for guests to use E2E!  The remaining stuff at this point before we can consider declaring E2E out of beta is:&lt;&#x2F;p&gt;
&lt;ul&gt;
 	&lt;li&gt;Finish fixing the UISI errors (in progress)&lt;&#x2F;li&gt;
 	&lt;li&gt;Warn when unverified devices are added to a room&lt;&#x2F;li&gt;
 	&lt;li&gt;Implement passphrased backup &amp; restore for E2E state, so that folks can avoid losing their E2E history when they logout or switch to a new device&lt;&#x2F;li&gt;
 	&lt;li&gt;Improve device verification.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
Thanks to everyone who&#x27;s been using E2E and reporting issues - given the number of different UISI error causes out there, it&#x27;s been really useful to go through the different bug reports that folks have submitted.  Please continue to submit them when you see unexpected problems (especially over the coming months as stability improves!)
&lt;h2 id=&quot;new-projects&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#new-projects&quot; aria-label=&quot;Anchor link for: new-projects&quot;&gt;🔗&lt;&#x2F;a&gt;New Projects!&lt;&#x2F;h2&gt;
&lt;p&gt;There have been a tonne of new projects popping up from all over the place since the last update.  Looking at the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;commits&#x2F;master&#x2F;supporting-docs&quot;&gt;git history&lt;&#x2F;a&gt; of the &lt;a href=&quot;&#x2F;docs&#x2F;projects&quot;&gt;projects page&lt;&#x2F;a&gt;, we&#x27;ve been adding one every few days!  Highlights include:&lt;&#x2F;p&gt;
&lt;h3 id=&quot;bridges&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#bridges&quot; aria-label=&quot;Anchor link for: bridges&quot;&gt;🔗&lt;&#x2F;a&gt;Bridges:&lt;&#x2F;h3&gt;
&lt;ul&gt;
 	&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;kfatehi&#x2F;matrix-appservice-imessage&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;kfatehi&#x2F;matrix-appservice-imessage&lt;&#x2F;a&gt; - A solid foundation for an iMessage bridge from kfatehi, built on top of the official matrix-appservice-bridge stack.  iMessage and FaceTime&#x27;s crypto is tied into Apple&#x27;s Fairplay DRM (famous for securing the iTunes Music Store and App Store) and is locked all the way down to the &lt;a href=&quot;https:&#x2F;&#x2F;www.apple.com&#x2F;business&#x2F;docs&#x2F;iOS_Security_Guide.pdf&quot;&gt;keypair baked into your Apple device&#x27;s CPU&lt;&#x2F;a&gt; at fabrication time, so for now the bridge has to be run on a macOS device in order to bridge.  It&#x27;s very promising indeed, and exciting to see bridges to relatively inhospitable environments like iMessage popping up!&lt;&#x2F;li&gt;
 	&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Half-Shot&#x2F;matrix-fb-chat&#x2F;&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;Half-Shot&#x2F;matrix-fb-chat&#x2F;&lt;&#x2F;a&gt; - A proof-of-concept bridge for Facebook Messenger written by Half-Shot in TypeScript on top of the matrix-js-sdk.  Currently you have to manually configure which conversations to bridge between FB and Matrix, but it works!&lt;&#x2F;li&gt;
 	&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;exul&#x2F;matrix-rocketchat&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;exul&#x2F;matrix-rocketchat&lt;&#x2F;a&gt;  - A new Rocket.Chat bridge from exul, written in Rust.&lt;&#x2F;li&gt;
 	&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;pztrn&#x2F;matrix-xmpp-bridge&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;pztrn&#x2F;matrix-xmpp-bridge&lt;&#x2F;a&gt; - A major fork from pztrn of jfred&#x27;s matrix-xmpp-bridge, now using flask, regius, alembic, sleekxmpp and all sorts.  Currently in very active dev!&lt;&#x2F;li&gt;
 	&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;CyrusTheHedgehog&#x2F;Hangouts-Bridge&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;CyrusTheHedgehog&#x2F;Hangouts-Bridge&lt;&#x2F;a&gt; - A basic PoC of a Hangouts bridge, written in python3 asyncio&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;clients&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#clients&quot; aria-label=&quot;Anchor link for: clients&quot;&gt;🔗&lt;&#x2F;a&gt;Clients&lt;&#x2F;h3&gt;
&lt;ul&gt;
 	&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;lukebarnard1&#x2F;j&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;lukebarnard1&#x2F;j&lt;&#x2F;a&gt; - A blogging and journalism platform built on Matrix from Luke (moonlighting from the core team!)&lt;&#x2F;li&gt;
 	&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;live.hello-matrix.net&#x2F;&quot;&gt;https:&#x2F;&#x2F;live.hello-matrix.net&#x2F;&lt;&#x2F;a&gt; - a live-blogging system powered by Matrix from @ar&lt;&#x2F;li&gt;
 	&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;pik&#x2F;interlocutor&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;pik&#x2F;interlocutor&lt;&#x2F;a&gt; - An experimental decentralized comment system powered by Matrix, written as a Polymer Webcomponent&lt;&#x2F;li&gt;
 	&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;tjgillies&#x2F;freebird&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;tjgillies&#x2F;freebird&lt;&#x2F;a&gt; - a basic twitter clone built on Matrix by tjgillies&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;other-projects&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#other-projects&quot; aria-label=&quot;Anchor link for: other-projects&quot;&gt;🔗&lt;&#x2F;a&gt;Other projects&lt;&#x2F;h3&gt;
&lt;ul&gt;
 	&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;slp&#x2F;matrix-pushgw&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;slp&#x2F;matrix-pushgw&lt;&#x2F;a&gt; - A Matrix push gateway written in Golang which exposes a custom TCP push protocol to apps, letting them get push notifications directly from your own gateway rather than via GCM or APNS.  The intention is to use it for Sailfish and Fdroid.  The initial implementation looks very promising - just needs the clientside support, and then folks who don&#x27;t trust Google with their notifications can run completely indie at last!&lt;&#x2F;li&gt;
 	&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;kultsinuppeli&#x2F;riotchat&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;kultsinuppeli&#x2F;riotchat&lt;&#x2F;a&gt; - Ansible playbook for Riot&#x2F;Web and Synapse&lt;&#x2F;li&gt;
 	&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;bismark&#x2F;matrex&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;bismark&#x2F;matrex&lt;&#x2F;a&gt; - Experimental beginnings of a Matrix homeserver written in Elixir!&lt;&#x2F;li&gt;
 	&lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;mlopezr&#x2F;node-red-contrib-matrixbot&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;mlopezr&#x2F;node-red-contrib-matrixbot&lt;&#x2F;a&gt; - Matrix bot plugin for the &lt;a href=&quot;https:&#x2F;&#x2F;nodered.org&#x2F;&quot;&gt;Node-RED&lt;&#x2F;a&gt; IOT platform&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h2 id=&quot;bots-and-bridges&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#bots-and-bridges&quot; aria-label=&quot;Anchor link for: bots-and-bridges&quot;&gt;🔗&lt;&#x2F;a&gt;Bots and Bridges&lt;&#x2F;h2&gt;
&lt;p&gt;There&#x27;s been a bunch of work from the core team on bots &amp;amp; bridges infrastructure over the last month:&lt;&#x2F;p&gt;
&lt;p&gt;Rearchitecting the slack and gitter bridges to optionally support &#x27;puppeting users&#x27;.  This is in some ways the ultimate flavour of bridging - where you authenticate with the remote service using your &quot;real&quot; gitter&#x2F;slack&#x2F;... credentials, and then the bridge has access to synchronise your full spectrum of data with Matrix.  This is in contrast to the current implementations where the bridge creates virtual users (e.g. Slack webhook bots or IRC virtual user bots) or uses a predefined bot (e.g. matrixbridge on gitter) to link the rooms.&lt;&#x2F;p&gt;
&lt;p&gt;This has some huge advantages: e.g. ability to bridge Slack and Gitter DMs through properly to Matrix; bridging presence and typing notifications correctly, not requiring any custom bots or integrations to be configured; not proxying via a crappy bridge bot as per gitter today; letting Matrixed users be completely indistinguishable from their native selves on the remote platform - so supporting tab complete in Slack, profiles, presence, etc.  The main disadvantage is that you have to have an account on the platform already (although you could argue this is a feature, especially from the remote network&#x27;s perspective!) and that you are delegating access to that account through to the bridge, so you&#x27;d better trust it.  However, you can always run your own bridge if trust is an issue.&lt;&#x2F;p&gt;
&lt;p&gt;The work on this is mid-progress currently, but we&#x27;re really looking forward to seeing the official Slack, Gitter and other bridges support this mode of operation in the new year!&lt;&#x2F;p&gt;
&lt;p&gt;We&#x27;ve also been spending some time working with bridges written by the wider community (e.g. Half-Shot&#x27;s &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Half-Shot&#x2F;matrix-appservice-twitter&quot;&gt;twitter bridge&lt;&#x2F;a&gt;) to get them deployed on the matrix.org homeserver itself, to help folks who can&#x27;t run their own.&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile there&#x27;s been a lot of work going into supporting the IRC bridge. Main highlights there are:&lt;&#x2F;p&gt;
&lt;ul&gt;
 	&lt;li&gt;The release of &lt;a href=&quot;&#x2F;blog&#x2F;2016&#x2F;12&#x2F;19&#x2F;matrix-appservice-irc-0-7-0-is-out&#x2F;&quot;&gt;matrix-appservice-irc 0.7&lt;&#x2F;a&gt;, with all sorts of major new features&lt;&#x2F;li&gt;
 	&lt;li&gt;Turning on bi-directional membership list syncing at last for all networks other than Freenode!  In theory, at least, you should finally see the same list of room members in both IRC and Matrix!!&lt;&#x2F;li&gt;
 	&lt;li&gt;Handling IRC PM botspam from Freenode and OFTC, which bridge through as invite spam into Matrix.  Sorry if you&#x27;ve been bitten by this.  We&#x27;ve worked around it for now by setting appropriate umodes on the IRC bots, and by implementing a &#x27;bulk reject&#x27; button on Riot (under in Settings).  This caused a few nasty outages on Freenode and OFTC. On the plus side, at least it shows that Riot scales up to receiving 2000+ invites without exhibiting ill effects...&lt;&#x2F;li&gt;
 	&lt;li&gt;Considering how to improve history visibility on IRC to avoid scenarios where channel history is shared between users in the same room (even if their IRC bot has temporarily disconnected).  This was a major problem during the Freenode&#x2F;OFTC outages mentioned earlier.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
Last but not least, we&#x27;ve just released &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;gomatrix&quot;&gt;gomatrix - a new official Matrix client SDK for golang&lt;&#x2F;a&gt;!  &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;go-neb&quot;&gt;Go-neb&lt;&#x2F;a&gt; (the reference golang Matrix bot framework) has been entirely refactored to use gomatrix, which should keep it honest as a 1st class Matrix client SDK for those in the Golang community.  We highly recommend all Golang nuts to go &lt;a href=&quot;https:&#x2F;&#x2F;godoc.org&#x2F;github.com&#x2F;matrix-org&#x2F;gomatrix&quot;&gt;read the documentation&lt;&#x2F;a&gt; and give it a spin!
&lt;h2 id=&quot;riot-desktop&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#riot-desktop&quot; aria-label=&quot;Anchor link for: riot-desktop&quot;&gt;🔗&lt;&#x2F;a&gt;Riot Desktop&lt;&#x2F;h2&gt;
&lt;p&gt;Riot development has been largely preoccupied with E2E debugging in the respective Matrix Client SDKs, but &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@RiotChat&#x2F;introducing-riot-0-9-and-desktop-riot-3585d1027243&quot;&gt;0.9.3 was released last week adding in Electron-based desktop app support&lt;&#x2F;a&gt;.  (Remember, if you hate Electron-style desktop apps which provide a desktop app by embedded a webbrowser, you can always use another Matrix client!).  If you&#x27;ve been missing having Riot as a proper desktop app, go get involved!&lt;&#x2F;p&gt;
&lt;img class=&quot;aligncenter size-large wp-image-1874&quot; src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2016&#x2F;12&#x2F;Screen-Shot-2016-12-26-at-01.00.12-1024x687.png&quot; alt=&quot;screen-shot-2016-12-26-at-01-00-12&quot; width=&quot;1024&quot; height=&quot;687&quot; &#x2F;&gt;
&lt;h2 id=&quot;next-generation-homeservers&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#next-generation-homeservers&quot; aria-label=&quot;Anchor link for: next-generation-homeservers&quot;&gt;🔗&lt;&#x2F;a&gt;Next Generation Homeservers&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;ruma&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ruma&quot; aria-label=&quot;Anchor link for: ruma&quot;&gt;🔗&lt;&#x2F;a&gt;Ruma&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;ruma.dev&#x2F;&quot;&gt;Ruma&lt;&#x2F;a&gt; is a project led by Jimmy Cuadra to build a Matrix homeserver in Rust - the project has been ploughing steadily onwards through 2016 with a bit of an acceleration during December.  You can follow progress at the excellent &lt;a href=&quot;https:&#x2F;&#x2F;ruma.dev&#x2F;news&#x2F;&quot;&gt;This Week in Ruma&lt;&#x2F;a&gt; blog, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ruma&#x2F;ruma&#x2F;pulse&#x2F;monthly&quot;&gt;watching the project on Github&lt;&#x2F;a&gt;, and tracking the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ruma&#x2F;ruma&#x2F;blob&#x2F;master&#x2F;STATUS.md&quot;&gt;API status dashboard&lt;&#x2F;a&gt;.  Some of the latest PRs are looking very promising in terms of getting the core remaining CS APIs working, e.g:&lt;&#x2F;p&gt;
&lt;ul class=&quot;simple-conversation-list varied-states&quot;&gt;
 	&lt;li&gt;&lt;span class=&quot;num&quot;&gt;Merged #113&lt;&#x2F;span&gt;
 &lt;a class=&quot;title&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ruma&#x2F;ruma&#x2F;pull&#x2F;113&quot;&gt;Add implementation for the filter endpoint.&lt;&#x2F;a&gt; 4 days ago&lt;&#x2F;li&gt;
 	&lt;li&gt;&lt;span class=&quot;state state-merged&quot;&gt;Merged&lt;&#x2F;span&gt;
&lt;span class=&quot;num&quot;&gt;#125&lt;&#x2F;span&gt;
 &lt;a class=&quot;title&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ruma&#x2F;ruma&#x2F;pull&#x2F;125&quot;&gt;Adding a Server header to API responses&lt;&#x2F;a&gt; 5 days ago&lt;&#x2F;li&gt;
 	&lt;li&gt;&lt;span class=&quot;state state-merged&quot;&gt;Merged&lt;&#x2F;span&gt;
&lt;span class=&quot;num&quot;&gt;#105&lt;&#x2F;span&gt;
 &lt;a class=&quot;title&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ruma&#x2F;ruma&#x2F;pull&#x2F;105&quot;&gt;Add basic implementation for the tags endpoint.&lt;&#x2F;a&gt; 5 days ago&lt;&#x2F;li&gt;
 	&lt;li&gt;&lt;span class=&quot;num&quot;&gt;Open #106&lt;&#x2F;span&gt;
 &lt;a class=&quot;title&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ruma&#x2F;ruma&#x2F;pull&#x2F;106&quot;&gt;Add basic implementation for the sync endpoint.&lt;&#x2F;a&gt; 2 days ago&lt;&#x2F;li&gt;
 	&lt;li&gt;&lt;span class=&quot;state state-open&quot;&gt;Open&lt;&#x2F;span&gt;
&lt;span class=&quot;num&quot;&gt;#58&lt;&#x2F;span&gt;
 &lt;a class=&quot;title&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ruma&#x2F;ruma&#x2F;issues&#x2F;58&quot;&gt;API: GET &#x2F;events&lt;&#x2F;a&gt; 20 days ago&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
Needless to say, we&#x27;ve been keeping an eye on Ruma with extreme interest, not least as some of the Matrix core team are rabid Rustaceans too :)  We can&#x27;t wait to see it exposing a usable CS API in the hopefully not-too-distant future!!
&lt;h3 id=&quot;dendrite&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#dendrite&quot; aria-label=&quot;Anchor link for: dendrite&quot;&gt;🔗&lt;&#x2F;a&gt;Dendrite&lt;&#x2F;h3&gt;
&lt;p&gt;Meanwhile, in the core team, we&#x27;ve been doing some fairly serious experimentation on next-generation homeservers.  Synapse is in a relatively stable state currently, and we&#x27;ve implemented most of the horizontal scalability tricks available to us there (e.g. splitting out &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;blob&#x2F;master&#x2F;docs&#x2F;workers.rst&quot;&gt;worker processes&lt;&#x2F;a&gt;).  Instead we&#x27;re starting to hit some fundamental limitations of the architecture: the fact that the whole codebase effectively assumes that it&#x27;s talking to a single consistent database instance; python&#x27;s single-threadedness and memory inefficiency; twisted&#x27;s lack of profiling; being limited to sqlite&#x27;s featureset; the fact that the schema has grown organically and is difficulty to refactor aggressively; the fact the app papers over SQL problems by caching everything in RAM (resulting in synapse&#x27;s high RAM requirements); the constant bugs caused by lack of type safety; etc.&lt;&#x2F;p&gt;
&lt;p&gt;We started an experiment in Golang to fix some of this a year ago in the form of &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;dendron&quot;&gt;Dendron&lt;&#x2F;a&gt; - a &quot;&lt;a href=&quot;http:&#x2F;&#x2F;www.martinfowler.com&#x2F;bliki&#x2F;StranglerApplication.html&quot;&gt;strangler pattern&lt;&#x2F;a&gt;&quot; homeserver skeleton intended to sit in front of a synapse and slowly port endpoints over to Go.  In practice, Dendron ended up just being a rather dubious Matrix-aware loadbalancer, and meanwhile no endpoints got moved into it (other than &#x2F;login, which then got moved out again due to the extreme confusion of having to maintain implementations in both Dendron &amp;amp; Synapse).  The main reasons for Dendron&#x27;s failure are a) we had enough on our hands supporting Synapse; b) there were easier scalability improvements (e.g. workers) to be had on Synapse; c) the gradual migration approach looked like it would end up sharing the same storage backend as Synapse anyway, and potentially end up inheriting a bunch of Synapse&#x27;s woes.&lt;&#x2F;p&gt;
&lt;p&gt;So instead, a month or so ago we started a new project codenamed Dendrite (aka Dendron done right ;D) - this time an entirely fresh standalone Golang codebase for rapid development and iteration on the platonic ideal of a next-generation homeserver (and an excuse to audit and better document &amp;amp; spec some of the &lt;a href=&quot;https:&#x2F;&#x2F;docs.google.com&#x2F;document&#x2F;d&#x2F;14KVTNIZIig1iyRBzK91L6B7tnsfmon7CIWh-DCFRd6k&#x2F;edit&quot;&gt;murkier&lt;&#x2F;a&gt; bits of Matrix).  The project is still very early and there&#x27;s no doc or code to be seen yet, but it&#x27;s looking cautiously optimistic (especially relative to Dendron!).  The project goals are broadly:&lt;&#x2F;p&gt;
&lt;ol&gt;
 	&lt;li&gt;To build a new HS capable of supporting the exponentially increasing load on matrix.org ASAP (which is currently at 600K accounts, 50K rooms, 5 messages&#x2F;s and growing fast).&lt;&#x2F;li&gt;
 	&lt;li&gt;To architecturally support full horizontal scalability through clustering and sharding from the outset - i.e. no single DBs or DB writer processes.&lt;&#x2F;li&gt;
 	&lt;li&gt;To optimise for Postgres rather than be constrained by SQLite, whilst still aiming for a simple but optimal schema and storage layer.  Optimising for smaller resource footprints (e.g. environments where a Postgres is overkill) will happen later - but the good news is that the architecture will support it (unlike Synapse, which doesn&#x27;t scale down nicely even with SQLite).&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
It&#x27;s too early to share more at this stage, but thought we should give some visibility on where things are headed!  Needless to say, Synapse is here for the foreseeable - we think of it as being the Matrix equivalent of the role Apache httpd played for the Web.  It&#x27;s not enormously efficient, but it&#x27;s popular and relatively mature, and isn&#x27;t going away.  Meanwhile, new generations of servers like Ruma and Dendrite will come along for those seeking a sleeker but more experimental beast, much as nginx and lighttpd etc have come along as alternatives to Apache.  Time will tell how the server ecosystem will evolve in the longer term, but it&#x27;s obviously critical to the success of Matrix to have multiple active independent server implementations, and we look forward to seeing how Synapse, Ruma &amp; Dendrite progress!
&lt;h2 id=&quot;2017&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#2017&quot; aria-label=&quot;Anchor link for: 2017&quot;&gt;🔗&lt;&#x2F;a&gt;2017&lt;&#x2F;h2&gt;
&lt;p&gt;Looking back at where we were at &lt;a href=&quot;&#x2F;blog&#x2F;2015&#x2F;12&#x2F;25&#x2F;the-matrix-holiday-special&#x2F;&quot;&gt;this time last year&lt;&#x2F;a&gt;, 2016 has been a critical year for Matrix as the ecosystem has matured - rolling out E2E encryption; building out proper bot &amp;amp; bridge infrastructure; stabilising and tuning Synapse to keep up with the exponential traffic growth; seeing the explosion of contributors and new projects; seeing Riot edging closer to becoming a viable mainstream communication app.&lt;&#x2F;p&gt;
&lt;p&gt;2017 is going to be all about scaling Matrix - both the network, the ecosystem, and the project.  Whilst we&#x27;ve hopefully transitioned from being a niche decentralisation initiative to a relatively mainstream FOSS project, our ambition is unashamedly to become a mainstream communication (meta)network usable for the widest possible audience (whilst obviously still supporting our current community of FOSS &amp;amp; privacy advocates!).  With this in mind, stuff on the menu for 2017 includes:&lt;&#x2F;p&gt;
&lt;ul&gt;
 	&lt;li&gt;Getting E2E Encryption out of beta asap.&lt;&#x2F;li&gt;
 	&lt;li&gt;Ensuring we can scale beyond Synapse - see Dendrite, above.&lt;&#x2F;li&gt;
 	&lt;li&gt;Getting as many bots and bridges into Matrix as possible, and doing everything we can to support them, host them and help them be as high quality as possible - making the public federated Matrix network as useful and diverse as possible.&lt;&#x2F;li&gt;
 	&lt;li&gt;Supporting Riot&#x27;s leap to the mainstream, ensuring Matrix has at least one killer app.&lt;&#x2F;li&gt;
 	&lt;li&gt;Adding the final major missing features:
&lt;ul&gt;
 	&lt;li&gt;Customisable User Profiles (this is almost done, actually)&lt;&#x2F;li&gt;
 	&lt;li&gt;Groups (i.e. ability to define groups of users, and perform invites, powerlevels etc per-group as well as per-user)&lt;&#x2F;li&gt;
 	&lt;li&gt;Threading&lt;&#x2F;li&gt;
 	&lt;li&gt;Editable events (and Reactions)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;&#x2F;li&gt;
 	&lt;li&gt;Maturing and polishing the spec (we are way overdue a new release)&lt;&#x2F;li&gt;
 	&lt;li&gt;Improving VoIP - especially conferencing.&lt;&#x2F;li&gt;
 	&lt;li&gt;Reputation&#x2F;Moderation management (i.e. spam&#x2F;abuse filtering).&lt;&#x2F;li&gt;
 	&lt;li&gt;Much-needed SDK performance work on matrix-{&#x27;{&#x27;}react,ios,android{&#x27;}&#x27;}-sdk.&lt;&#x2F;li&gt;
 	&lt;li&gt;...and a few other things which would be premature to mention right now :D&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
This is going to be an incredibly exciting ride (right now, it feels a bit like being on a toboggan which has made its way onto a fairly steep ski slope...) and we can only thank you: the community, for getting the project to this point - whether you&#x27;re hacking on Matrix, contributing pull requests, filing issues, testing apps, spreading the word, or just simply using it.
&lt;p&gt;See you in 2017, and thanks again for flying Matrix.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Matthew, Amandine &amp;amp; the Matrix Team.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
</entry>

    
<entry xml:lang="en">
    <title>The Matrix Autumn Special!</title>
    <published>2016-11-12T00:00:00+00:00</published>
    <updated>2016-11-12T00:00:00+00:00</updated>
    <author>
      <name>Matthew Hodgson</name>
    </author>
    <link rel="alternate" href="https://c956b204.matrix-website.pages.dev/blog/2016/11/12/the-matrix-autumn-special/" type="text/html"/>
    <id>https://c956b204.matrix-website.pages.dev/blog/2016/11/12/the-matrix-autumn-special/</id>
    <content type="html">&lt;p&gt;Another season has passed; the leaves are dropping from the trees in the northern hemisphere (actually, in the time it&#x27;s taken us to finish this post, most of them have dropped :-&#x2F;) and once again the Matrix team has been hacking away too furiously to properly update the blog. So without further delay here&#x27;s an update on all things Matrix!&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;synapse-0-18&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#synapse-0-18&quot; aria-label=&quot;Anchor link for: synapse-0-18&quot;&gt;🔗&lt;&#x2F;a&gt;Synapse 0.18&lt;&#x2F;h2&gt;
&lt;p&gt;Back in September, we forgot to properly announce the 0.18 release of Synapse! This is a major oversight given that 0.18 was a huge update with some critical performance improvements, but hopefully everyone has upgraded by now anyway. If not, there&#x27;s never been a better time to &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&quot;&gt;run your own homeserver&lt;&#x2F;a&gt;! The main improvement is that the Matrix room state updates are now stored as deltas in the database rather than snapshots, which reduces the size of the database footprint by around 5 - 7x. The first time you run synapse after upgrading to 0.18 it will go through your database deleting all the historical data, after which you can VACUUM the db to reclaim the freed diskspace.&lt;&#x2F;p&gt;
&lt;p&gt;You can tell when it&#x27;s finished based on whether it&#x27;s stopped logging about the &#x27;background_deduplicate_state&#x27; task. There was a bug in 0.18.0 that meant this process was very slow (weeks) on sqlite DBs and chewed 100% CPU; this was fixed in 0.18.1, and subsequently we&#x27;ve also had 0.18.2 (various perf and bug fixes, and a new modular internal API for authentication) and the current release: 0.18.3 to address a &lt;a href=&quot;&#x2F;blog&#x2F;2016&#x2F;11&#x2F;08&#x2F;synapse-debian-pacakge-security-announcement&#x2F;&quot;&gt;major vulnerability&lt;&#x2F;a&gt; on deployments using LDAP with obsolete versions (0.9.x) of the python ldap3 library - e.g. Debian Stable. &lt;strong&gt;Folks using the Debian Stable packages must upgrade immediately.&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Other big changes in Synapse 0.18 were:&lt;&#x2F;p&gt;
&lt;ul&gt;
 	&lt;li&gt;Adding the final APIs required to support end-to-end encryption: specifically, a new store-and-forward API called &quot;to device messaging&quot;, which lets messages be passed between specific devices outside the context of a room or a room DAG. This is used for exchanging authentication tokens and sensitive end-to-end key data between devices (e.g. when a new device joins a room and needs to be looped in) and is not intended for general messaging.&lt;&#x2F;li&gt;
 	&lt;li&gt;Changing how remote directory servers are queried. Rather than constantly spidering them via the secondary_directory_servers option (which was causing a load crisis on the matrix.org server, as everyone else in Matrix kept polling it for directory updates), clients can now set a &#x27;server&#x27; parameter on the publicRooms request to ask their server to proxy the request through to a specific remote server. Element (the app formally known as Riot&#x2F;Web) implements this already. This is a stopgap until we have a proper global room discovery database of some kind.&lt;&#x2F;li&gt;
 	&lt;li&gt;Adding pagination support to the room directory API. We now have enough rooms in Matrix that downloading the full list every time the user searches for a room was getting completely untenable - we now support paginating and searching the list. Riot (now Element) and Riot-Android (now Element Android) are using the new APIs already.&lt;&#x2F;li&gt;
 	&lt;li&gt;Basic support for &#x27;direct room&#x27; semantics. When you create a room you can now state the intent for that room to be a 1:1 with someone via the is_direct parameter.&lt;&#x2F;li&gt;
 	&lt;li&gt;Making the &#x2F;notifications API work - this lets clients download a full list of all the notifications a user has been recently sent (highlights, mentions etc)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
Spec for all of these new APIs are currently making their way into the official matrix spec; you can see the work in progress at &lt;a href=&quot;&#x2F;speculator&quot;&gt;https:&#x2F;&#x2F;matrix.org&#x2F;speculator&lt;&#x2F;a&gt;. Meanwhile, we&#x27;re waiting for the last bits of the end-to-end encryption APIs to land there before releasing 0.3 of the Matrix spec, which should happen any day now.
&lt;p&gt;To find out more and get upgraded if you haven&#x27;t already, please check out &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;releases&#x2F;tag&#x2F;v0.18.3&quot;&gt;the full changelog&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;synapse-scalability&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#synapse-scalability&quot; aria-label=&quot;Anchor link for: synapse-scalability&quot;&gt;🔗&lt;&#x2F;a&gt;Synapse scalability&lt;&#x2F;h2&gt;
&lt;p&gt;Something which we&#x27;ve been quietly adding over the last 6 months is support for running large synapse deployments like the Matrix.org homeserver. Matrix.org has around 500K accounts on it, 50k rooms, and relays around 500K messages per day and obviously the community expects it to have good performance and availability (even though we&#x27;d prefer if you ran your own server, for obvious reasons!)&lt;&#x2F;p&gt;
&lt;p&gt;The current scaling approach for this is called &#x27;Workers&#x27; - where we&#x27;ve split out a whole bunch of different endpoints from the main Synapse process into child &#x27;worker&#x27; processes which replicate their state from the master Synapse process. These workers are designed to scale horizontally, adding as many as you like to handle the traffic load. It&#x27;s not full active&#x2F;active horizontal scalability in that you&#x27;re still limited by the performance of the master process and the database master you&#x27;re writing to, but it&#x27;s a great way to escape Python&#x27;s global interpreter lock limiting processes effectively to a single core, and in practice it&#x27;s a huge improvement and works pretty well as of Synapse 0.18.&lt;&#x2F;p&gt;
&lt;p&gt;You can read more about the architecture and how to run your Synapse in worker-mode over at &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;blob&#x2F;master&#x2F;docs&#x2F;workers.rst&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;blob&#x2F;master&#x2F;docs&#x2F;workers.rst&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;starting-a-riot-now-element&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#starting-a-riot-now-element&quot; aria-label=&quot;Anchor link for: starting-a-riot-now-element&quot;&gt;🔗&lt;&#x2F;a&gt;Starting a Riot (now Element)&lt;&#x2F;h2&gt;
&lt;p&gt;Meanwhile, the biggest news in Matrixland has probably been the renaming of Vector as Riot (now Element) and the &#x27;mass market&#x27; launch of Riot as a flagship Matrix client at the &lt;a href=&quot;http:&#x2F;&#x2F;pulverhwc.evolero.com&#x2F;monage&quot;&gt;MoNage&lt;&#x2F;a&gt; conference on Sept 19th in Boston. The reasons for renaming Vector have been done to death by now and hopefully folks have got over the shock, but the rationale is to have a more distinctive and memorable (and controversial!) name, which is more aligned with the idea of returning control of communication back to the people :) Amandine has the full story over at the &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@RiotChat&#x2F;lets-riot-f5b0aa99dc8e&quot;&gt;Riot blog&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Riot (now Element) itself is a fairly thin layer on top of the official client Matrix SDKs, and so 95% of the work for Riot (now Element) took the form of updates to &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-js-sdk&quot;&gt;matrix-js-sdk&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-react-sdk&quot;&gt;matrix-react-sdk&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-ios-sdk&quot;&gt;matrix-ios-sdk&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-ios-kit&quot;&gt;matrix-ios-kit&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-android-sdk&quot;&gt;matrix-android-sdk&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&quot;&gt;synapse&lt;&#x2F;a&gt; itself. There&#x27;s been a tonne of changes here since June, but the main highlights are:&lt;&#x2F;p&gt;
&lt;ul&gt;
 	&lt;li&gt;End-to-end encryption support landed in matrix-js-sdk and matrix-react-sdk (and thus Riot&#x2F;Web (now Element)) and in dev on matrix-ios-sdk and matrix-android-sdk using the Olm and Megolm ratchets. More about this later.&lt;&#x2F;li&gt;
 	&lt;li&gt;Hosted integrations, bots and bridges! More about this later too.&lt;&#x2F;li&gt;
 	&lt;li&gt;Direct Message UI landed in Riot&#x2F;Web (now Element) to tag rooms which exist for contacting a specific user. These get grouped now as the &#x27;People&#x27; list in Riot (now Element). It&#x27;s in dev on Riot&#x2F;iOS (now Element (iOS)) &amp; Android (now Element Android).&lt;&#x2F;li&gt;
 	&lt;li&gt;Entirely new UI for starting conversations with people - no more creating a room and then inviting; you just say &quot;i want to talk with Bob&quot;.&lt;&#x2F;li&gt;
 	&lt;li&gt;Entirely new UI for inviting people into a room - no more confusion between searching the membership list and inviting users.&lt;&#x2F;li&gt;
 	&lt;li&gt;FilePanel UI in Riot&#x2F;Web (now Element) to instantly view all the attachments posted in a room&lt;&#x2F;li&gt;
 	&lt;li&gt;NotificationPanel UI in Riot&#x2F;Web (now Element) to instantly view all your missed notifications and mentions in a single place&lt;&#x2F;li&gt;
 	&lt;li&gt;&quot;Volume control&quot; UI to have finer grained control over per-room notification noisiness&lt;&#x2F;li&gt;
 	&lt;li&gt;Entirely re-worked Room Directory navigator - lazy-loading the directory from the server, and selecting rooms via bridge and remote server&lt;&#x2F;li&gt;
 	&lt;li&gt;It&#x27;s very exciting to see a wider audience discovering Matrix through Riot (now Element) - and Riot (now Element)&#x27;s usage stats have been growing steadily since launch, but there&#x27;s still a lot of room for improvement.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
Stuff on the horizon includes:
&lt;ul&gt;
 	&lt;li&gt;Formal beta-testing the full end-to-end encryption feature-set.&lt;&#x2F;li&gt;
 	&lt;li&gt;Performance and optimisation work on all platforms - there are huge improvements to be had.&lt;&#x2F;li&gt;
 	&lt;li&gt;Long-awaited poweruser features: &#x27;dark&#x27; colour scheme; more whitespace-efficient layout; collapsing consecutive joins&#x2F;parts...&lt;&#x2F;li&gt;
 	&lt;li&gt;&quot;Landing page&quot; to help explain what&#x27;s going on to new users and to show deployment-specific announcements and room lists.&lt;&#x2F;li&gt;
 	&lt;li&gt;Support for arbitrary profile information.&lt;&#x2F;li&gt;
 	&lt;li&gt;Threading.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
Riot (now Element) releases are announced on &lt;a href=&quot;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#riot:matrix.org&quot;&gt;#riot:matrix.org&lt;&#x2F;a&gt;, the &lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@RiotChat&quot;&gt;Riot blog&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;twitter.com&#x2F;@RiotChat&quot;&gt;Twitter&lt;&#x2F;a&gt; - keep your eyes peeled for updates!
&lt;h2 id=&quot;end-to-end-encryption&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#end-to-end-encryption&quot; aria-label=&quot;Anchor link for: end-to-end-encryption&quot;&gt;🔗&lt;&#x2F;a&gt;End to End Encryption&lt;&#x2F;h2&gt;
&lt;p&gt;Full cross-platform end-to-end encryption is incredibly close now, with the develop branches of iOS &amp;amp; Android SDKs and Riot (now Element) currently in internal testing as of Nov 7 - expect a Big Announcement very shortly.  We&#x27;re very optimistic based on how the initial implementation on Riot&#x2F;Web (now Element)has been behaving so far.&lt;&#x2F;p&gt;
&lt;p&gt;When E2E first landed on Riot&#x2F;Web (now Element) in September we were missing mobile support, encrypted attachments, encrypted VoIP signalling, and the ability to retrieve encrypted history on new devices - as well as a formal audit of the underlying &lt;a href=&quot;&#x2F;docs&#x2F;spec&#x2F;olm.html&quot;&gt;Olm&lt;&#x2F;a&gt; and &lt;a href=&quot;&#x2F;docs&#x2F;spec&#x2F;megolm.html&quot;&gt;Megolm&lt;&#x2F;a&gt; libraries. Since then things have progressed enormously with most of the core team working since September on filling in the gaps, as well as getting audited and fixing all the weird and wonderful edge cases that the audit showed up. All the missing stuff has been landing on the develop branches over the last few weeks, with encrypted attachments landing on web on Nov 10; encrypted VoIP landing on Nov 11; etc. Watch this space for news on the upcoming cross-platform public beta!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;hosted-integrations-and-introducing-go-neb&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#hosted-integrations-and-introducing-go-neb&quot; aria-label=&quot;Anchor link for: hosted-integrations-and-introducing-go-neb&quot;&gt;🔗&lt;&#x2F;a&gt;Hosted Integrations and introducing go-neb&lt;&#x2F;h2&gt;
&lt;p&gt;One of the new features which arrived in Riot (now Element) is the ability to add &quot;single click&quot; integrations (i.e. bots, bridges, application services) into rooms from Riot&#x2F;Web (now Element) by clicking the &quot;Manage Integrations&quot; button in Room Settings. These integrations are hosted for free by Riot (now Element) in its production infrastructure (codenamed Scalar), but all the actual bots&#x2F;bridges&#x2F;services themselves are normal opensource Matrix apps and you can of course run them yourself too.&lt;&#x2F;p&gt;
&lt;img class=&quot;aligncenter wp-image-1827&quot; src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2016&#x2F;11&#x2F;Screen-Shot-2016-11-12-at-11.47.29-1024x913.png&quot; alt=&quot;screen-shot-2016-11-12-at-11-47-29&quot; width=&quot;894&quot; height=&quot;797&quot; &#x2F;&gt;
&lt;p&gt;The Bot integrations are all provided by &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;go-neb&quot;&gt;go-neb&lt;&#x2F;a&gt; - a complete rewrite in Golang and general reimagining of the old &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;Matrix-NEB&quot;&gt;python NEB bot&lt;&#x2F;a&gt; which old-timers will recall as the very first bot written for the Matrix ecosystem. Go-neb has effectively now become a general purpose golang bot&#x2F;integration framework for Matrix, with the various different services implemented as plugins for &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;go-neb&#x2F;tree&#x2F;master&#x2F;src&#x2F;github.com&#x2F;matrix-org&#x2F;go-neb&#x2F;services&#x2F;github&quot;&gt;Github&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;go-neb&#x2F;tree&#x2F;master&#x2F;src&#x2F;github.com&#x2F;matrix-org&#x2F;go-neb&#x2F;services&#x2F;jira&quot;&gt;JIRA&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;go-neb&#x2F;tree&#x2F;master&#x2F;src&#x2F;github.com&#x2F;matrix-org&#x2F;go-neb&#x2F;services&#x2F;giphy&quot;&gt;Giphy&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;go-neb&#x2F;tree&#x2F;master&#x2F;src&#x2F;github.com&#x2F;matrix-org&#x2F;go-neb&#x2F;services&#x2F;guggy&quot;&gt;Guggy&lt;&#x2F;a&gt; etc. Critically it supports &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;go-neb#configuring-realms&quot;&gt;authenticating Matrix users through to the remote service&lt;&#x2F;a&gt;, letting normal Matrix users interact with Github and friends using their actual Github identity rather than via a bot user - this is a huge huge improvement over the original naive python NEB.&lt;&#x2F;p&gt;
&lt;p&gt;If you like Go and you like Matrix, we&#x27;d strongly suggest having a go (hah) at adding new services into go-neb: anything implemented against go-neb will also magically be hosted and available as part of the &quot;Manage Integrations&quot; interface in Riot (now Element), as well as being available to anyone else running their own go-nebs. For full details of the architecture and how to implement new plugins, go check out the full &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;go-neb&quot;&gt;README&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;If Matrix is to provide a good FOSS alternative to systems like Slack it&#x27;s critical to have a large array of available integrations, so we really hope that the community will help us grow the list!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;building-bridges&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#building-bridges&quot; aria-label=&quot;Anchor link for: building-bridges&quot;&gt;🔗&lt;&#x2F;a&gt;Building Bridges&lt;&#x2F;h2&gt;
&lt;p&gt;There have been vast improvements to bridging over the last few months, including the ability to &quot;plumb&quot; bridges into arbitrary rooms (letting you link a single Matrix room through to multiple remote networks). Like go-neb, Riot (now Element) is providing free bridge hosting with the ability to add to rooms with a &quot;single click&quot; via the Manage Integrations button in Room Settings. For now, Riot (now Element) is hosting any bridges built on the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-appservice-bridge&quot;&gt;matrix-appservice-bridge&lt;&#x2F;a&gt; codebase.&lt;&#x2F;p&gt;
&lt;p&gt;In short, this means that any user can go and take an existing Matrix room and link it through to Slack, IRC, Gitter, and more.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;matrix-appservice-irc&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#matrix-appservice-irc&quot; aria-label=&quot;Anchor link for: matrix-appservice-irc&quot;&gt;🔗&lt;&#x2F;a&gt;matrix-appservice-irc&lt;&#x2F;h3&gt;
&lt;p&gt;Huge amounts of work have gone into improving the IRC bridge - both adding new features to try to give the most IRC-friendly experience when bridging into IRC, as well as lots of maintenance and performance work to ensure that the matrix.org hosted bridges can scale to the large amounts of traffic we&#x27;re seeing going through Freenode and others. We&#x27;ve also added hosted bridges for OFTC and Snoonet, and turned on connecting via IPv6 by default for networks which support it.&lt;&#x2F;p&gt;
&lt;p&gt;You can read the full changelogs for 0.5.0 and 0.6.0 at &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-appservice-irc&#x2F;blob&#x2F;master&#x2F;CHANGELOG.md&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-appservice-irc&#x2F;blob&#x2F;master&#x2F;CHANGELOG.md&lt;&#x2F;a&gt;, but the main highlights are:&lt;&#x2F;p&gt;
&lt;p&gt;matrix-appservice-irc 0.6.0&lt;&#x2F;p&gt;
&lt;ul&gt;
 	&lt;li&gt;Debouncing quits and netsplits: if IRC users quit there can be a window where they are shown as just offline rather than leaving the room, avoiding join&#x2F;part spam and creating unnecessary state events in Matrix.&lt;&#x2F;li&gt;
 	&lt;li&gt;Topic bridging: IRC topics can now be bridged to Matrix!&lt;&#x2F;li&gt;
 	&lt;li&gt;Support custom SSL CAs (thanks to @Waldteufel)&lt;&#x2F;li&gt;
 	&lt;li&gt;Support custom media repository URLs&lt;&#x2F;li&gt;
 	&lt;li&gt;Support the ability to quit your IRC user from the network entirely&lt;&#x2F;li&gt;
 	&lt;li&gt;Fix rate limiting for traffic from privileged IRC users and services&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
matrix-appservice-irc 0.5.0:
&lt;ul&gt;
 	&lt;li&gt;Support throttling reconnections to IRC servers to avoid triggering abuse thresholds&lt;&#x2F;li&gt;
 	&lt;li&gt;Support &quot;Third party lookup&quot;: mapping from IRC users &amp; rooms into Matrix IDs for discovery purposes&lt;&#x2F;li&gt;
 	&lt;li&gt;Support rate-limiting membership entries to avoid triggering abuse thresholds&lt;&#x2F;li&gt;
 	&lt;li&gt;Require permission of an IRC chanop when plumbing an IRC channel into a Matrix room&lt;&#x2F;li&gt;
 	&lt;li&gt;Prevent routing loops by advisory m.room.bridging events&lt;&#x2F;li&gt;
 	&lt;li&gt;Better error messages&lt;&#x2F;li&gt;
 	&lt;li&gt;Sync chanmode +s correctly&lt;&#x2F;li&gt;
 	&lt;li&gt;Fix IPv6 support&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
Next up is automating NickServ login, and generally continuing to make the IRC experience as good as we possibly can.
&lt;h3 id=&quot;matrix-appservice-slack&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#matrix-appservice-slack&quot; aria-label=&quot;Anchor link for: matrix-appservice-slack&quot;&gt;🔗&lt;&#x2F;a&gt;matrix-appservice-slack&lt;&#x2F;h3&gt;
&lt;p&gt;Similarly, the Slack bridge has had loads of work. The main changes include:&lt;&#x2F;p&gt;
&lt;ul&gt;
 	&lt;li&gt;Ability to dynamically bridge (&quot;plumb&quot;) rooms on request&lt;&#x2F;li&gt;
 	&lt;li&gt;Add Prometheus monitoring metrics&lt;&#x2F;li&gt;
 	&lt;li&gt;Ability to discover slack team tokens via OAuth2&lt;&#x2F;li&gt;
 	&lt;li&gt;Sync avatars both ways&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
We&#x27;re currently looking at shifting over to Slack&#x27;s RTM (Real Time Messaging) API rather than using webhooks in order to get an even better fit with Slack and support bridging DMs, but the current setup is still very usable. For more details: &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-appservice-slack&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-appservice-slack&lt;&#x2F;a&gt;.
&lt;h3 id=&quot;matrix-appservice-gitter&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#matrix-appservice-gitter&quot; aria-label=&quot;Anchor link for: matrix-appservice-gitter&quot;&gt;🔗&lt;&#x2F;a&gt;matrix-appservice-gitter&lt;&#x2F;h3&gt;
&lt;p&gt;The Gitter bridge has provided a lot of inspiration for the more recent work on the Slack bridge. Right now it provides straightforward bridging into Gitter rooms, albeit proxied via a &#x27;matrixbot&#x27; user on the Gitter side. We&#x27;re currently looking at letting also users authenticate using their Gitter credentials so they are bridged through to their &#x27;real&#x27; Gitter user - watch this space. For more details: &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-appservice-gitter&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-appservice-gitter&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;community-updates&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#community-updates&quot; aria-label=&quot;Anchor link for: community-updates&quot;&gt;🔗&lt;&#x2F;a&gt;Community updates&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;matrix-ircd&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#matrix-ircd&quot; aria-label=&quot;Anchor link for: matrix-ircd&quot;&gt;🔗&lt;&#x2F;a&gt;matrix-ircd&lt;&#x2F;h3&gt;
&lt;p&gt;matrix-ircd is a rewrite of the old PTO project (&lt;a href=&quot;http:&#x2F;&#x2F;pto.im&quot;&gt;pto.im&lt;&#x2F;a&gt;): a Rust application that turns Matrix into a single great big decentralised IRC network. PTO itself has unfortunately been on hiatus and is rather bitrotted, so Erik from the core Matrix Team picked it up to see if it could be resurrected. This ended up turning into a complete rewrite (switching from mio to tokio etc), and the new project can be found at &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-ircd&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-ircd&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;matrix-ircd really is an incredibly promising way of getting folks onto Matrix, as it exposes the entirety of Matrix as a virtual IRC network. This means that IRC addicts can jack straight into Matrix, talking native IRC from their existing IRC clients - but interacting directly with Matrix rooms as if they were IRC channesls without going through a bridge. Obviously you lose all of the features and semantics which Matrix provides beyond IRC, but this is still a great way to get started.&lt;&#x2F;p&gt;
&lt;p&gt;The project is currently alpha but provides a good functioning base to extend, and Erik&#x27;s explicitly asking for help from the Rust and Matrix community to fill in all the missing features. If you&#x27;re interested in helping, please come talk on &lt;a href=&quot;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#matrix-ircd:matrix.org&quot;&gt;#matrix-ircd:matrix.org&lt;&#x2F;a&gt;!.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;matrix-appservice-gitter-twisted&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#matrix-appservice-gitter-twisted&quot; aria-label=&quot;Anchor link for: matrix-appservice-gitter-twisted&quot;&gt;🔗&lt;&#x2F;a&gt;matrix-appservice-gitter-twisted&lt;&#x2F;h3&gt;
&lt;p&gt;Not to be confused with the Node-based &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-appservice-gitter&quot;&gt;matrix-appservice-gitter&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;remram44&#x2F;matrix-appservice-gitter-twisted&quot;&gt;matrix-appservice-gitter-twisted&lt;&#x2F;a&gt; is an entirely separate project written in Python&#x2F;Twisted by Remram (Remi Rampin) that has the opposite architecture: rather than bridging existing rooms into Matrix, matrix-appservice-gitter-twisted lets you provide your Gitter credentials and acts instead as a Gitter client, bridging your personal view of a Gitter room into a private Matrix room just for you.&lt;&#x2F;p&gt;
&lt;p&gt;This obviously has some major advantages (your actions on Gitter use your real Gitter account rather than a bot), and some disadvantages too (you can&#x27;t use Matrix features when interacting with other Matrix users in the same room, and the Gitter channel itself is not decentralised into Matrix). However, it&#x27;s a really cool example of how the other model can work - and within the core team, we&#x27;ve been arguing back and forth for ages now on whether normal bridges or &quot;sidecar&quot; bridges like this one are a more preferable architecture. Thanks to Remram&#x27;s work we can try both side by side! Go check it out at &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;remram44&#x2F;matrix-appservice-gitter-twisted&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;remram44&#x2F;matrix-appservice-gitter-twisted&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;telematrix&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#telematrix&quot; aria-label=&quot;Anchor link for: telematrix&quot;&gt;🔗&lt;&#x2F;a&gt;telematrix&lt;&#x2F;h3&gt;
&lt;p&gt;Telematrix is Telegram&amp;lt;-&amp;gt;Matrix bridge, written by Sijmen Schoon using python3 and asyncio. Right now it&#x27;s a fairly early alpha hardcoded to bridge a specific Telegram channel into a specific Matrix room, but it works and in use and could be an excellent base for folks interested in a more comprehensive Matrix&#x2F;Telegram bridge. Go check it out at &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;SijmenSchoon&#x2F;telematrix&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;SijmenSchoon&#x2F;telematrix&lt;&#x2F;a&gt;
&lt;img class=&quot;aligncenter wp-image-1832&quot; src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2016&#x2F;11&#x2F;telematrix-1024x828.png&quot; alt=&quot;telematrix&quot; width=&quot;641&quot; height=&quot;518&quot; &#x2F;&gt;&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ruma&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ruma&quot; aria-label=&quot;Anchor link for: ruma&quot;&gt;🔗&lt;&#x2F;a&gt;Ruma&lt;&#x2F;h3&gt;
&lt;p&gt;Meanwhile, the Ruma project to write a Matrix homeserver in Rust has been progressing steadily, with more and more checkboxes appearing on the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ruma&#x2F;ruma&#x2F;blob&#x2F;master&#x2F;STATUS.md&quot;&gt;status page&lt;&#x2F;a&gt;, with significant new contributions from mujx and farodin91. The best way to keep track of Ruma is to read Jimmy&#x27;s excellent &lt;a href=&quot;https:&#x2F;&#x2F;ruma.dev&#x2F;news&#x2F;&quot;&gt;This Week in Ruma&lt;&#x2F;a&gt; updates and of course hang out on &lt;a href=&quot;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#ruma:matrix.org&quot;&gt;#ruma:matrix.org&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;nachat&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#nachat&quot; aria-label=&quot;Anchor link for: nachat&quot;&gt;🔗&lt;&#x2F;a&gt;NaChat&lt;&#x2F;h3&gt;
&lt;p&gt;An entirely new client on the block since the last update is &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;ralith&#x2F;nachat&quot;&gt;NaChat&lt;&#x2F;a&gt;, written by Ralith. NaChat is a pure cross-platform Qt&#x2F;C++ desktop client written from the ground up, supporting local history synchronisation, excellent performance, native Qt theming, and generally being a lean and mean Matrix client machine. It&#x27;s still alpha, but it&#x27;s easy to build and a lot of fun to play with.&lt;&#x2F;p&gt;
&lt;img class=&quot;aligncenter wp-image-1828&quot; src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2016&#x2F;11&#x2F;Screen-Shot-2016-11-12-at-12.01.03-1024x664.png&quot; alt=&quot;screen-shot-2016-11-12-at-12-01-03&quot; width=&quot;1009&quot; height=&quot;654&quot; &#x2F;&gt;
&lt;p&gt;Please give a spin, encourage Ralith to finish the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ralith&#x2F;nachat&#x2F;tree&#x2F;timeline-view-rewrite&quot;&gt;timeline-view-rewrite&lt;&#x2F;a&gt; branch (which is probably the one you want to be running!), and come hang out on &lt;a href=&quot;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#nachat:matrix.org&quot;&gt;#nachat:matrix.org&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;quaternion&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#quaternion&quot; aria-label=&quot;Anchor link for: quaternion&quot;&gt;🔗&lt;&#x2F;a&gt;Quaternion&lt;&#x2F;h3&gt;
&lt;p&gt;Meanwhile, the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;fxrh&#x2F;quaternion&quot;&gt;Quaternion&lt;&#x2F;a&gt; Qt&#x2F;QML desktop client and its &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;fxrh&#x2F;libqmatrixclient&quot;&gt;libqmatrixclient&lt;&#x2F;a&gt; library has been making sure and steady progress, with fxrh, kitsune, maralorn and others working away at it. The difference with NaChat here is using QML rather than native Qt widgets, and a focus on more advanced UX features like a custom infinite-scrolling scrollbar widget, unread message notifications, and read-up-to markers.  Recent developments include the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Fxrh&#x2F;Quaternion&#x2F;releases&#x2F;tag&#x2F;v0.0.1&quot;&gt;first official release (0.0.1)&lt;&#x2F;a&gt; on Sept 12, official Windows builds, lots of work on implementing better Read-up-to Markers, scrolling behaviour etc. Again, it&#x27;s worth keeping a checkout of Quaternion handy and playing with the client - it&#x27;s loads of fun!&lt;&#x2F;p&gt;
&lt;img class=&quot;aligncenter size-large wp-image-1829&quot; src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2016&#x2F;11&#x2F;Screen-Shot-2016-11-12-at-12.12.48-1024x535.png&quot; alt=&quot;screen-shot-2016-11-12-at-12-12-48&quot; width=&quot;1024&quot; height=&quot;535&quot; &#x2F;&gt;
&lt;h2 id=&quot;google-summer-of-code-2016-retrospective&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#google-summer-of-code-2016-retrospective&quot; aria-label=&quot;Anchor link for: google-summer-of-code-2016-retrospective&quot;&gt;🔗&lt;&#x2F;a&gt;Google Summer of Code 2016 Retrospective&lt;&#x2F;h2&gt;
&lt;p&gt;The summer is long gone now, and along with it Google Summer of Code. This was the first year we&#x27;ve &lt;a href=&quot;https:&#x2F;&#x2F;summerofcode.withgoogle.com&#x2F;archive&#x2F;2016&#x2F;organizations&#x2F;6552738187968512&#x2F;&quot;&gt;participated in GSoC&lt;&#x2F;a&gt;, and it was an incredible experience - both judging all the applications, and then working with Aviral Dasgupta and Will Hunt (Half-Shot) who joined the core team as part of their GSoC endeavours.&lt;&#x2F;p&gt;
&lt;p&gt;Aviral&#x27;s work has been widespread throughout Riot (now Element): adding consistent Emoji support throughout the app via Emoji One, implementing the beta Rich Text Editor (RTE) and all-new autocompletion UI, as well as a bunch of spec proposals for rich message semantics and an initial Slack Webhooks application service. You can read his wrap up at &lt;a href=&quot;http:&#x2F;&#x2F;www.aviraldg.com&#x2F;p&#x2F;gsoc-2016-wrapup&quot;&gt;http:&#x2F;&#x2F;www.aviraldg.com&#x2F;p&#x2F;gsoc-2016-wrapup&lt;&#x2F;a&gt; and use the code in Riot&#x2F;Web (now Element) today. We&#x27;re currently working on fixing the final issues on RTE and auto-complete and hope to enable them by default real soon now!&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile, Half-Shot&#x27;s work ended up focusing on bridging through to Twitter and working on the Threading spec proposal for Matrix. You can find out all about the Twitter bridge at &lt;a href=&quot;https:&#x2F;&#x2F;half-shot.github.io&#x2F;matrix-appservice-twitter&quot;&gt;https:&#x2F;&#x2F;half-shot.github.io&#x2F;matrix-appservice-twitter&lt;&#x2F;a&gt;; it works incredibly well (arguably too well, given the amount of traffic it can bridge into Matrix! :S) - and we&#x27;re currently working on hosting a version of it on matrix.org for all your tweeting needs. You can see Half-Shot&#x27;s wrapup blog post over at &lt;a href=&quot;https:&#x2F;&#x2F;half-shot.uk&#x2F;gsoc16_evaulation&quot;&gt;https:&#x2F;&#x2F;half-shot.uk&#x2F;gsoc16_evaulation&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Finally, as a bit of a wildcard, we discovered the other day that there was also another GSoC project using Matrix by Waqee Khalid, supported by the &lt;a href=&quot;https:&#x2F;&#x2F;summerofcode.withgoogle.com&#x2F;archive&#x2F;2016&#x2F;organizations&#x2F;6488734048452608&#x2F;&quot;&gt;Berkman Center for Internet and Society&lt;&#x2F;a&gt; at Harvard to &lt;a href=&quot;https:&#x2F;&#x2F;summerofcode.withgoogle.com&#x2F;archive&#x2F;2016&#x2F;projects&#x2F;5749069813121024&#x2F;&quot;&gt;switch Apache Wave (formerly Google Wave) over to using Matrix rather than XMPP&lt;&#x2F;a&gt; for federation!  The implementation looks a little curious here, as Wave used XMPP as a blunt pubsub layer for synchronising protobuf deltas - and it looks like this implementation uses Matrix similarly, thus killing any interop with the rest of Matrix, which is a bit of a shame.  If anyone knows more about the project we&#x27;d love to hear though!&lt;&#x2F;p&gt;
&lt;p&gt;Either way, it&#x27;s been a pleasure to work with the GSoC community and we owe Aviral and Half-Shot (and Waqee!) a huge debt of gratitude for spending their summers (and more!) hacking away improving Matrix. So, thanks Google for making GSoC possible and thanks to the GSoCers for all their contributions, effort &amp;amp; enthusiasm! Watch this space for updates on RTE, new-autocomplete and the twitter bridge going live...&lt;&#x2F;p&gt;
&lt;h2 id=&quot;matrix-in-the-news&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#matrix-in-the-news&quot; aria-label=&quot;Anchor link for: matrix-in-the-news&quot;&gt;🔗&lt;&#x2F;a&gt;Matrix in the news&lt;&#x2F;h2&gt;
&lt;p&gt;Just in case you missed them, there have been a couple of high profile articles flying around about Matrix recently - we made the &lt;a href=&quot;http:&#x2F;&#x2F;www.linux-magazine.com&#x2F;Issues&#x2F;2016&#x2F;189&#x2F;Matrix&quot;&gt;front cover of Linux Magazine in August&lt;&#x2F;a&gt; with a comprehensive review of Matrix and Vector (now Riot (now Element)). Then when we launched Riot (now Element) itself we got a cautiously &lt;a href=&quot;https:&#x2F;&#x2F;techcrunch.com&#x2F;2016&#x2F;09&#x2F;19&#x2F;riot-wants-to-be-like-slack-but-with-the-flexibility-of-an-underlying-open-source-platform&#x2F;&quot;&gt;positive write-up from Mike Butcher at Techcrunch&lt;&#x2F;a&gt;. We also wrote an guest column for Techcrunch about the &lt;a href=&quot;https:&#x2F;&#x2F;techcrunch.com&#x2F;2016&#x2F;10&#x2F;09&#x2F;a-decentralized-web-would-give-power-back-to-the-people-online&#x2F;&quot;&gt;importance of bringing power back to the people via decentralisation&lt;&#x2F;a&gt;, which got a surprising amount of attention on &lt;a href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=12670958&quot;&gt;HackerNews&lt;&#x2F;a&gt; and elsewhere.&lt;&#x2F;p&gt;
&lt;p&gt;More recently, we were lucky enough to get an &lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=LhCfI-xdvlE&quot;&gt;indepth video interview with Bryan Lunduke&lt;&#x2F;a&gt; as part of his &#x27;Linux &amp;amp; Whatnot&#x27; series, and also a &lt;a href=&quot;http:&#x2F;&#x2F;www.networkworld.com&#x2F;article&#x2F;3140014&#x2F;open-source-tools&#x2F;down-the-rabbit-hole-part-5-secure-and-private-instant-messaging.html#tk.twt_nww.&quot;&gt;write-up in NetworkWorld&lt;&#x2F;a&gt; alongside Signal &amp;amp; Wire as part of Bryan&#x27;s journeys in the land of encrypted messaging.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=LhCfI-xdvlE&quot;&gt;&lt;img class=&quot;aligncenter wp-image-1830 size-large&quot; src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2016&#x2F;11&#x2F;Screen-Shot-2016-11-12-at-12.31.34-1024x571.png&quot; alt=&quot;screen-shot-2016-11-12-at-12-31-34&quot; width=&quot;1024&quot; height=&quot;571&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Huge thanks to everyone who&#x27;s been nice enough to spread the word of Matrix!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;matrix-in-real-life&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#matrix-in-real-life&quot; aria-label=&quot;Anchor link for: matrix-in-real-life&quot;&gt;🔗&lt;&#x2F;a&gt;Matrix In Real Life&lt;&#x2F;h2&gt;
&lt;p&gt;Finally, we&#x27;ve been present at a slew of different events. In August we attended FOSSCON again in Philadelphia to give a general update on Matrix to the Freenode community...&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p dir=&quot;ltr&quot; lang=&quot;en&quot;&gt;It&#x27;s &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;fossconNE&quot;&gt;@fossconNE&lt;&#x2F;a&gt; time! Dave will be talking about Matrix at 1pm today. Come &amp; say hi! &lt;a href=&quot;https:&#x2F;&#x2F;t.co&#x2F;KtfTVRnAVn&quot;&gt;pic.twitter.com&#x2F;KtfTVRnAVn&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;— Matrix (@matrixdotorg) &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;matrixdotorg&#x2F;status&#x2F;766998104369426432&quot;&gt;August 20, 2016&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;...and then Riot (now Element) was launched at Monage in Boston in September, with Matthew and Amandine respectively presenting Matrix and Riot (now Element):&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p dir=&quot;ltr&quot; lang=&quot;en&quot;&gt;Best &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;hashtag&#x2F;swag?src=hash&quot;&gt;#swag&lt;&#x2F;a&gt; of &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;hashtag&#x2F;MoNage?src=hash&quot;&gt;#MoNage&lt;&#x2F;a&gt;? The &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;RiotChat&quot;&gt;@RiotChat&lt;&#x2F;a&gt; stand is getting mobbed :) &lt;a href=&quot;https:&#x2F;&#x2F;t.co&#x2F;NltlfO74Y9&quot;&gt;pic.twitter.com&#x2F;NltlfO74Y9&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;— Oisin Lunny (@oisinlunny) &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;oisinlunny&#x2F;status&#x2F;778293579605213185&quot;&gt;September 20, 2016&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Whilst quite a small event, the quality of folks present was incredibly high - much fun was had comparing open communities to walled gardens with Nicola Greco from Tim Berners-Lee&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;solid.mit.edu&quot;&gt;Solid project&lt;&#x2F;a&gt;...&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p dir=&quot;ltr&quot; lang=&quot;en&quot;&gt;.&lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;ara4n&quot;&gt;@ara4n&lt;&#x2F;a&gt; &amp; &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;AmandineLePape&quot;&gt;@AmandineLePape&lt;&#x2F;a&gt; showing off the new Riot (now Element) at &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;hashtag&#x2F;MoNage?src=hash&quot;&gt;#MoNage&lt;&#x2F;a&gt; in &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;hashtag&#x2F;Boston?src=hash&quot;&gt;#Boston&lt;&#x2F;a&gt;! &lt;a href=&quot;https:&#x2F;&#x2F;t.co&#x2F;U0qSNjNLGs&quot;&gt;pic.twitter.com&#x2F;U0qSNjNLGs&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;— Riot (@RiotChat) &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;RiotChat&#x2F;status&#x2F;778610558983634945&quot;&gt;September 21, 2016&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;...comparing notes with the founders of ICQ, hanging out with Alan from Wire...&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p dir=&quot;ltr&quot; lang=&quot;en&quot;&gt;A meeting of the messaging minds! &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;wire&quot;&gt;@Wire&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;matrixdotorg&quot;&gt;@matrixdotorg&lt;&#x2F;a&gt; federating over a pint at &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;hashtag&#x2F;MoNage?src=hash&quot;&gt;#MoNage&lt;&#x2F;a&gt;. &lt;a href=&quot;https:&#x2F;&#x2F;t.co&#x2F;uTUvWrKRqp&quot;&gt;pic.twitter.com&#x2F;uTUvWrKRqp&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;— Oisin Lunny (@oisinlunny) &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;oisinlunny&#x2F;status&#x2F;778731058170736640&quot;&gt;September 21, 2016&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;...chatting to FireChat&#x27;s CTO, catching up with Dan York from the Internet Society, etc.&lt;&#x2F;p&gt;
&lt;p&gt;Then in October we spoke about scaling Python&#x2F;Twisted for Matrix at PyCon France in Rennes - this was really fun, albeit slightly embarrassing to be the only talk about Python&#x2F;Twisted in a track otherwise entirely about Python 3 and asyncio :D That said, the talk seemed to be well received and it was fantastic to meet some of the enthusiastic French Python community and see folks in the audience who were already up and running on Matrix!&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p dir=&quot;ltr&quot; lang=&quot;en&quot;&gt;Lots of fun at &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;pyconfr&quot;&gt;@pyconfr&lt;&#x2F;a&gt; today demoing Matrix, including a quick video conference with the audience &amp; &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;hashtag&#x2F;TADHack?src=hash&quot;&gt;#TADHack&lt;&#x2F;a&gt; London! &lt;a href=&quot;https:&#x2F;&#x2F;t.co&#x2F;rwbA43X7wB&quot;&gt;pic.twitter.com&#x2F;rwbA43X7wB&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;— Matrix (@matrixdotorg) &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;matrixdotorg&#x2F;status&#x2F;787332779264602112&quot;&gt;October 15, 2016&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;The same weekend also featured TADHack Global - we were present at the London site; you can read all about it in our &lt;a href=&quot;&#x2F;blog&#x2F;2016&#x2F;10&#x2F;20&#x2F;tadhack-global-2016&#x2F;&quot;&gt;earlier blog post&lt;&#x2F;a&gt;. There was a really high standard of hacks on Matrix this year, and it was incredibly hard to judge the hackathon. In most ways this is a good problem to have though!&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p dir=&quot;ltr&quot; lang=&quot;en&quot;&gt;Dramatic prep for &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;maffydub&quot;&gt;@maffydub&lt;&#x2F;a&gt; and yinyee&#x27;s Matrix IoT demo with multiple ESP8266, proximity sensor, and &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;Tropo&quot;&gt;@tropo&lt;&#x2F;a&gt; ASR!! &lt;a href=&quot;https:&#x2F;&#x2F;t.co&#x2F;eytG8QWFq6&quot;&gt;pic.twitter.com&#x2F;eytG8QWFq6&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;— Matrix (@matrixdotorg) &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;matrixdotorg&#x2F;status&#x2F;787639861696139264&quot;&gt;October 16, 2016&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Meanwhile, coming up on the horizon we have TADSummit in Lisbon next week, where we&#x27;ll be giving an update on Matrix to the global Telco Application Developer community, and then the week after we&#x27;ll be in Israel as part of the Geektime Techfest, Devfest and Chatbot Summit. So if you&#x27;re in Lisbon or Tel Aviv do give us a ping on Matrix and come hang out!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;matrixing-for-fun-and-profit&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#matrixing-for-fun-and-profit&quot; aria-label=&quot;Anchor link for: matrixing-for-fun-and-profit&quot;&gt;🔗&lt;&#x2F;a&gt;Matrixing for fun and profit!&lt;&#x2F;h2&gt;
&lt;p&gt;If you&#x27;ve read this far, we&#x27;re guessing you&#x27;re hopefully quite interested in Matrix (or just skipping to the end ;).  Something we don&#x27;t talk about as much as we should is that if you&#x27;re interested in being paid to work on Matrix full time, we&#x27;re always interested in expanding the core team.  Right now we&#x27;re particularly looking for:&lt;&#x2F;p&gt;
&lt;ul&gt;
 	&lt;li&gt;Experienced front-end developers who can help build the next generation of matrix-react-sdk and vector-web&lt;&#x2F;li&gt;
 	&lt;li&gt;Professional tech-writers to help keep &lt;a href=&quot;&#x2F;docs&#x2F;spec&quot;&gt;The Spec&lt;&#x2F;a&gt; and tutorials and other docs updated and as kick-ass as possible&lt;&#x2F;li&gt;
 	&lt;li&gt;Backend Python&#x2F;Twisted or Golang wizards to help us improve and evolve Synapse&lt;&#x2F;li&gt;
 	&lt;li&gt;Mobile developers (especially Android) to help keep the mobile SDKs and apps evolving as quickly as possible&lt;&#x2F;li&gt;
 	&lt;li&gt;Integration fiends who&#x27;d like to be paid to build more bridges, bots and other integrations for the overall ecosystem!&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
Most of the core team hangs out in London or Rennes (France), but we&#x27;re also open to remote folks where it makes sense.  If this sounds interesting, please shoot us a mail to jobs@matrix.org.  Obviously it helps enormously if we already know you from the Matrix community, and you have a proven FOSS track record.
&lt;h2 id=&quot;conclusion&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#conclusion&quot; aria-label=&quot;Anchor link for: conclusion&quot;&gt;🔗&lt;&#x2F;a&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;Apologies once again for an overdue and overlong update, but hopefully this gives a good taste of how Matrix is progressing. Just to give a different datapoint: this graph is quite interesting - showing the volume of events per day sent by native (i.e. non-bridged) Matrix users visible to the matrix.org homeserver since we turned the service on back in 2014:&lt;&#x2F;p&gt;
&lt;img class=&quot;aligncenter wp-image-1833&quot; src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2016&#x2F;11&#x2F;Screen-Shot-2016-11-04-at-11.02.58-1-1024x778.png&quot; alt=&quot;screen-shot-2016-11-04-at-11-02-58-1&quot; width=&quot;958&quot; height=&quot;728&quot; &#x2F;&gt;
&lt;p&gt;As you can see, things are accelerating quite nicely - and this is ignoring all the traffic in the rest of the Matrix ecosystem that happens not to be federated onto the matrix.org HS, not to mention the &lt;em&gt;huge&lt;&#x2F;em&gt; amounts of traffic due to bridging.&lt;&#x2F;p&gt;
&lt;p&gt;Our plans over the next few months are going to involve:&lt;&#x2F;p&gt;
&lt;ul&gt;
 	&lt;li&gt;Turning on end-to-end encryption by default for any rooms with private history - whilst ensuring it&#x27;s as easy to write Matrix clients, bots and bridges as it ever was.&lt;&#x2F;li&gt;
 	&lt;li&gt;Yet more scalability and performance work across the board, to ensure Synapse and the client SDKs can handle the growth curve we&#x27;re seeing here&lt;&#x2F;li&gt;
 	&lt;li&gt;Releasing 0.3.0 of the matrix spec itself.&lt;&#x2F;li&gt;
 	&lt;li&gt;Making Riot (now Element)&#x27;s UX excellent.&lt;&#x2F;li&gt;
 	&lt;li&gt;Editable messages.&lt;&#x2F;li&gt;
 	&lt;li&gt;Threading.&lt;&#x2F;li&gt;
 	&lt;li&gt;User groups, for applying permissions&#x2F;invites etc to groups of users as well as individuals.&lt;&#x2F;li&gt;
 	&lt;li&gt;Formalising the federation spec at last&lt;&#x2F;li&gt;
 	&lt;li&gt;As many bots, bridges and other integrations as possible!&lt;&#x2F;li&gt;
 	&lt;li&gt;Making VoIP&#x2F;Video conferencing and calling awesome.&lt;&#x2F;li&gt;
 	&lt;li&gt;More experiments with next-generation homeservers&lt;&#x2F;li&gt;
 	&lt;li&gt;Starting to really think hard about decentralised identity and reputation&#x2F;spam management&lt;&#x2F;li&gt;
 	&lt;li&gt;...and a few new things we don&#x27;t want to talk about yet ;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
If you&#x27;ve got this far - congratulations! Thanks for reading, and thank you for supporting the Matrix ecosystem.
&lt;p&gt;Now more than ever before we believe that it is absolutely critical to have a healthy and secure decentralised communications ecosystem on the &#x27;net (whether that&#x27;s Matrix, XMPP, Tox or whatever) - so thank you again for participating in our one :)  And if you don&#x27;t already run your server, please &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&quot;&gt;grab a Synapse&lt;&#x2F;a&gt; and have fun!&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Matthew, Amandine &amp;amp; the Matrix Team.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
</entry>

    
<entry xml:lang="en">
    <title>The Matrix Summer Special!!</title>
    <published>2016-07-04T00:00:00+00:00</published>
    <updated>2016-07-04T00:00:00+00:00</updated>
    <author>
      <name>Matthew Hodgson</name>
    </author>
    <link rel="alternate" href="https://c956b204.matrix-website.pages.dev/blog/2016/07/04/the-matrix-summer-special/" type="text/html"/>
    <id>https://c956b204.matrix-website.pages.dev/blog/2016/07/04/the-matrix-summer-special/</id>
    <content type="html">&lt;p&gt;Hi folks - another few months have gone by and once again the core Matrix team has ended up too busy hacking away on the final missing pieces of the Matrix jigsaw puzzle to have been properly updating the blog; sorry about this. The end is in sight for the current crunch however, and we expect to return to regular blog updates shortly! Meanwhile, rather than letting news stack up any further, here&#x27;s a quick(?) attempt to summarise all the things which have been going on!&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;synapse-0-16-1-released&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#synapse-0-16-1-released&quot; aria-label=&quot;Anchor link for: synapse-0-16-1-released&quot;&gt;🔗&lt;&#x2F;a&gt;Synapse 0.16.1 released!&lt;&#x2F;h2&gt;
&lt;p&gt;This one&#x27;s a biggy: in the mad rush during June to support the public debut for &lt;a href=&quot;https:&#x2F;&#x2F;vector.im&quot;&gt;Vector&lt;&#x2F;a&gt;, we made a series of major &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&quot;&gt;Synapse&lt;&#x2F;a&gt; releases which apparently we forgot to tell anyone about (sorry!). The full changelog is at the bottom of the post as it&#x27;s huge, but the big features are:&lt;&#x2F;p&gt;
&lt;ul&gt;
 	&lt;li&gt;Huge performance improvements, including adding write-thru event caches and improving caching throughout, and massive improvements to the speed of the room directory API.&lt;&#x2F;li&gt;
 	&lt;li&gt;Add support for inline URL previewing!&lt;&#x2F;li&gt;
 	&lt;li&gt;Add email notifications!&lt;&#x2F;li&gt;
 	&lt;li&gt;Add support for LDAP authentication (thanks to Christoph Witzany)&lt;&#x2F;li&gt;
 	&lt;li&gt;Add support for JWT authentication (thanks to Niklas Riekenbrauck)&lt;&#x2F;li&gt;
 	&lt;li&gt;Add basic server-side ignore functionality and abuse reporting API&lt;&#x2F;li&gt;
 	&lt;li&gt;Add ability to delegate &#x2F;publicRooms API requests to a list of secondary homeservers&lt;&#x2F;li&gt;
 	&lt;li&gt;Lots and lots and lots of bug fixes.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
If you haven&#x27;t upgraded, please do asap from &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&lt;&#x2F;a&gt;!
&lt;p&gt;There&#x27;s also been a huge amount of work going on behind the scenes on horizontal scalability for Synapse.  We haven&#x27;t drawn much attention to this yet (or documented it) as it&#x27;s still quite experimental and in flux, but the main change is to add the concept of application-layer replication to Synapse - letting you split the codebase into multiple endpoints which can then be run in parallel, each replicating their state off the master synapse process.  For instance, right now the Matrix.org homeserver is actually running off three different processes: the main synapse; another specific to calculating push notifications and another specific to serving up the &#x2F;sync endpoint.  These three are then abstracted behind the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;dendron&quot;&gt;dendron&lt;&#x2F;a&gt; layer (which also implements the &#x2F;login endpoint). The idea is that one can then run multiple instances of the &#x2F;sync and pusher (and other future) endpoints to horizontally scale.  For now, they share a single database writer, but in practice this has improved our scalability and performance on the Matrix.org HS radically.&lt;&#x2F;p&gt;
&lt;p&gt;In future we&#x27;ll actually document how to run these, as well as making it easy to spin up multiple concurrent instances - in the interim if you find you&#x27;re hitting performance limits running high-traffic synapses come talk to us about it on &lt;a href=&quot;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#matrix-dev:matrix.org&quot;&gt;#matrix-dev:matrix.org&lt;&#x2F;a&gt;.  And the longer term plan continues to be to switch out these python endpoint implementations in future for more efficient implementations.  For instance, there&#x27;s a golang implementation of the media repository currently in development which could run as another endpoint cluster.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;vector-released&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#vector-released&quot; aria-label=&quot;Anchor link for: vector-released&quot;&gt;🔗&lt;&#x2F;a&gt;Vector released!&lt;&#x2F;h2&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;medium.com&#x2F;@Vector&#x2F;2d33b23a787&quot;&gt;Much has been written&lt;&#x2F;a&gt; about this &lt;a href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=11871527&quot;&gt;elsewhere&lt;&#x2F;a&gt;, but Web, iOS and Android versions of the &lt;a href=&quot;https:&#x2F;&#x2F;www.vector.im&quot;&gt;Vector&lt;&#x2F;a&gt; clients were finally released to the general public on June 9th at the &lt;a href=&quot;http:&#x2F;&#x2F;www.decentralizedweb.net&#x2F;&quot;&gt;Decentralised Web Summit&lt;&#x2F;a&gt; in San Francisco.  Vector is a relatively thin layer on top of the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-react-sdk&quot;&gt;matrix-react-sdk&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-ios-sdk&quot;&gt;matrix-ios-sdk&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-android-sdk&quot;&gt;matrix-android-sdk&lt;&#x2F;a&gt; Matrix.org client SDKs which showcases Matrix&#x27;s collaboration and messaging capabilities in a mass-market usable app.  There&#x27;s been huge amounts of work here across the SDKs for the 3 platforms, with literally thousands of issues resolved.  You can find the full SDK changelogs on github for &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-react-sdk&#x2F;blob&#x2F;master&#x2F;CHANGELOG.md&quot;&gt;React&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-ios-kit&#x2F;blob&#x2F;master&#x2F;CHANGES.rst&quot;&gt;iOS&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-android-sdk&#x2F;blob&#x2F;master&#x2F;CHANGES.rst&quot;&gt;Android&lt;&#x2F;a&gt;.  Some of the more interesting recent additions to Vector include improved room notifications, URL previews, configurable email notifications, and huge amounts of performance stability work.&lt;&#x2F;p&gt;
&lt;p&gt;Future work on Vector is focused on showcasing end-to-end encryption, providing a one-click interface for adding bots&#x2F;integrations &amp;amp; bridges to a room, and generally enormously improving the UX and polish.  Meanwhile, there&#x27;s an F-Droid release for Android landing &lt;a href=&quot;https:&#x2F;&#x2F;f-droid.org&#x2F;repository&#x2F;browse&#x2F;?fdid=im.vector.alpha&quot;&gt;any day now&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;If you haven&#x27;t checked it out recently, it&#x27;s really worth a look :)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;vector.im&quot;&gt;&lt;img class=&quot;aligncenter size-large wp-image-1658&quot; src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2016&#x2F;07&#x2F;Screen-Shot-2016-07-04-at-12.18.10-1024x591.png&quot; alt=&quot;Vector&quot; width=&quot;1024&quot; height=&quot;591&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;matrix-spec-0-1-0&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#matrix-spec-0-1-0&quot; aria-label=&quot;Anchor link for: matrix-spec-0-1-0&quot;&gt;🔗&lt;&#x2F;a&gt;Matrix Spec 0.1.0&lt;&#x2F;h2&gt;
&lt;p&gt;In case you didn&#x27;t notice, we also released &lt;a href=&quot;http:&#x2F;&#x2F;matrix.org&#x2F;docs&#x2F;spec&#x2F;&quot;&gt;v0.1.0 of the Matrix spec&lt;&#x2F;a&gt; itself in May - this is a fairly minor update which improves the layout of the document somewhat (thanks to a PR from Jimmy Cuadra) and a some bugfixes.  You can see the &lt;a href=&quot;http:&#x2F;&#x2F;matrix.org&#x2F;docs&#x2F;spec&#x2F;client_server&#x2F;r0.1.0.html#changelog&quot;&gt;full changelog here&lt;&#x2F;a&gt;. We&#x27;re overdue a new release since then (albeit again with relatively minor changes).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;google-summer-of-code&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#google-summer-of-code&quot; aria-label=&quot;Anchor link for: google-summer-of-code&quot;&gt;🔗&lt;&#x2F;a&gt;Google Summer of Code&lt;&#x2F;h2&gt;
&lt;p&gt;We&#x27;re in the middle of the second half of GSoC right now, with our GSoC students Aviral and Half-Shot hacking away on Vector and Microblogging projects respectively.  There&#x27;s a lot of exciting stuff coming out of this - Aviral contributing Rich Text Editing, Emoji autocompletion, DuckDuckGo and other features into Vector (currently on branches, but will be released soon) and Half-Shot building a Twitter bridge as part of his Matrix-powered microblogging system.  Watch this space for updates!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;ruma&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ruma&quot; aria-label=&quot;Anchor link for: ruma&quot;&gt;🔗&lt;&#x2F;a&gt;Ruma&lt;&#x2F;h2&gt;
&lt;p&gt;Lots of exciting stuff has been happening recently over at &lt;a href=&quot;https:&#x2F;&#x2F;ruma.dev&#x2F;&quot;&gt;Ruma.io&lt;&#x2F;a&gt; - an independent Matrix homeserver implementation written in Rust.  Over the last few weeks Jimmy and friends have got into the real meat of implementing e&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ruma&#x2F;ruma&#x2F;commit&#x2F;8a2fe269196dfd5b629c6e301e8d78e19ae6d279&quot;&gt;vents&lt;&#x2F;a&gt; and the core of the Matrix CS API, and as of the time of writing they&#x27;re the &lt;a href=&quot;https:&#x2F;&#x2F;news.ycombinator.com&#x2F;item?id=12028475&quot;&gt;topmost link&lt;&#x2F;a&gt; on HackerNews!  There&#x27;s a lot of work involved in writing a homeserver, but Ruma is looking incredibly promising and the feedback from their team has been incredibly helpful in keeping us honest on the Matrix spec and ensuring that it&#x27;s fit for purpose for 3rd party server implementers.&lt;&#x2F;p&gt;
&lt;p&gt;Also, Ruma just released some &lt;a href=&quot;https:&#x2F;&#x2F;ruma.dev&#x2F;docs&#x2F;matrix&quot;&gt;truly excellent documentation&lt;&#x2F;a&gt; as a high-level introduction to Matrix (thanks to Leah and Jimmy) - much better than anything we have on the official Matrix.org site.  Go check it out if you haven&#x27;t already!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;end-to-end-encryption&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#end-to-end-encryption&quot; aria-label=&quot;Anchor link for: end-to-end-encryption&quot;&gt;🔗&lt;&#x2F;a&gt;End to End Encryption&lt;&#x2F;h2&gt;
&lt;p&gt;There has been &lt;em&gt;LOADS&lt;&#x2F;em&gt; of work happening on End to End encryption: finalising the core 1:1 &quot;&lt;a href=&quot;&#x2F;git&#x2F;olm&quot;&gt;Olm&lt;&#x2F;a&gt;&quot; cryptographic ratchet; implementing the group &quot;&lt;a href=&quot;http:&#x2F;&#x2F;matrix.org&#x2F;git&#x2F;olm&#x2F;tree&#x2F;src&#x2F;megolm.c&quot;&gt;Megolm&lt;&#x2F;a&gt;&quot; ratchet (which shares a single ratchet over all the participants of a room for scalability); fully hooking Olm into matrix-js-sdk and Vector-web at last, and preparing for a formal and published-to-the-public 3rd party security audit on Olm which will be happening during July.&lt;&#x2F;p&gt;
&lt;p&gt;This deserves a post in its own right, but the key thing to know is that Olm is almost ready - and indeed the work-in-progress E2E UX is even available on the &lt;a href=&quot;https:&#x2F;&#x2F;vector.im&#x2F;develop&quot;&gt;develop branch of vector&lt;&#x2F;a&gt; if you enable E2E in the new &#x27;Labs&#x27; section in User Settings.  Olm itself is usable only for &#x27;burn after reading&#x27; strictly PFS messages, but Megolm integration with Vector &amp;amp; Synapse will follow shortly afterwards which will finally provide the E2E nirvana we&#x27;ve all been waiting for :)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;decentralised-web-summit&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#decentralised-web-summit&quot; aria-label=&quot;Anchor link for: decentralised-web-summit&quot;&gt;🔗&lt;&#x2F;a&gt;Decentralised Web Summit&lt;&#x2F;h2&gt;
&lt;p&gt;Matrix had a major presence as a sponsor at the first ever &lt;a href=&quot;http:&#x2F;&#x2F;www.decentralizedweb.net&#x2F;&quot;&gt;Decentralised Web Summit&lt;&#x2F;a&gt; hosted by the Internet Archive in San Francisco back in June.  This was a truly incredible event - with folks gathering from across the world to discuss, collaborate and debate on ensure that the web is not fragmented or trapped into proprietary silos - with the likes of Tim Berners-Lee, Vint Cerf and Brewster Kahle in attendance.  We ran a long 2 hour workshop on Matrix and showed off Vector to anyone and everyone - and meanwhile the organisers were kind enough to promote Matrix as the main decentralised chat interface for the conference itself (bridged with their Slack).  A full writeup of the conference really merits a blog post in its own right, but the punchline is that you could genuinely tell that this is the beginning of a new era of the internet - whether it&#x27;s using Merkle DAGs (like Matrix) or Blockchain or similar technologies: we are about to see a major shift in the balance of power on the internet back towards its users.&lt;&#x2F;p&gt;
&lt;p&gt;We strongly recommend checking out the videos which have all been published at &lt;a href=&quot;http:&#x2F;&#x2F;www.decentralizedweb.net&#x2F;&quot;&gt;Decentralised Web Summit&lt;&#x2F;a&gt;, including &lt;a href=&quot;https:&#x2F;&#x2F;archive.org&#x2F;details&#x2F;DWebSummit2016_Lightning_Talks_Session_B&quot;&gt;lightning talks introducing both Matrix and Vector&lt;&#x2F;a&gt;, and digging into as many of the projects advertised as possible.  It was particularly interesting for us to get to know Tim Berners-Lee&#x27;s latest project at MIT: &lt;a href=&quot;https:&#x2F;&#x2F;solid.mit.edu&#x2F;&quot;&gt;Solid&lt;&#x2F;a&gt; - which shares quite a lot of the same goals as Matrix, and subsequently seeing Tim pop up on &lt;a href=&quot;https:&#x2F;&#x2F;vector.im&#x2F;develop&#x2F;#&#x2F;room&#x2F;#decentralizedweb-general:matrix.org&#x2F;$146549767249761pyAQF:matrix.org&quot;&gt;Matrix via Vector&lt;&#x2F;a&gt;.  We&#x27;re really looking forward to working out how Matrix &amp;amp; Solid can complement each other in future.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;parkan&#x2F;status&#x2F;740324969884700672&quot;&gt;&lt;img class=&quot;aligncenter wp-image-1660 size-large&quot; src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2016&#x2F;07&#x2F;timbl-768x1024.jpg&quot; alt=&quot;Matthew, Tim Berners-Lee and Matrix&quot; width=&quot;384&quot; height=&quot;512&quot; &#x2F;&gt;&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;h2 id=&quot;matrix-to&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#matrix-to&quot; aria-label=&quot;Anchor link for: matrix-to&quot;&gt;🔗&lt;&#x2F;a&gt;Matrix.to&lt;&#x2F;h2&gt;
&lt;p&gt;Not the most exciting thing ever, but heads up that there&#x27;s a simple site up at &lt;a href=&quot;https:&#x2F;&#x2F;matrix.to&quot;&gt;https:&#x2F;&#x2F;matrix.to&lt;&#x2F;a&gt; to provide a way of doing client-agnostic links to content in Matrix.  For instance, rather than linking specifically into an app like Vector, you can now say &lt;a href=&quot;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#matrix:matrix.org&quot;&gt;https:&#x2F;&#x2F;matrix.to&#x2F;#&#x2F;#matrix:matrix.org&lt;&#x2F;a&gt; to go there via whatever app you choose.  This is basically a bootstrapping process towards having proper mx:&#x2F;&#x2F; URLs in circulation, but given mx:&#x2F;&#x2F; doesn&#x27;t exist yet, https:&#x2F;&#x2F;matrix.to hopefully provides a useful step in the right direction :)&lt;&#x2F;p&gt;
&lt;p&gt;PRs very welcome at &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix.to&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix.to&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bridges-and-bots&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#bridges-and-bots&quot; aria-label=&quot;Anchor link for: bridges-and-bots&quot;&gt;🔗&lt;&#x2F;a&gt;Bridges and Bots&lt;&#x2F;h2&gt;
&lt;p&gt;Much of the promise of Matrix is the ability to bridge through to other silos, and we&#x27;ve been gradually adding more and more bridging capabilities in.&lt;&#x2F;p&gt;
&lt;p&gt;For instance, the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-appservice-irc&quot;&gt;IRC bridge&lt;&#x2F;a&gt; has had a complete overhaul to add in huge numbers of new features and finally deployed for Freenode a few weeks ago:&lt;&#x2F;p&gt;
&lt;p&gt;New Features:&lt;&#x2F;p&gt;
&lt;ul&gt;
 	&lt;li&gt;Nicks set via &lt;code&gt;!nick&lt;&#x2F;code&gt; will now be preserved across bridge restarts.&lt;&#x2F;li&gt;
 	&lt;li&gt;EXPERIMENTAL: IRC clients created by the bridge can be assigned their own IPv6 address.&lt;&#x2F;li&gt;
 	&lt;li&gt;The bridge will now send connection status information to real Matrix users via the admin room (the same room &lt;code&gt;!nick&lt;&#x2F;code&gt;commands are issued).&lt;&#x2F;li&gt;
 	&lt;li&gt;Added &lt;code&gt;!help&lt;&#x2F;code&gt;.&lt;&#x2F;li&gt;
 	&lt;li&gt;The bridge will now fallback to &lt;code&gt;body&lt;&#x2F;code&gt; if the HTML content contains &lt;em&gt;any&lt;&#x2F;em&gt; unrecognised tags. This makes passing Markdown from Matrix to IRC much nicer.&lt;&#x2F;li&gt;
 	&lt;li&gt;The bridge will now send more metrics to the statsd server, including the join&#x2F;part rate to and from IRC.&lt;&#x2F;li&gt;
 	&lt;li&gt;The config option &lt;code&gt;matrixClients.displayName&lt;&#x2F;code&gt; is now implemented.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
Bug fixes:
&lt;ul&gt;
 	&lt;li&gt;Escape HTML entities when sending from IRC to Matrix. This prevents munging occurring between IRC formatting and textual &amp;lt; element &amp;gt; references, whereby if you sent a tag and some colour codes from IRC it would not escape the tag and therefore send invalid HTML to Matrix.&lt;&#x2F;li&gt;
 	&lt;li&gt;User IDs starting with &lt;code&gt;-&lt;&#x2F;code&gt; are temporarily filtered out from being bridged.&lt;&#x2F;li&gt;
 	&lt;li&gt;Deterministically generate the configuration file.&lt;&#x2F;li&gt;
 	&lt;li&gt;Recognise more IRC error codes as non-fatal to avoid IRC clients reconnecting unnecessarily.&lt;&#x2F;li&gt;
 	&lt;li&gt;Add a 10 second timeout to join events injected via the &lt;code&gt;MemberListSyncer&lt;&#x2F;code&gt; to avoid HOL blocking.&lt;&#x2F;li&gt;
 	&lt;li&gt;&#x27;Frontier&#x27; Matrix users will be forcibly joined to IRC channels even if membership list syncing I-&amp;gt;M is disabled. This ensures that there is always a Matrix user in the channel being bridged to avoid losing traffic.&lt;&#x2F;li&gt;
 	&lt;li&gt;Cache the &lt;code&gt;&#x2F;initialSync&lt;&#x2F;code&gt; request to avoid hitting this endpoint more than once, as it may be very slow.&lt;&#x2F;li&gt;
 	&lt;li&gt;Indexes have been added to the NeDB .db files to improve lookup times.&lt;&#x2F;li&gt;
 	&lt;li&gt;Do not recheck if the bridge bot should part the channel if a virtual user leaves the channel: we know it shouldn&#x27;t.&lt;&#x2F;li&gt;
 	&lt;li&gt;Refine what counts as a &quot;request&quot; for metrics, reducing the amount of double-counting as requests echo back from the remote side.&lt;&#x2F;li&gt;
 	&lt;li&gt;Fixed a bug which caused users to be provisioned off their &lt;code&gt;user_id&lt;&#x2F;code&gt; even if they had a display name set.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
Meanwhile, a &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-appservice-gitter&quot;&gt;Gitter bridge&lt;&#x2F;a&gt; is in active development (and in testing with the Neovim community on Gitter&#x2F;Matrix&#x2F;Freenode), although lacking documentation so far.
&lt;p&gt;Finally, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;Matrix-NEB&quot;&gt;NEB&lt;&#x2F;a&gt; - the Matrix.org bot framework is currently being ported from Python to Golang to act as a general Go SDK for rapidly implementing new bot capabilities.&lt;&#x2F;p&gt;
&lt;p&gt;There&#x27;s little point in all of the effort going into bridges and bots if it&#x27;s too hard for normal users to deploy them, so on the Vector side of things there&#x27;s an ongoing project to build a commercial-grade bot&#x2F;bridge hosted service offering for Matrix which should make it &lt;em&gt;much&lt;&#x2F;em&gt; easier for non-sysadmins to quickly add their own bots and bridges into their rooms.  There&#x27;s nothing to see yet, but we&#x27;ll be yelling about it when it&#x27;s ready!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;conclusion&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#conclusion&quot; aria-label=&quot;Anchor link for: conclusion&quot;&gt;🔗&lt;&#x2F;a&gt;Conclusion&lt;&#x2F;h2&gt;
&lt;p&gt;I&#x27;m sure there&#x27;s a lot of stuff missing from the quick summary above - suffice it to say that the Matrix ecosystem is growing so fast and so large that it&#x27;s pretty hard to keep track of everything that&#x27;s going on.  The big remaining blockers we see at this point are:&lt;&#x2F;p&gt;
&lt;ul&gt;
 	&lt;li&gt;End-to-end Encryption roll-out&lt;&#x2F;li&gt;
 	&lt;li&gt;Polishing UX on Vector - showing that it&#x27;s possible to build better-than-Slack quality UX on top of Matrix&lt;&#x2F;li&gt;
 	&lt;li&gt;Bots, Integrations and Bridges - making them absolutely trivial to build and deploy, and encouraging everyone to write as many as they can!&lt;&#x2F;li&gt;
 	&lt;li&gt;Improving VoIP, especially for conferencing, especially on Mobile&lt;&#x2F;li&gt;
 	&lt;li&gt;Threading&lt;&#x2F;li&gt;
 	&lt;li&gt;Editable messages&lt;&#x2F;li&gt;
 	&lt;li&gt;Synapse scaling and stability - this is massively improved, but there&#x27;s still work to be done.  Meanwhile projects like &lt;a href=&quot;https:&#x2F;&#x2F;ruma.dev&#x2F;&quot;&gt;Ruma&lt;&#x2F;a&gt; give us hope for light at the end of the Synapse tunnel!&lt;&#x2F;li&gt;
 	&lt;li&gt;Spec refinements - there are still a &lt;a href=&quot;&#x2F;jira&#x2F;browse&#x2F;SPEC&quot;&gt;lot of open spec bugs&lt;&#x2F;a&gt; which we need to resolve so we can declare the spec (and thus Matrix!) out of beta.&lt;&#x2F;li&gt;
 	&lt;li&gt;More clients - especially desktop ones; helping out with &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Fxrh&#x2F;Quaternion&quot;&gt;Quaternion&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;davidar&#x2F;tensor&quot;&gt;Tensor&lt;&#x2F;a&gt;, &lt;a href=&quot;https:&#x2F;&#x2F;pto.im&quot;&gt;PTO&lt;&#x2F;a&gt;, etc.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
...and then all the pieces of the jigsaw will finally be in place, and Matrix should hopefully fulfil its potential as an invaluable, open and decentralised data fabric for the web.
&lt;p&gt;Thanks, once again, to everyone who&#x27;s been supporting and using Matrix - whether it&#x27;s by hanging out in the public chatrooms, running your own server, writing your own clients, bots, or servers, or just telling your friends about the project.  The end of the beginning is in sight: thanks for believing in us, and thank you for flying Matrix.&lt;&#x2F;p&gt;
&lt;p&gt;Matthew, Amandine &amp;amp; the Matrix Team.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;appendix-the-missing-synapse-changelogs&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#appendix-the-missing-synapse-changelogs&quot; aria-label=&quot;Anchor link for: appendix-the-missing-synapse-changelogs&quot;&gt;🔗&lt;&#x2F;a&gt;Appendix: The Missing Synapse Changelogs&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;changes-in-synapse-v0-16-1-2016-06-20&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#changes-in-synapse-v0-16-1-2016-06-20&quot; aria-label=&quot;Anchor link for: changes-in-synapse-v0-16-1-2016-06-20&quot;&gt;🔗&lt;&#x2F;a&gt;Changes in synapse v0.16.1 (2016-06-20)&lt;&#x2F;h3&gt;
&lt;p&gt;Bug fixes:&lt;&#x2F;p&gt;
&lt;ul&gt;
 	&lt;li&gt;Fix assorted bugs in &lt;code&gt;&#x2F;preview_url&lt;&#x2F;code&gt; (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;872&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;872&quot; data-id=&quot;160459814&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#872&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Fix TypeError when setting unicode passwords (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;873&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;873&quot; data-id=&quot;160576835&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#873&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
Performance improvements:
&lt;ul&gt;
 	&lt;li&gt;Turn &lt;code&gt;use_frozen_events&lt;&#x2F;code&gt; off by default (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;877&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;877&quot; data-id=&quot;160897209&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#877&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Disable responding with canonical json for federation (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;878&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;878&quot; data-id=&quot;160910639&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#878&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;changes-in-synapse-v0-16-1-rc1-2016-06-15&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#changes-in-synapse-v0-16-1-rc1-2016-06-15&quot; aria-label=&quot;Anchor link for: changes-in-synapse-v0-16-1-rc1-2016-06-15&quot;&gt;🔗&lt;&#x2F;a&gt;Changes in synapse v0.16.1-rc1 (2016-06-15)&lt;&#x2F;h3&gt;
&lt;p&gt;Features: None&lt;&#x2F;p&gt;
&lt;p&gt;Changes:&lt;&#x2F;p&gt;
&lt;ul&gt;
 	&lt;li&gt;Log requester for &lt;code&gt;&#x2F;publicRoom&lt;&#x2F;code&gt; endpoints when possible (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;856&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;856&quot; data-id=&quot;159162802&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#856&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;502 on &lt;code&gt;&#x2F;thumbnail&lt;&#x2F;code&gt; when can&#x27;t connect to remote server (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;862&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;862&quot; data-id=&quot;159375931&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#862&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Linearize fetching of gaps on incoming events (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;871&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;871&quot; data-id=&quot;160433511&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#871&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
Bugs fixes:
&lt;ul&gt;
 	&lt;li&gt;Fix bug where rooms where marked as published by default (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;857&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;857&quot; data-id=&quot;159171952&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#857&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Fix bug where joining room with an event with invalid sender (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;868&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;868&quot; data-id=&quot;160169477&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#868&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Fix bug where backfilled events were sent down sync streams (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;869&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;869&quot; data-id=&quot;160383501&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#869&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Fix bug where outgoing connections could wedge indefinitely, causing push notifications to be unreliable (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;870&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;870&quot; data-id=&quot;160388703&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#870&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
Performance improvements:
&lt;ul&gt;
 	&lt;li&gt;Improve &lt;code&gt;&#x2F;publicRooms&lt;&#x2F;code&gt; performance (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;859&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;859&quot; data-id=&quot;159188459&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#859&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;changes-in-synapse-v0-16-0-2016-06-09&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#changes-in-synapse-v0-16-0-2016-06-09&quot; aria-label=&quot;Anchor link for: changes-in-synapse-v0-16-0-2016-06-09&quot;&gt;🔗&lt;&#x2F;a&gt;Changes in synapse v0.16.0 (2016-06-09)&lt;&#x2F;h3&gt;
&lt;p&gt;NB: As of v0.14 all AS config files must have an ID field.&lt;&#x2F;p&gt;
&lt;p&gt;Bug fixes:&lt;&#x2F;p&gt;
&lt;ul&gt;
 	&lt;li&gt;Don&#x27;t make rooms published by default (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;857&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;857&quot; data-id=&quot;159171952&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#857&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;changes-in-synapse-v0-16-0-rc2-2016-06-08&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#changes-in-synapse-v0-16-0-rc2-2016-06-08&quot; aria-label=&quot;Anchor link for: changes-in-synapse-v0-16-0-rc2-2016-06-08&quot;&gt;🔗&lt;&#x2F;a&gt;Changes in synapse v0.16.0-rc2 (2016-06-08)&lt;&#x2F;h3&gt;
&lt;p&gt;Features:&lt;&#x2F;p&gt;
&lt;ul&gt;
 	&lt;li&gt;Add configuration option for tuning GC via &lt;code&gt;gc.set_threshold&lt;&#x2F;code&gt; (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;849&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;849&quot; data-id=&quot;158942313&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#849&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
Changes:
&lt;ul&gt;
 	&lt;li&gt;Record metrics about GC (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;771&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;771&quot; data-id=&quot;153734745&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#771&lt;&#x2F;a&gt;, &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;847&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;847&quot; data-id=&quot;158911645&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#847&lt;&#x2F;a&gt;, &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;852&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;852&quot; data-id=&quot;158961878&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#852&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Add metric counter for number of persisted events (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;841&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;841&quot; data-id=&quot;158673436&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#841&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
Bug fixes:
&lt;ul&gt;
 	&lt;li&gt;Fix &#x27;From&#x27; header in email notifications (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;843&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;843&quot; data-id=&quot;158692541&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#843&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Fix presence where timeouts were not being fired for the first 8h after restarts (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;842&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;842&quot; data-id=&quot;158689045&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#842&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Fix bug where synapse sent malformed transactions to AS&#x27;s when retrying transactions (Commits&lt;a class=&quot;commit-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;commit&#x2F;310197bab5cf8ed2c26fae522f15f092dbcdff58&quot;&gt;&lt;tt&gt;310197b&lt;&#x2F;tt&gt;&lt;&#x2F;a&gt;, &lt;a class=&quot;commit-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;commit&#x2F;84379062f9ec259abc302af321d4ed8f5a958c01&quot;&gt;&lt;tt&gt;8437906&lt;&#x2F;tt&gt;&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
Performance Improvements:
&lt;ul&gt;
 	&lt;li&gt;Remove event fetching from DB threads (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;835&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;835&quot; data-id=&quot;158404359&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#835&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Change the way we cache events (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;836&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;836&quot; data-id=&quot;158410030&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#836&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Add events to cache when we persist them (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;840&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;840&quot; data-id=&quot;158647785&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#840&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;changes-in-synapse-v0-16-0-rc1-2016-06-03&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#changes-in-synapse-v0-16-0-rc1-2016-06-03&quot; aria-label=&quot;Anchor link for: changes-in-synapse-v0-16-0-rc1-2016-06-03&quot;&gt;🔗&lt;&#x2F;a&gt;Changes in synapse v0.16.0-rc1 (2016-06-03)&lt;&#x2F;h3&gt;
&lt;p&gt;Version 0.15 was not released. See v0.15.0-rc1 below for additional changes.&lt;&#x2F;p&gt;
&lt;p&gt;Features:&lt;&#x2F;p&gt;
&lt;ul&gt;
 	&lt;li&gt;Add email notifications for missed messages (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;759&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;759&quot; data-id=&quot;151860508&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#759&lt;&#x2F;a&gt;, &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;786&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;786&quot; data-id=&quot;155084975&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#786&lt;&#x2F;a&gt;, &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;799&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;799&quot; data-id=&quot;156336186&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#799&lt;&#x2F;a&gt;, &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;810&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;810&quot; data-id=&quot;157876958&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#810&lt;&#x2F;a&gt;, &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;815&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;815&quot; data-id=&quot;158088266&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#815&lt;&#x2F;a&gt;, &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;821&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;821&quot; data-id=&quot;158184002&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#821&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Add a &lt;code&gt;url_preview_ip_range_whitelist&lt;&#x2F;code&gt; config param (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;760&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;760&quot; data-id=&quot;152195317&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#760&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Add &#x2F;report endpoint (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;762&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;762&quot; data-id=&quot;152983097&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#762&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Add basic ignore user API (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;763&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;763&quot; data-id=&quot;153078662&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#763&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Add an openidish mechanism for proving that you own a given user_id (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;765&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;765&quot; data-id=&quot;153225023&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#765&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Allow clients to specify a server_name to avoid &#x27;No known servers&#x27; (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;794&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;794&quot; data-id=&quot;155729287&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#794&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Add secondary_directory_servers option to fetch room list from other servers (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;808&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;808&quot; data-id=&quot;157727869&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#808&lt;&#x2F;a&gt;, &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;813&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;813&quot; data-id=&quot;157957443&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#813&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
Changes:
&lt;ul&gt;
 	&lt;li&gt;Report per request metrics for all of the things using request_handler (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;756&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;756&quot; data-id=&quot;151597373&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#756&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Correctly handle &lt;code&gt;NULL&lt;&#x2F;code&gt; password hashes from the database (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;775&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;775&quot; data-id=&quot;154218069&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#775&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Allow receipts for events we haven&#x27;t seen in the db (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;784&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;784&quot; data-id=&quot;154729615&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#784&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Make synctl read a cache factor from config file (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;785&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;785&quot; data-id=&quot;155061473&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#785&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Increment badge count per missed convo, not per msg (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;793&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;793&quot; data-id=&quot;155472279&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#793&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Special case m.room.third_party_invite event auth to match invites (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;814&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;814&quot; data-id=&quot;158008655&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#814&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
Bug fixes:
&lt;ul&gt;
 	&lt;li&gt;Fix typo in event_auth servlet path (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;757&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;757&quot; data-id=&quot;151841944&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#757&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Fix password reset (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;758&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;758&quot; data-id=&quot;151842844&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#758&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
Performance improvements:
&lt;ul&gt;
 	&lt;li&gt;Reduce database inserts when sending transactions (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;767&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;767&quot; data-id=&quot;153422719&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#767&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Queue events by room for persistence (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;768&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;768&quot; data-id=&quot;153453122&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#768&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Add cache to &lt;code&gt;get_user_by_id&lt;&#x2F;code&gt; (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;772&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;772&quot; data-id=&quot;153734759&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#772&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Add and use &lt;code&gt;get_domain_from_id&lt;&#x2F;code&gt; (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;773&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;773&quot; data-id=&quot;153737866&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#773&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Use tree cache for &lt;code&gt;get_linearized_receipts_for_room&lt;&#x2F;code&gt; (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;779&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;779&quot; data-id=&quot;154683780&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#779&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Remove unused indices (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;782&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;782&quot; data-id=&quot;154703597&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#782&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Add caches to &lt;code&gt;bulk_get_push_rules*&lt;&#x2F;code&gt; (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;804&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;804&quot; data-id=&quot;157677823&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#804&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Cache &lt;code&gt;get_event_reference_hashes&lt;&#x2F;code&gt; (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;806&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;806&quot; data-id=&quot;157702778&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#806&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Add &lt;code&gt;get_users_with_read_receipts_in_room&lt;&#x2F;code&gt; cache (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;809&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;809&quot; data-id=&quot;157867129&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#809&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Use state to calculate &lt;code&gt;get_users_in_room&lt;&#x2F;code&gt; (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;811&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;811&quot; data-id=&quot;157921429&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#811&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Load push rules in storage layer so that they get cached (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;825&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;825&quot; data-id=&quot;158334922&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#825&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Make &lt;code&gt;get_joined_hosts_for_room&lt;&#x2F;code&gt; use get_users_in_room (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;828&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;828&quot; data-id=&quot;158336691&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#828&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Poke notifier on next reactor tick (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;829&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;829&quot; data-id=&quot;158337243&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#829&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Change CacheMetrics to be quicker (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;830&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;830&quot; data-id=&quot;158337903&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#830&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;h3 id=&quot;changes-in-synapse-v0-15-0-rc1-2016-04-26&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#changes-in-synapse-v0-15-0-rc1-2016-04-26&quot; aria-label=&quot;Anchor link for: changes-in-synapse-v0-15-0-rc1-2016-04-26&quot;&gt;🔗&lt;&#x2F;a&gt;Changes in synapse v0.15.0-rc1 (2016-04-26)&lt;&#x2F;h3&gt;
&lt;p&gt;Features:&lt;&#x2F;p&gt;
&lt;ul&gt;
 	&lt;li&gt;Add login support for Javascript Web Tokens, thanks to Niklas Riekenbrauck (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;671&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;671&quot; data-id=&quot;144065761&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#671&lt;&#x2F;a&gt;,&lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;687&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;687&quot; data-id=&quot;145233458&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#687&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Add URL previewing support (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;688&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;688&quot; data-id=&quot;145553608&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#688&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Add login support for LDAP, thanks to Christoph Witzany (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;701&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;701&quot; data-id=&quot;146343240&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#701&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Add GET endpoint for pushers (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;716&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;716&quot; data-id=&quot;147499520&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#716&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
Changes:
&lt;ul&gt;
 	&lt;li&gt;Never notify for member events (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;667&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;667&quot; data-id=&quot;143242675&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#667&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Deduplicate identical &lt;code&gt;&#x2F;sync&lt;&#x2F;code&gt; requests (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;668&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;668&quot; data-id=&quot;143315296&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#668&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Require user to have left room to forget room (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;673&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;673&quot; data-id=&quot;144534572&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#673&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Use DNS cache if within TTL (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;677&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;677&quot; data-id=&quot;144834970&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#677&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Let users see their own leave events (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;699&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;699&quot; data-id=&quot;146331932&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#699&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Deduplicate membership changes (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;700&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;700&quot; data-id=&quot;146337782&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#700&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Increase performance of pusher code (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;705&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;705&quot; data-id=&quot;146665406&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#705&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Respond with error status 504 if failed to talk to remote server (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;731&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;731&quot; data-id=&quot;148606730&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#731&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Increase search performance on postgres (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;745&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;745&quot; data-id=&quot;150119333&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#745&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
Bug fixes:
&lt;ul&gt;
 	&lt;li&gt;Fix bug where disabling all notifications still resulted in push (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;678&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;678&quot; data-id=&quot;144837338&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#678&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Fix bug where users couldn&#x27;t reject remote invites if remote refused (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;691&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;691&quot; data-id=&quot;145946732&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#691&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Fix bug where synapse attempted to backfill from itself (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;693&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;693&quot; data-id=&quot;145966417&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#693&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Fix bug where profile information was not correctly added when joining remote rooms (PR &lt;a class=&quot;issue-link js-issue-link&quot; title=&quot;Set profile information when joining rooms remotely&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;703&quot; data-id=&quot;146548756&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#703&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
 	&lt;li&gt;Fix bug where register API required incorrect key name for AS registration (PR &lt;a class=&quot;issue-link js-issue-link&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;pull&#x2F;727&quot; data-url=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;issues&#x2F;727&quot; data-id=&quot;148368853&quot; data-error-text=&quot;Failed to load issue title&quot; data-permission-text=&quot;Issue title is private&quot;&gt;#727&lt;&#x2F;a&gt;)&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
</entry>

    
<entry xml:lang="en">
    <title>The Matrix Spring Special!</title>
    <published>2016-03-26T00:00:00+00:00</published>
    <updated>2016-03-26T00:00:00+00:00</updated>
    <author>
      <name>Matthew Hodgson</name>
    </author>
    <link rel="alternate" href="https://c956b204.matrix-website.pages.dev/blog/2016/03/26/the-matrix-spring-special/" type="text/html"/>
    <id>https://c956b204.matrix-website.pages.dev/blog/2016/03/26/the-matrix-spring-special/</id>
    <content type="html">&lt;p&gt;It&#x27;s been 3 months since the &lt;a href=&quot;&#x2F;blog&#x2F;2015&#x2F;12&#x2F;25&#x2F;the-matrix-holiday-special&#x2F;&quot;&gt;Matrix Holiday Special&lt;&#x2F;a&gt; and once again we&#x27;ve all been too busy writing code to put anything that detailed on the blog.  So without further a do here&#x27;s a quick overview of how things have progressed so far in 2016!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;home-servers&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#home-servers&quot; aria-label=&quot;Anchor link for: home-servers&quot;&gt;🔗&lt;&#x2F;a&gt;Home servers&lt;&#x2F;h2&gt;
&lt;h3 id=&quot;synapse&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#synapse&quot; aria-label=&quot;Anchor link for: synapse&quot;&gt;🔗&lt;&#x2F;a&gt;Synapse&lt;&#x2F;h3&gt;
&lt;p&gt;Work on &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&quot;&gt;Synapse&lt;&#x2F;a&gt; (our reference homeserver) has been primarily focused on improving performance.  This may sound boring, but there&#x27;s been a huge amount of improvement here since synapse 0.12 was released on Jan 4. Synapse 0.13 on Feb 10 brought huge CPU savings thanks to a whole fleet of caching and other optimisation work - the best way of seeing the difference here is to look at the load graph of the server that hosts matrix.org&#x27;s synapse+postgres over the last few months:&lt;&#x2F;p&gt;
&lt;img src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2016&#x2F;03&#x2F;matrix-org-load.png&quot; alt=&quot;matrix-org-load&quot; width=&quot;497&quot; height=&quot;173&quot; class=&quot;aligncenter size-full wp-image-1563&quot; &#x2F;&gt;
&lt;p&gt;Ignoring the unrelated blip during March, you can see an enormous step change in system load (which had a matching decrease in actual CPU usage) at the beginning of Feb when the 0.13 optimisations landed on matrix.org :)&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;
&lt;p&gt;Meanwhile, Synapse 0.14 is due any day now with &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;releases&#x2F;tag&#x2F;v0.14.0-rc2&quot;&gt;0.14.0-rc2&lt;&#x2F;a&gt; released on Wednesday.  Here, the focus has been all about memory optimisation - anyone who&#x27;s run a Synapse seriously will be aware that it can be a memory hog thanks to aggressively caching as much state and history in RAM as possible to avoid hitting the database and keeping everything responsive.  0.14 should improve memory usage just as dramatically as 0.13 improved CPU utilisation - introducing a quick-and-dirty SYNAPSE_CACHE_FACTOR environment variable that lets admins dial down the aggressiveness of the caching (at the expense of performance), but more interestingly implementing string interning and ensuring that events are cached by ID rather than duplicated across multiple caches in order to make memory usage more efficient.  It&#x27;s too early to have impressive looking graphs, and there are still a few memory spikes being tracked down before we release 0.14, but we&#x27;re hoping for at least a 50% reduction in memory footprint.&lt;&#x2F;p&gt;
&lt;p&gt;Featurewise the highlights include: server-generated unread notification &amp;amp; highlight counts and push badge support, lots of support and refinements for guest access and 3rd party ID invites.  Meanwhile we&#x27;ve finally fixed some of the most embarrassing long-standing missing features such as letting folks logout serverside(!), delete aliases and determine whether rooms should be published in the room directory or not.&lt;&#x2F;p&gt;
&lt;p&gt;Finally, Synapse is now part of &lt;a href=&quot;http:&#x2F;&#x2F;www.freshports.org&#x2F;net&#x2F;py-matrix-synapse&#x2F;&quot;&gt;FreeBSD Ports&lt;&#x2F;a&gt; thanks to Brendan Molloy, and &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;NixOS&#x2F;nixpkgs&#x2F;blob&#x2F;master&#x2F;nixos&#x2F;modules&#x2F;services&#x2F;misc&#x2F;matrix-synapse.nix&quot;&gt;NixOS&lt;&#x2F;a&gt; thanks to Robin Lambertz!  Huge thanks to them for contributing the packages to the respective OSes and to all the other synapse package maintainers out there!&lt;&#x2F;p&gt;
&lt;p&gt;It&#x27;s incredibly exciting to see Synapse&#x27;s maturity improving and hitting the optimisation stage of its life; huge kudos to Erik for spearheading the optimisation work.  We strongly recommend folks upgrade to 0.14 when it&#x27;s available; it&#x27;s never been a better time to run a homeserver! :D&lt;&#x2F;p&gt;
&lt;h3 id=&quot;dendron&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#dendron&quot; aria-label=&quot;Anchor link for: dendron&quot;&gt;🔗&lt;&#x2F;a&gt;Dendron&lt;&#x2F;h3&gt;
&lt;p&gt;Meanwhile, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;dendron&quot;&gt;Dendron&lt;&#x2F;a&gt; (our next generation homeserver) development has been progressing interestingly: we finished an initial spike to get a Golang skeleton server in place, albeit one that delegates most of the endpoints through to Synapse.  In fact, matrix.org itself has been running via Dendron since February!&lt;&#x2F;p&gt;
&lt;p&gt;The whole point of Dendron is to provide an architecture where we can split apart the various endpoints that Synapse provides today, re-implementing them where appropriate in Golang, and critically letting the endpoints scale horizontally with clusters of backend servers abstracted by the single Dendron API facade.  As a result, most of the Dendron work has actually ended up going into restructuring Synapse such that multiple Synapses can be run in a cluster behind a single Dendron, allowing us to horizontally scale API endpoints at last.  This takes the form of adding &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;synapse&#x2F;commit&#x2F;1acc319070c0390d2330003bdc1e71cc66383dbb&quot;&gt;cluster replication support&lt;&#x2F;a&gt; to Synapse.  This is still work-in-progress as we go through fixing up more and more state to be replicable (replicatable?) between synapses - hopefully it should land in the Synapse 0.15 timeframe.  And then we enter a very very interesting new world of horizontally scalable homeservers...&lt;&#x2F;p&gt;
&lt;h3 id=&quot;ruma&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#ruma&quot; aria-label=&quot;Anchor link for: ruma&quot;&gt;🔗&lt;&#x2F;a&gt;Ruma&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;ruma.dev&#x2F;&quot;&gt;Ruma&lt;&#x2F;a&gt; has also seen some progress over the last few months - Ruma is an independent Rust language homeserver project led by Jimmy Cuadra, and whilst in early development still (currently focusing on the user login and registration system) shows a lot of promise.  Lots of work has ended up going into the required Rust dependencies rather than the Matrix code itself, but if you&#x27;re interested in Rust then please drop by &lt;a href=&quot;https:&#x2F;&#x2F;vector.im&#x2F;beta&#x2F;#&#x2F;room&#x2F;#ruma:matrix.org&quot;&gt;#ruma:matrix.org&lt;&#x2F;a&gt; or #ruma on Freenode and say hi!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;clients&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#clients&quot; aria-label=&quot;Anchor link for: clients&quot;&gt;🔗&lt;&#x2F;a&gt;Clients&lt;&#x2F;h2&gt;
&lt;p&gt;Whilst homeserver development is mainly all about performance and scaling work currently, the client side of the Matrix ecosystem is the polar opposite - with lots of rapid progress on exciting new clients happening from all over the community.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;perpetually-talking-online-pto&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#perpetually-talking-online-pto&quot; aria-label=&quot;Anchor link for: perpetually-talking-online-pto&quot;&gt;🔗&lt;&#x2F;a&gt;Perpetually Talking Online (PTO)&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a href=&quot;http:&#x2F;&#x2F;pto.im&#x2F;&quot;&gt;PTO&lt;&#x2F;a&gt; has evolved enormously since Torrie Fischer first revealed it at the end of 2015.  PTO is an independent project that acts as a Matrix client that exposes an IRC server interface - effectively turning any Matrix homeserver into an ircd; letting folks hook their favourite IRC clients directly into Matrix and use it as an enormous decentralised IRC network.  (N.B. this is not to be confused with &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-appservice-irc&quot;&gt;matrix-appservice-irc&lt;&#x2F;a&gt;, which acts as a server-side bridge between Matrix rooms and IRC channels.)  Obviously you lose some of the Matrix specific features (read receipts, typing notifs, VoIP, etc) but there&#x27;s clearly a huge benefit for the IRC community to be able to use Matrix as if it were an IRC network.&lt;&#x2F;p&gt;
&lt;p&gt;There have been three releases so far, with the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;tdfischer&#x2F;pto&#x2F;releases&quot;&gt;v0.3.0 (&quot;Carburetor&quot;) release&lt;&#x2F;a&gt; in March being tantalisingly close to being usable for everyday purposes.  We actually have pto.matrix.org all set up and ready to go as an IRC frontend for the matrix.org homeserver and once &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;tdfischer&#x2F;pto&#x2F;issues&#x2F;60&quot;&gt;issue #60&lt;&#x2F;a&gt; is resolved we&#x27;ll be turning it on :)&lt;&#x2F;p&gt;
&lt;p&gt;There&#x27;s one catch though - XChat was never quite built to handle the hundreds of rooms that we&#x27;ve got used to Matrix supporting... :D&lt;&#x2F;p&gt;
&lt;img src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2016&#x2F;03&#x2F;Screen-Shot-2016-03-26-at-00.17.08-988x1024.png&quot; alt=&quot;Screen Shot 2016-03-26 at 00.17.08&quot; width=&quot;988&quot; height=&quot;1024&quot; class=&quot;aligncenter size-large wp-image-1565&quot; &#x2F;&gt;
&lt;p&gt;Come hang out in &lt;a href=&quot;https:&#x2F;&#x2F;vector.im&#x2F;beta&#x2F;#&#x2F;room&#x2F;#pto:oob.systems&quot;&gt;#pto:oob.systems&lt;&#x2F;a&gt; if you&#x27;re interested in PTO!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;quaternion&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#quaternion&quot; aria-label=&quot;Anchor link for: quaternion&quot;&gt;🔗&lt;&#x2F;a&gt;Quaternion&lt;&#x2F;h3&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Fxrh&#x2F;Quaternion&quot;&gt;Quaternion&lt;&#x2F;a&gt; is a new Qt&#x2F;QML&#x2F;C++ desktop client created by Felix Rohrbach.  It&#x27;s a fairly early alpha but still quite usable and in very active development. &lt;a href=&quot;https:&#x2F;&#x2F;vector.im&#x2F;beta&#x2F;#&#x2F;room&#x2F;#quaternion:matrix.org&quot;&gt;#quaternion:matrix.org&lt;&#x2F;a&gt; is the place to talk all things Quaternion :)&lt;&#x2F;p&gt;
&lt;img src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2016&#x2F;03&#x2F;quaternion-1024x702.png&quot; alt=&quot;quaternion&quot; width=&quot;1024&quot; height=&quot;702&quot; class=&quot;aligncenter size-large wp-image-1566&quot; &#x2F;&gt;
&lt;h3 id=&quot;matrix-glib-sdk&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#matrix-glib-sdk&quot; aria-label=&quot;Anchor link for: matrix-glib-sdk&quot;&gt;🔗&lt;&#x2F;a&gt;matrix-glib-sdk&lt;&#x2F;h3&gt;
&lt;p&gt;Meanwhile, over on the GTK side of the world, Gergely Polonkai has been been making great progress on his &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;gergelypolonkai&#x2F;matrix-glib-sdk&quot;&gt;matrix-glib-sdk&lt;&#x2F;a&gt; Glib client SDK for Matrix.  The end goal here is to implement a full &lt;a href=&quot;https:&#x2F;&#x2F;telepathy.freedesktop.org&quot;&gt;Telepathy&lt;&#x2F;a&gt; plugin for Matrix on top of the SDK.  Originally written in C, but now shifted to Vala, the SDK is in very active development and now implements all(?) of the Matrix client-server API - a snapshot of the work-in-progress SDK API docs can be found at &lt;a href=&quot;http:&#x2F;&#x2F;gergely.polonkai.eu&#x2F;matrix-glib-sdk&#x2F;&quot;&gt;http:&#x2F;&#x2F;gergely.polonkai.eu&#x2F;matrix-glib-sdk&lt;&#x2F;a&gt;.  Next up is a formal release and building out clients on top!&lt;&#x2F;p&gt;
&lt;h3 id=&quot;matrix-react-sdk-matrix-ios-sdk-matrix-android-sdk-and-vector&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#matrix-react-sdk-matrix-ios-sdk-matrix-android-sdk-and-vector&quot; aria-label=&quot;Anchor link for: matrix-react-sdk-matrix-ios-sdk-matrix-android-sdk-and-vector&quot;&gt;🔗&lt;&#x2F;a&gt;matrix-react-sdk, matrix-ios-sdk, matrix-android-sdk and Vector&lt;&#x2F;h3&gt;
&lt;p&gt;Finally, huge amounts of time and effort have continued to be pumped into the official &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-react-sdk&quot;&gt;matrix-react-sdk&lt;&#x2F;a&gt;, &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-ios-sdk&quot;&gt;matrix-ios-sdk&lt;&#x2F;a&gt; and &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-android-sdk&quot;&gt;matrix-android-sdk&lt;&#x2F;a&gt; - driven substantially by requirements for &lt;a href=&quot;http:&#x2F;&#x2F;vector.im&quot;&gt;Vector&lt;&#x2F;a&gt;, the &lt;a href=&quot;http:&#x2F;&#x2F;github.com&#x2F;vector-im&quot;&gt;FOSS&lt;&#x2F;a&gt; Matrix-powered collaboration app that we&#x27;ve been helping with:&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;img src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2016&#x2F;03&#x2F;Screen-Shot-2016-03-21-at-14.39.16-1024x753.png&quot; alt=&quot;Screen Shot 2016-03-21 at 14.39.16&quot; width=&quot;1024&quot; height=&quot;753&quot; class=&quot;aligncenter size-large wp-image-1567&quot; &#x2F;&gt;
&lt;p style=&quot;text-align: center&quot;&gt;
&lt;img src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2016&#x2F;03&#x2F;android-vector.png&quot; alt=&quot;android-vector&quot; width=&quot;330&quot; height=&quot;640&quot; class=&quot;size-full wp-image-1568&quot; &#x2F;&gt;&lt;img src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2016&#x2F;03&#x2F;Screen-Shot-2016-03-26-at-00.58.48-505x1024.png&quot; alt=&quot;Screen Shot 2016-03-26 at 00.58.48&quot; width=&quot;316&quot; height=&quot;640&quot; class=&quot;size-large wp-image-1569&quot; &#x2F;&gt;
&lt;&#x2F;p&gt;
&lt;br&#x2F;&gt;
&lt;p&gt;The best way of seeing what&#x27;s been going on here is probably by considering Vector itself, which is currently in formal beta (0.4.1 for web, 0.1.2 for iOS and #116 on Android).  The big news includes:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Beta iOS and Android apps.  These are early beta but feedback is very much appreciated - the Android beta can be downloaded from &lt;a href=&quot;http:&#x2F;&#x2F;matrix.org&#x2F;jenkins&#x2F;job&#x2F;VectorAndroidDevelop&#x2F;&quot;&gt;Jenkins&lt;&#x2F;a&gt;; if you want to help beta iOS via TestFlight, come ask on &lt;a href=&quot;https:&#x2F;&#x2F;vector.im&#x2F;beta&#x2F;#&#x2F;room&#x2F;#ios:matrix.org&quot;&gt;#ios:matrix.org&lt;&#x2F;a&gt;.&lt;&#x2F;li&gt;
&lt;li&gt;Guest access.  Anyone can jump straight into Matrix by going to http:&#x2F;&#x2F;vector.im without even having to sign up for an account.  Guests are quite restricted on what they can do (and can only join rooms which explicitly have guest access enabled), but this is a *huge* improvement in getting folks using Matrix.&lt;&#x2F;li&gt;
&lt;li&gt;Ability to jump to any message ever - e.g. when clicking through search results or when permalinking a message... using precisely the same UI that you use when chatting.  Permalinks are awesome.  If you want to &lt;a href=&quot;https:&#x2F;&#x2F;vector.im&#x2F;develop&#x2F;#&#x2F;room&#x2F;#matrix:matrix.org&#x2F;$1416420724004tADpi:matrix.org&quot;&gt;randomly jump back in time&lt;&#x2F;a&gt; to the first weeks of #matrix:matrix.org, now you can...&lt;&#x2F;li&gt;
&lt;li&gt;Read Markers, scrolling that remembers the scroll offset per-room, and the ability to jump to unread messages&lt;&#x2F;li&gt;
&lt;li&gt;Synchronised missed notification and missed highlighted notification information per-room&lt;&#x2F;li&gt;
&lt;li&gt;Badge counts for unread notifications&lt;&#x2F;li&gt;
&lt;li&gt;Entirely reworked Room Settings&lt;&#x2F;li&gt;
&lt;li&gt;Entirely reworked User Settings, including push notification configuration&lt;&#x2F;li&gt;
&lt;li&gt;Entirely reworked Room Directory&lt;&#x2F;li&gt;
&lt;li&gt;Lots of performance improvements&lt;&#x2F;li&gt;
&lt;li&gt;Much improved inviting by email&lt;&#x2F;li&gt;
&lt;li&gt;Much improved reliability on video conferencing&lt;&#x2F;li&gt;
&lt;li&gt;Closing literally &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vector-im&#x2F;vector-web&#x2F;issues?q=is%3Aissue+is%3Aclosed&quot;&gt;hundreds and hundreds of bugs&lt;&#x2F;a&gt;...&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;All that remains right now is yet more bugfixing and incorporating feedback from the current betas!  Please give as much feedback as possible in &lt;a href=&quot;https:&#x2F;&#x2F;vector.im&#x2F;beta&#x2F;#&#x2F;room&#x2F;#vector:matrix.org&quot;&gt;#vector:matrix.org&lt;&#x2F;a&gt; :)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;bridges-bots&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#bridges-bots&quot; aria-label=&quot;Anchor link for: bridges-bots&quot;&gt;🔗&lt;&#x2F;a&gt;Bridges &amp;amp; Bots&lt;&#x2F;h2&gt;
&lt;p&gt;Bridges, bots, and other integrations and application services have inevitably taken slightly lower priority whilst we&#x27;ve been focusing on the core server and client bits of the ecosystem.  However, as of March we&#x27;ve started a major new project to get these moving again, starting with a big update to the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-appservice-irc&quot;&gt;IRC Bridge&lt;&#x2F;a&gt;.  This is due to be released next week, but you can get a sneak peek at what&#x27;s going into the release at the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-appservice-irc&#x2F;commits&#x2F;develop&quot;&gt;commit log&lt;&#x2F;a&gt;.  Highlights include the ability to persist nicks; connect via IPv6; improve formatted message handling; actually feed error messages from IRC back to Matrix; and much much more.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-appservice-verto&quot;&gt;matrix-appservice-verto&lt;&#x2F;a&gt; also got some love, which means that multiway video conferencing powered by FreeSWITCH now works reliably.  The quality still could be improved, but the unreliable call setup that plagued earlier versions is now fixed.&lt;&#x2F;p&gt;
&lt;p&gt;In the next few months we&#x27;re expecting to see a lot more activity on bridges &amp;amp; bots... watch this space :)&lt;&#x2F;p&gt;
&lt;p&gt;&lt;b&gt;Update Sat March 26:&lt;&#x2F;b&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Totally forgot to mention a few of the key new bridges which have been contributed by the community this year - particularly interesting are the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;RocketChat&#x2F;Rocket.Chat.Federation&quot;&gt;Rocket.Chat&amp;lt;-&amp;gt;Matrix bridge&lt;&#x2F;a&gt; written by Sing-Li over at Rocket.Chat which provides basic bridging between the awesome &lt;a href=&quot;http:&#x2F;&#x2F;rocket.chat&quot;&gt;Rocket.Chat&lt;&#x2F;a&gt; collaboration app and the wider Matrix ecosystem.  It&#x27;s early days, but this is incredibly promising for &#x27;hardcoded&#x27; bridging between specific rooms - it just needs Rocket.Chat to support &#x27;virtual&#x27; users and will then be seamless federation.&lt;&#x2F;p&gt;
&lt;p&gt;Similarly, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-appservice-gitter&quot;&gt;matrix-appservice-gitter&lt;&#x2F;a&gt; is a Gitter&amp;lt;-&amp;gt;Matrix bridge built by Leonerd on top of the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-appservice-bridge&quot;&gt;matrix-appservice-bridge&lt;&#x2F;a&gt; Node library.  Again, it&#x27;s early days but is working well for &#x27;hardcoded&#x27; bridging - supporting dynamic rooms and users is next on the todo list :)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;the-spec&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#the-spec&quot; aria-label=&quot;Anchor link for: the-spec&quot;&gt;🔗&lt;&#x2F;a&gt;The Spec&lt;&#x2F;h2&gt;
&lt;p&gt;We started our formal release process for the spec just before Christmas with r0.0.0 - and released &lt;a href=&quot;http:&#x2F;&#x2F;matrix.org&#x2F;docs&#x2F;spec&#x2F;r0.0.1&quot;&gt;r0.0.1&lt;&#x2F;a&gt; in January with &lt;a href=&quot;http:&#x2F;&#x2F;matrix.org&#x2F;docs&#x2F;spec&#x2F;r0.0.1&#x2F;client_server.html#changelog&quot;&gt;minor clarifications and updates&lt;&#x2F;a&gt;.  In practice the spec feels quite stable right now, although things have moved on a bit since January and r0.0.2 is definitely overdue at this point.&lt;&#x2F;p&gt;
&lt;p&gt;In the meantime, you can always get the very latest bleeding edge copy of the spec via &lt;a href=&quot;http:&#x2F;&#x2F;matrix.org&#x2F;speculator&quot;&gt;the speculator&lt;&#x2F;a&gt;.  We&#x27;ve also added an initial cut at a spec for the &lt;a href=&quot;http:&#x2F;&#x2F;matrix.org&#x2F;speculator&#x2F;spec&#x2F;HEAD&#x2F;identity_service.html&quot;&gt;Identity Service&lt;&#x2F;a&gt; at last.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;events&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#events&quot; aria-label=&quot;Anchor link for: events&quot;&gt;🔗&lt;&#x2F;a&gt;Events&lt;&#x2F;h2&gt;
&lt;p&gt;We&#x27;ve been focusing on writing code than evangelising Matrix recently, although we did get out to &lt;a href=&quot;&#x2F;blog&#x2F;2016&#x2F;02&#x2F;03&#x2F;fosdem-16-retrospective&#x2F;&quot;&gt;FOSDEM 2016&lt;&#x2F;a&gt; and &lt;a href=&quot;&#x2F;blog&#x2F;2016&#x2F;02&#x2F;09&#x2F;matrix-in-japan&#x2F;&quot;&gt;TADHack Mini Japan and WebRTC Conference&lt;&#x2F;a&gt; and &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;matrixdotorg&#x2F;status&#x2F;706916982960967680&quot;&gt;Enterprise Connect 2016&lt;&#x2F;a&gt; where we showed off Matrix &amp;amp; Vector in the WebRTC Real World Innovation showcase.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;gsoc&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#gsoc&quot; aria-label=&quot;Anchor link for: gsoc&quot;&gt;🔗&lt;&#x2F;a&gt;GSoC&lt;&#x2F;h2&gt;
&lt;p&gt;We are incredibly grateful to have been accepted as an organisation into Google Summer of Code 2016!  The last two weeks have been the window for students to propose projects to us that they could work on over the course of the summer, and it&#x27;s been fascinating to meet the GSoCers and see a whole new community pop up on Matrix and advise and mentor applicants through their proposals.  At the last count we&#x27;ve received 35 proposals, many inspired by &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;GSoC&#x2F;blob&#x2F;master&#x2F;IDEAS.md&quot;&gt;our list of ideas&lt;&#x2F;a&gt;, including some really impressive candidates - many thanks to all the students who have applied to us.  We don&#x27;t know yet how many slots Google will allocate to us, but one way or another we&#x27;re really looking forward to helping the GSoCers make the most out of their summer of Matrix!  All GSoC discussion is happening in &lt;a href=&quot;https:&#x2F;&#x2F;vector.im&#x2F;beta&#x2F;#&#x2F;room&#x2F;#gsoc:matrix.org&quot;&gt;#gsoc:matrix.org&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;what-s-next&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#what-s-next&quot; aria-label=&quot;Anchor link for: what-s-next&quot;&gt;🔗&lt;&#x2F;a&gt;What&#x27;s next?&lt;&#x2F;h2&gt;
&lt;p&gt;In no particular order, the urgent stuff that still remains includes:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Continuing to polish synapse and build out dendron-based clustering&lt;&#x2F;li&gt;
&lt;li&gt;Building as many bridges, bots and other integrations as possible&lt;&#x2F;li&gt;
&lt;li&gt;The matrix.to URL-handler service: having client-agnostic https:&#x2F;&#x2F;matrix.to&#x2F;#matrix:matrix.org URLs to help with sharing matrix room aliases etc&lt;&#x2F;li&gt;
&lt;li&gt;End-to-end crypto.  No progress since December; we need to get back to it asap.&lt;&#x2F;li&gt;
&lt;li&gt;Exiting Vector from beta&lt;&#x2F;li&gt;
&lt;li&gt;Finishing the server-to-server API specification&lt;&#x2F;li&gt;
&lt;li&gt;Improving the security model for access_tokens&lt;&#x2F;li&gt;
&lt;li&gt;Editable messages&lt;&#x2F;li&gt;
&lt;li&gt;Pinned, tagged, and &#x27;liked&#x27; messages&lt;&#x2F;li&gt;
&lt;li&gt;Threading&lt;&#x2F;li&gt;
&lt;li&gt;Decentralised accounts&lt;&#x2F;li&gt;
&lt;li&gt;Decentralised reputation&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;In practice, Bridging and E2E crypto is likely to get the most attention first (beyond the standard ongoing polishing).  There&#x27;s obviously a significant amount of work there, but we expect to see benefits pretty quickly throughout Matrix - especially from bridging.  Hopefully it&#x27;s true to say that the next few months should be quite transformational :D&lt;&#x2F;p&gt;
&lt;p&gt;Anyway, thanks for reading this sprawling update and for supporting Matrix.  And please come say hi in &lt;a href=&quot;https:&#x2F;&#x2F;vector.im&#x2F;beta&#x2F;#&#x2F;room&#x2F;#matrix:matrix.org&quot;&gt;#matrix:matrix.org&lt;&#x2F;a&gt; if you have any questions :)&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Matthew, Amandine &amp;amp; the Matrix.org team.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
</entry>

    
<entry xml:lang="en">
    <title>The Matrix Holiday Special!</title>
    <published>2015-12-25T00:00:00+00:00</published>
    <updated>2015-12-25T00:00:00+00:00</updated>
    <author>
      <name>Matthew Hodgson</name>
    </author>
    <link rel="alternate" href="https://c956b204.matrix-website.pages.dev/blog/2015/12/25/the-matrix-holiday-special/" type="text/html"/>
    <id>https://c956b204.matrix-website.pages.dev/blog/2015/12/25/the-matrix-holiday-special/</id>
    <content type="html">&lt;p&gt;Hi all,&lt;&#x2F;p&gt;
&lt;p&gt;We&#x27;ve been pretty bad at updating the blog over the last few months with all the progress that&#x27;s been happening with Matrix. Whilst Matrix rooms like #matrix:matrix.org and #matrix-dev:matrix.org have been very active (and our &lt;a href=&quot;https:&#x2F;&#x2F;twitter.com&#x2F;matrixdotorg&quot;&gt;twitter account&lt;&#x2F;a&gt; too), in general we&#x27;ve ended up spending way too much time actually writing software and not enough time talking about it, at least here. When a blog goes quiet it normally means that either the authors have got bored, or they&#x27;re too busy building cool stuff to keep it updated. I&#x27;m happy to say that option 2 is the case here!&lt;&#x2F;p&gt;
&lt;p&gt;As a result, there&#x27;s a huge backlog of really cool stuff we should have talked about. Hopes of writing an Advent Calendar series of blog posts also went out the window as we set Christmas as an arbitrary deadline for loads of work on Synapse, the Matrix Spec and matrix-react-sdk.&lt;&#x2F;p&gt;
&lt;p&gt;So, to try to break the impasse, here&#x27;s a slightly unorthodox whistle-stop tour of all the amazing blogposts we &lt;em&gt;would&lt;&#x2F;em&gt; have written if we&#x27;d had time. And perhaps some of them will actually expand into full write-ups when we have more time to spare in the future :)&lt;&#x2F;p&gt;
&lt;span id=&quot;continue-reading&quot;&gt;&lt;&#x2F;span&gt;&lt;h2 id=&quot;end-to-end-encryption-update&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#end-to-end-encryption-update&quot; aria-label=&quot;Anchor link for: end-to-end-encryption-update&quot;&gt;🔗&lt;&#x2F;a&gt;End to End Encryption Update&lt;&#x2F;h2&gt;
&lt;p&gt;One of the great promises of Matrix is to provide End-to-end encryption as part of the baseline standard (configurable per-room). In practice, our progress has been a little non-linear - we started writing an &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;trevp&#x2F;axolotl&#x2F;wiki&quot;&gt;Axolotl&lt;&#x2F;a&gt; ratchet implementation in C++14 (with a pure C API) named &lt;a href=&quot;&#x2F;git&#x2F;olm&quot;&gt;Olm&lt;&#x2F;a&gt; back in February, and then finished it off and wired a basic 1:1 proof-of-concept implementation into matrix-react-sdk in June. We then announced Olm back at the wonderful &lt;a href=&quot;https:&#x2F;&#x2F;jardin-entropique.eu.org&#x2F;&quot;&gt;Jardin Entropique&lt;&#x2F;a&gt; conference in Rennes:&lt;&#x2F;p&gt;
&lt;img class=&quot;aligncenter size-large wp-image-1426&quot; src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2015&#x2F;12&#x2F;je-1024x768.jpg&quot; alt=&quot;Jardin Entropique&quot; width=&quot;1024&quot; height=&quot;768&quot; &#x2F;&gt;
&lt;p&gt;You can read the full presentation that we gave at &lt;a href=&quot;&#x2F;~matthew&#x2F;2015-06-26 Matrix Jardin Entropique.pdf&quot;&gt;https:&#x2F;&#x2F;matrix.org&#x2F;~matthew&#x2F;2015-06-26 Matrix Jardin Entropique.pdf&lt;&#x2F;a&gt; - and you can even play with a very basic test jig at &lt;a href=&quot;&#x2F;~markjh&#x2F;olm&#x2F;javascript&#x2F;demo.html&quot;&gt;https:&#x2F;&#x2F;matrix.org&#x2F;~markjh&#x2F;olm&#x2F;javascript&#x2F;demo.html&lt;&#x2F;a&gt; which uses an emscripten compiled version of Olm in the browser to put the ratchet through its paces.&lt;&#x2F;p&gt;
&lt;p&gt;Things then stalled for a bit, but as of this month they&#x27;re moving again, and if you&#x27;re interested in the progress you can read all about it at:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;&#x2F;jira&#x2F;browse&#x2F;SPEC-162&quot;&gt;https:&#x2F;&#x2F;matrix.org&#x2F;jira&#x2F;browse&#x2F;SPEC-162&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;and a full draft spec at &lt;a href=&quot;http:&#x2F;&#x2F;matrix.org&#x2F;speculator&#x2F;spec&#x2F;drafts%2Fe2e&#x2F;client_server.html#end-to-end-encryption&quot;&gt;http:&#x2F;&#x2F;matrix.org&#x2F;speculator&#x2F;spec&#x2F;drafts%2Fe2e&#x2F;client_server.html#end-to-end-encryption&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;the Olm git repo at &lt;a href=&quot;http:&#x2F;&#x2F;matrix.org&#x2F;git&#x2F;olm&#x2F;about&#x2F;&quot;&gt;http:&#x2F;&#x2F;matrix.org&#x2F;git&#x2F;olm&#x2F;about&#x2F;&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;li&gt;and the formal Olm spec at &lt;a href=&quot;&#x2F;docs&#x2F;spec&#x2F;olm.html&quot;&gt;https:&#x2F;&#x2F;matrix.org&#x2F;docs&#x2F;spec&#x2F;olm.html&lt;&#x2F;a&gt;&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;The main stuff remaining is basically key management (in Synapse and the matrix spec), group conversation ratchets, and UX for wiring it properly into various Matrix clients.  We expect to make progress on this over the next few months :)&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile, huge kudos to Tor who was crazy enough to &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;torhve&#x2F;weechat-matrix-protocol-script#encryption&quot;&gt;add the basic 1:1 Olm ratchet&lt;&#x2F;a&gt; to Weechat before we&#x27;d even finished writing our test jig!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;lean-dus&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#lean-dus&quot; aria-label=&quot;Anchor link for: lean-dus&quot;&gt;🔗&lt;&#x2F;a&gt;Lean DUS&lt;&#x2F;h2&gt;
&lt;p&gt;A few days after Jardin Entropique we made it to &lt;a href=&quot;https:&#x2F;&#x2F;www.leandus.de&#x2F;&quot;&gt;Lean DUS&lt;&#x2F;a&gt; - a great tech meetup in Düsseldorf organised by &lt;a href=&quot;http:&#x2F;&#x2F;sipgate.de&quot;&gt;Sipgate&lt;&#x2F;a&gt;, who were kind enough to invite us to speak.  This was a chance to give a full update on Matrix (as of July!) and talk some more about Olm and plans for end-to-end encryption.  This one got recorded - and you can see it below.  There&#x27;s also an official page with full videos, slide deck and photos up at &lt;a href=&quot;https:&#x2F;&#x2F;hello.sipgate.de&#x2F;veranstaltung&#x2F;lean-dus-9-java-matrix&quot;&gt;https:&#x2F;&#x2F;hello.sipgate.de&#x2F;veranstaltung&#x2F;lean-dus-9-java-matrix&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;noscript&gt;
  Today&#x27;s Matrix Live:
  &lt;a href=&quot;https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=VVM3pcrkn5s&quot;&gt;
    https:&#x2F;&#x2F;youtube.com&#x2F;watch?v=VVM3pcrkn5s
  &lt;&#x2F;a&gt;
&lt;&#x2F;noscript&gt;
&lt;youtube-player video-id=&quot;VVM3pcrkn5s&quot;&gt;&lt;&#x2F;youtube-player&gt;
&lt;h2 id=&quot;new-matrix-bridges&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#new-matrix-bridges&quot; aria-label=&quot;Anchor link for: new-matrix-bridges&quot;&gt;🔗&lt;&#x2F;a&gt;New Matrix Bridges&lt;&#x2F;h2&gt;
&lt;p&gt;Somehow we&#x27;ve failed to blog about the amazing &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-appservice-bridge&quot;&gt;matrix-appservice-bridge&lt;&#x2F;a&gt; Node framework which we&#x27;ve built as general purpose infrastructure for building Matrix Application Services which act as bridges between existing networks and comms solutions and Matrix.  The architecture here looks something like this:&lt;&#x2F;p&gt;
&lt;img src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2015&#x2F;12&#x2F;bridge.jpg&quot; alt=&quot;matrix-appservice-bridge&quot; width=&quot;720&quot; height=&quot;540&quot; class=&quot;aligncenter size-full wp-image-1429&quot; &#x2F;&gt;
&lt;p&gt;...and the goal is to end up with something like this:&lt;&#x2F;p&gt;
&lt;img src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2015&#x2F;12&#x2F;bridge2.jpg&quot; alt=&quot;bridge2&quot; width=&quot;720&quot; height=&quot;540&quot; class=&quot;aligncenter size-full wp-image-1430&quot; &#x2F;&gt;
&lt;p&gt;matrix-appservice-bridge is still in development, but there are a bunch of really cool bridges already using it - and a great howto that shows how you can use it to &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-appservice-bridge&#x2F;blob&#x2F;master&#x2F;HOWTO.md&quot;&gt;write a Matrix{&#x27;&amp;lt;-&amp;gt;&#x27;}Slack bridge in under 100 lines of code&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-appservice-verto&quot;&gt;the Matrix&#x2F;Verto Bridge&lt;&#x2F;a&gt; uses it to hook FreeSWITCH up to Matrix - currently used to provide multiway video and voice conferencing for &lt;a href=&quot;https:&#x2F;&#x2F;vector.im&quot;&gt;Vector&lt;&#x2F;a&gt;.  It could be easily extended to do generic Matrix{&#x27;&lt;-&gt;&#x27;}SIP or Matrix{&#x27;&lt;-&gt;&#x27;}anything-that-FreeSWITCH-can-speak though.&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-appservice-slack&quot;&gt;a basic Matrix&#x2F;Slack Bridge&lt;&#x2F;a&gt;, which works well enough for hardcoding bridges between specific Matrix and Slack rooms.&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-appservice-respoke&quot;&gt;matrix-appservice-respoke&lt;&#x2F;a&gt; - a crazy experiment that bridges Asterisk to Matrix by implementing the Respoke API such that Asterisk can connect to Matrix using chan_respoke.&lt;&#x2F;li&gt;
  &lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;node-purple&#x2F;tree&#x2F;master&#x2F;appservice&quot;&gt;matrix-appservice-purple&lt;&#x2F;a&gt; - another crazy experiment that hooks libpurple up to matrix-appservice-bridge such that *any* network that libpurple can talk to can be bridged into Matrix.  So far we&#x27;ve experimented with Lync, Skype and Facebook (and AIM(!)) and it works - but it needs a lot more love to be usable other than as a toy.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Meanwhile, there&#x27;s also:&lt;&#x2F;p&gt;
&lt;ul&gt;
 &lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-appservice-irc&quot;&gt;the Matrix&#x2F;IRC Bridge&lt;&#x2F;a&gt;, which doesn&#x27;t actually use it yet, but will do soon.&lt;&#x2F;li&gt;
 &lt;li&gt;&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;illicitonion&#x2F;slackbridge&quot;&gt;an experimental Golang Matrix&#x2F;Slack Bridge&lt;&#x2F;a&gt;, which looks at whether we should be doing this all in Golang rather than Node.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;As of right now our work on bridging has been on hiatus for a month or so, and we would &lt;em&gt;love&lt;&#x2F;em&gt; support from the community in advancing and extending the stuff we&#x27;ve built so far.  Otherwise we&#x27;ll get back to it ourselves in the new year.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;astricon-2015&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#astricon-2015&quot; aria-label=&quot;Anchor link for: astricon-2015&quot;&gt;🔗&lt;&#x2F;a&gt;Astricon 2015&lt;&#x2F;h2&gt;
&lt;p&gt;We had a lot of fun in Orlando in October at &lt;a href=&quot;http:&#x2F;&#x2F;www.asterisk.org&#x2F;community&#x2F;astricon-user-conference&#x2F;sessions&#x2F;bridging-asterisk-matrix-ecosystem&quot;&gt;Astricon 2015&lt;&#x2F;a&gt; - we put together &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-appservice-respoke&quot;&gt;matrix-appservice-respoke&lt;&#x2F;a&gt; (see above) for our talk and Dangerous Demo in a desperate 24 hour hack and it even worked!  The judges were kind enough to give us the &quot;Swan Award&quot; prize in the dangerous demo shoot-out for the glossiest demo :)&lt;&#x2F;p&gt;
&lt;img src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2015&#x2F;12&#x2F;2015-10-15-Matrix-Astricon.jpg&quot; alt=&quot;2015-10-15 Matrix Astricon&quot; width=&quot;720&quot; height=&quot;540&quot; class=&quot;aligncenter size-full wp-image-1433&quot; &#x2F;&gt;
&lt;img src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2015&#x2F;12&#x2F;swan-1024x768.jpg&quot; alt=&quot;swan award&quot; width=&quot;1024&quot; height=&quot;768&quot; class=&quot;aligncenter size-large wp-image-1432&quot; &#x2F;&gt;
&lt;p&gt;The slides for our &#x27;Bridging Asterisk to the Matrix Ecosystem&#x27; talk are &lt;a href=&quot;&#x2F;~matthew&#x2F;2015-10-15 Matrix Astricon.pdf&quot;&gt;downloadable here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;pidgin&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#pidgin&quot; aria-label=&quot;Anchor link for: pidgin&quot;&gt;🔗&lt;&#x2F;a&gt;Pidgin!&lt;&#x2F;h2&gt;
&lt;p&gt;We also implemented a basic libpurple plugin for Matrix - adding Matrix support to any app like Pidgin or Bitlbee that uses libpurple.  (You could in theory even use it with matrix-appservice-purple to bridge from Matrix to Matrix, but that&#x27;d be silly :).  It supports basic functionality and uses the new &#x27;v2&#x27; APIs for syncing to Matrix.  Adventurous libpurplers can go check it out and experiment with it from &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;purple-matrix&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;purple-matrix&lt;&#x2F;a&gt; - feedback welcome.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;openwebrtc-support-on-ios&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#openwebrtc-support-on-ios&quot; aria-label=&quot;Anchor link for: openwebrtc-support-on-ios&quot;&gt;🔗&lt;&#x2F;a&gt;OpenWebRTC Support on iOS&lt;&#x2F;h2&gt;
&lt;p&gt;We went and hooked &lt;a href=&quot;http:&#x2F;&#x2F;openwebrtc.org&quot;&gt;OpenWebRTC&lt;&#x2F;a&gt; up to &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-ios-sdk&quot;&gt;matrix-ios-sdk&lt;&#x2F;a&gt; so that iOS Matrix apps can use the OpenWebRTC stack from Ericsson Research for VoIP and Video.  Apparently we haven&#x27;t written it up fully yet, but you can find the code at &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-ios-openwebrtc-wrapper&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-ios-openwebrtc-wrapper&lt;&#x2F;a&gt; for those interested in using OWR with Matrix!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;debian-repository-for-synapse&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#debian-repository-for-synapse&quot; aria-label=&quot;Anchor link for: debian-repository-for-synapse&quot;&gt;🔗&lt;&#x2F;a&gt;Debian Repository for Synapse&lt;&#x2F;h2&gt;
&lt;p&gt;We built a 3rd party Debian package repository for Synapse... and then forgot to tell anyone about it, other than buried in the Synapse readme!  Well, it exists, and intrepid debianers should go check it out at &lt;a href=&quot;http:&#x2F;&#x2F;matrix.org&#x2F;packages&#x2F;debian&#x2F;&quot;&gt;http:&#x2F;&#x2F;matrix.org&#x2F;packages&#x2F;debian&#x2F;&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;tadsummit&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#tadsummit&quot; aria-label=&quot;Anchor link for: tadsummit&quot;&gt;🔗&lt;&#x2F;a&gt;TADSummit&lt;&#x2F;h2&gt;
&lt;p&gt;In November we attended &lt;a href=&quot;http:&#x2F;&#x2F;tadsummit.com&#x2F;2015&#x2F;&quot;&gt;TADSummit&lt;&#x2F;a&gt; in Lisbon - a great event for folks hacking on telco applications and the telcos themselves.  Apparently we failed to do a writeup, but we had a wonderful time: highlights included sitting down with Maarten Ectors from Canonical to wrap up Synapse as an &lt;a href=&quot;https:&#x2F;&#x2F;uappexplorer.com&#x2F;app&#x2F;matrix.mectors&quot;&gt;Ubuntu Snappy app&lt;&#x2F;a&gt; such that anyone in the Ubuntu Core ecosystem can trivially run a Matrix homeserver, and demoing it as part of the Dangerous Demos track there.  We also gave a &#x27;Matrix: One Year In&#x27; talk to summarise what we got up to in 2015.&lt;&#x2F;p&gt;
&lt;img src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2015&#x2F;12&#x2F;ubuntu-768x1024.jpg&quot; alt=&quot;Matthew &amp; Maarten&quot; width=&quot;768&quot; height=&quot;1024&quot; class=&quot;aligncenter size-large wp-image-1435&quot; &#x2F;&gt;
&lt;img src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2015&#x2F;12&#x2F;2015-11-17-Matrix-TADSummit.jpg&quot; alt=&quot;2015-11-17 Matrix TADSummit&quot; width=&quot;720&quot; height=&quot;540&quot; class=&quot;aligncenter size-full wp-image-1434&quot; &#x2F;&gt;
&lt;h2 id=&quot;webrtc-paris&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#webrtc-paris&quot; aria-label=&quot;Anchor link for: webrtc-paris&quot;&gt;🔗&lt;&#x2F;a&gt;WebRTC Paris&lt;&#x2F;h2&gt;
&lt;p&gt;Whilst on the subject of conferences that we forgot to write up - we just got back from WebRTC Paris, where we demoed the latest &amp;amp; greatest Matrix clients and bridges, hung out with the OpenWebRTC guys and gave another ecosystem update.  You can see the slides at &lt;a href=&quot;&#x2F;~daniel&#x2F;Matrix- One-year Status Report.pdf&quot;&gt;https:&#x2F;&#x2F;matrix.org&#x2F;~daniel&#x2F;Matrix- One-year Status Report.pdf&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;img src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2015&#x2F;12&#x2F;paris-1024x768.jpg&quot; alt=&quot;WebRTC Paris&quot; width=&quot;1024&quot; height=&quot;768&quot; class=&quot;aligncenter size-large wp-image-1436&quot; &#x2F;&gt;
&lt;h2 id=&quot;new-clients-and-app-services&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#new-clients-and-app-services&quot; aria-label=&quot;Anchor link for: new-clients-and-app-services&quot;&gt;🔗&lt;&#x2F;a&gt;New Clients and App Services&lt;&#x2F;h2&gt;
&lt;p&gt;There have been a flurry of really interesting new clients and other projects which certainly deserve whole blog posts of their own!&lt;&#x2F;p&gt;
&lt;p&gt;There&#x27;s &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;davidar&#x2F;tensor&quot;&gt;Tensor&lt;&#x2F;a&gt; from David A Roberts - a multiplatform &lt;b&gt;native&lt;&#x2F;b&gt; client written in QML that heavily leverages the matrix-js-sdk:&lt;&#x2F;p&gt;
&lt;img src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2015&#x2F;12&#x2F;tensor-1024x789.png&quot; alt=&quot;tensor&quot; width=&quot;1024&quot; height=&quot;789&quot; class=&quot;aligncenter size-large wp-image-1438&quot; &#x2F;&gt;
&lt;p&gt;There&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;fort.kickass.systems:10082&#x2F;cgit&#x2F;personal&#x2F;rrix&#x2F;pub&#x2F;matrix.el.git&#x2F;&quot;&gt;matrix.el&lt;&#x2F;a&gt; from Ryan Rix - a native Matrix client for Emacs! You can read all about the whys and wherefores &lt;a href=&quot;http:&#x2F;&#x2F;whatthefuck.computer&#x2F;blog&#x2F;2015&#x2F;10&#x2F;26&#x2F;mclient&#x2F;&quot;&gt;here&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;img src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2015&#x2F;10&#x2F;mclient1-1024x346.png&quot; alt=&quot;mclient&quot; width=&quot;1024&quot; height=&quot;346&quot; class=&quot;aligncenter size-large wp-image-1355&quot; &#x2F;&gt;
&lt;p&gt;There&#x27;s also loads of cool stuff that Ryan&#x27;s been doing with Matrix on &lt;a href=&quot;http:&#x2F;&#x2F;whatthefuck.computer&#x2F;blog&#x2F;&quot;&gt;his blog&lt;&#x2F;a&gt; - including &lt;a href=&quot;http:&#x2F;&#x2F;whatthefuck.computer&#x2F;blog&#x2F;2015&#x2F;12&#x2F;06&#x2F;polynomial-a-decentralized-webring&#x2F;&quot;&gt;Polynomial - a decentralised webring&lt;&#x2F;a&gt; built on Matrix (yes, webrings were and are cool, ok!?!), and his Matrix-powered &lt;a href=&quot;http:&#x2F;&#x2F;whatthefuck.computer&#x2F;blog&#x2F;2015&#x2F;11&#x2F;22&#x2F;body-computing-system-continuations&#x2F;&quot;&gt;Body Computing System&lt;&#x2F;a&gt;.  Also, some &lt;a href=&quot;http:&#x2F;&#x2F;whatthefuck.computer&#x2F;blog&#x2F;2015&#x2F;11&#x2F;01&#x2F;on-the-balkinization-of-my-chat-communities&#x2F;&quot;&gt;philosophical&lt;&#x2F;a&gt; &lt;a href=&quot;http:&#x2F;&#x2F;whatthefuck.computer&#x2F;blog&#x2F;2015&#x2F;12&#x2F;19&#x2F;matrix-and-indieweb&#x2F;&quot;&gt;posts&lt;&#x2F;a&gt; on the benefits of Matrix which give us some hope that we&#x27;re on the right track!&lt;&#x2F;p&gt;
&lt;p&gt;Then there&#x27;s &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;tdfischer&#x2F;pto&quot;&gt;Power Take-Off&lt;&#x2F;a&gt; from Torrie Fischer - an early lets-IRC-clients-connect-to-Matrix project in Rust...&lt;&#x2F;p&gt;
&lt;p&gt;...and there&#x27;s &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Xe&#x2F;morpheus&quot;&gt;Morpheus&lt;&#x2F;a&gt; from Christine Dodrill (Xena) - a Matrix client and bot framework for Haskell; part of a more over-arching IRC{&#x27;&amp;lt;-&amp;gt;&#x27;}Matrix unification project.  Xena also wrote &lt;a href=&quot;https:&#x2F;&#x2F;christine.website&#x2F;blog&#x2F;matrix-has-u-2015-11-27&quot;&gt;a great call to arms for Matrix&lt;&#x2F;a&gt; :)&lt;&#x2F;p&gt;
&lt;p&gt;Very recently there&#x27;s the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ruma&#x2F;ruma&quot;&gt;Ruma&lt;&#x2F;a&gt; project from Jimmy Cuadra - an ambitious mission to build Matrix components (up to and including a homeserver) in Rust!&lt;&#x2F;p&gt;
&lt;p&gt;Other stuff includes a &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;davidar&#x2F;hubot-matrix&#x2F;&quot;&gt;Hubot adaptor&lt;&#x2F;a&gt; from davidar, &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;DylanGriffith&#x2F;bender&quot;&gt;Bender&lt;&#x2F;a&gt;: an Elixir client and bot library from Dylan Griffith, Jon Frederickson&#x27;s &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;jfrederickson&#x2F;matrix-xmpp-bridge&quot;&gt;matrix-xmpp-bridge&lt;&#x2F;a&gt;, rzr&#x27;s &lt;a href=&quot;http:&#x2F;&#x2F;www.element14.com&#x2F;community&#x2F;people&#x2F;rzr&#x2F;blog&#x2F;2015&#x2F;11&#x2F;24&#x2F;how-to-setup-a-webrtc-gateway-using-matrix-on-minnowmax&quot;&gt;guide to installing synapse on a minnowmax&lt;&#x2F;a&gt;, and I&#x27;m sure many others we don&#x27;t know about or have missed!&lt;&#x2F;p&gt;
&lt;p&gt;Finally, Tor has done an amazing job on &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;torhve&#x2F;weechat-matrix-protocol-script&quot;&gt;weechat-matrix-protocol-script&lt;&#x2F;a&gt; in implementing features like V2 Sync and E2E crypto faster than we&#x27;ve managed to add them in the official client SDKs!&lt;&#x2F;p&gt;
&lt;h2 id=&quot;release-zero-of-the-matrix-specification&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#release-zero-of-the-matrix-specification&quot; aria-label=&quot;Anchor link for: release-zero-of-the-matrix-specification&quot;&gt;🔗&lt;&#x2F;a&gt;Release Zero of the Matrix Specification&lt;&#x2F;h2&gt;
&lt;p&gt;We have made some major improvements to &lt;a href=&quot;&#x2F;spec&quot;&gt;the spec&lt;&#x2F;a&gt; over the last few months: adding in feature profiles and spec modules to better structure the document, and most recently splitting it up explicitly into separate Client-Server, Server-Server and Application-Server APIs, each with a well-defined single global &#x27;release&#x27; number for versioning.  We started this with a &#x27;r0.0.0&#x27; release of the Client-Server API, which consolidates the horrible mess of &#x27;v1&#x27; and &#x27;v2&#x27; APIs we had previously flying around into a single well-defined version of the spec.  Meanwhile the spec is now entirely consolidated into a set of JSON schema and Swagger 2 API descriptors, with a bunch of ReStructured Text for the verbiage - you can find it all at &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;The r0.0.0 changelog is exciting stuff - you can see it in its entirety at &lt;a href=&quot;http:&#x2F;&#x2F;matrix.org&#x2F;docs&#x2F;spec&#x2F;r0.0.0&#x2F;client_server.html#changelog&quot;&gt;http:&#x2F;&#x2F;matrix.org&#x2F;docs&#x2F;spec&#x2F;r0.0.0&#x2F;client_server.html#changelog&lt;&#x2F;a&gt;.  Synapse itself will support the full r0 API set in 0.12, which will be released any day now.&lt;&#x2F;p&gt;
&lt;p&gt;We&#x27;ve also switched the Swagger-based API viewer over to Swagger 2.0: &lt;a href=&quot;http:&#x2F;&#x2F;matrix.org&#x2F;docs&#x2F;api&quot;&gt;http:&#x2F;&#x2F;matrix.org&#x2F;docs&#x2F;api&lt;&#x2F;a&gt;.  We also rejigged the Matrix documentation website entirely, generating it via Jekyll and adding in a new &lt;a href=&quot;http:&#x2F;&#x2F;matrix.org&#x2F;docs&#x2F;guides&#x2F;&quot;&gt;guides section&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;Also, we should have mentioned the existence of &lt;a href=&quot;&#x2F;speculator&quot;&gt;Speculator&lt;&#x2F;a&gt; - a golang helper app (&lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-doc&#x2F;tree&#x2F;master&#x2F;scripts&#x2F;speculator&quot;&gt;source here&lt;&#x2F;a&gt;) which, as the name suggests, renders out copies of the spec as HTML from different branches and pull requests for ease of previewing.&lt;&#x2F;p&gt;
&lt;h2 id=&quot;dendron&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#dendron&quot; aria-label=&quot;Anchor link for: dendron&quot;&gt;🔗&lt;&#x2F;a&gt;Dendron&lt;&#x2F;h2&gt;
&lt;p&gt;Over the last few months we&#x27;ve also started an entirely new project, codenamed Dendron.  Dendron is the project to evolve Synapse from the current single-threaded Python&#x2F;Twisted monolithic homeserver into something with a lot more type-safety, horizontal scalability and high availability.  We&#x27;ve mainly been experimenting with different ways of doing this, but the current plan is to split Synapse itself up into multiple services which can each scale independently, and then rewrite some&#x2F;all of them in languages with better type safety and&#x2F;or performance or profiling tools.&lt;&#x2F;p&gt;
&lt;p&gt;Some folks may remember a survey that we posted a few months ago asking for the community&#x27;s thoughts on what languages they&#x27;d like their ideal homeserver to be written in, from the perspectives of someone running it as well as hacking on it.  Whilst we haven&#x27;t (at all) based our decisions for Dendron purely on the survey, it was still quite an interesting exercise.  And here are the results (maximum &#x27;score&#x27; is 5, not 10):&lt;&#x2F;p&gt;
&lt;img src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2015&#x2F;12&#x2F;Screen-Shot-2015-12-25-at-01.58.55-1024x964.png&quot; alt=&quot;language survey 1&quot; width=&quot;1024&quot; height=&quot;964&quot; class=&quot;aligncenter size-large wp-image-1439&quot; &#x2F;&gt;
&lt;img src=&quot;&#x2F;blog&#x2F;wp-content&#x2F;uploads&#x2F;2015&#x2F;12&#x2F;Screen-Shot-2015-12-25-at-01.59.17-1024x968.png&quot; alt=&quot;language survey 2&quot; width=&quot;1024&quot; height=&quot;968&quot; class=&quot;aligncenter size-large wp-image-1440&quot; &#x2F;&gt;
&lt;p&gt;The basic feedback was that from the existing community: folks dislike running Java or Node servers; are okayish with Python, but would prefer native or near-native code (be that C, Rust or Go). Meanwhile, for contributing code, there&#x27;s slightly more interest in the (relatively) new shinies of Go and Rust.  And of course, everyone wanted to plug their own special snowflake language in the &#x27;Others&#x27; section, which was mainly a mix of Erlang, Elixir, Haskell, Lisp and Perl :)&lt;&#x2F;p&gt;
&lt;p&gt;This reinforced the choices we were looking at anyway - either Rust (for its safety), or Go (for its simplicity, python-likeness, and concurrency).  (We&#x27;d also consider Java, but have to concede that the FOSS community doesn&#x27;t like running it.)&lt;&#x2F;p&gt;
&lt;p&gt;So we looked at the dependencies that Synapse currently has, and the Rust equivalents, and concluded that the Rust ecosystem unfortunately isn&#x27;t quite mature enough yet to reliably handle the rather large set of complicated deps that we need in a homeserver.  Also, nobody on the core team is really a Rust guru yet.  Meanwhile, we have at least one ex-Google Go expert in the core team, and in practice it has the edge in terms of maturity.  So, right now, we&#x27;re looking at switching chunks of Dendron to Go where it makes sense.  (This is subject to change though depending on how we get on).  You should expect to hear a lot more about Dendron in 2016 :)&lt;&#x2F;p&gt;
&lt;h2 id=&quot;matrix-react-sdk-vector-and-latest-matrix-features&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#matrix-react-sdk-vector-and-latest-matrix-features&quot; aria-label=&quot;Anchor link for: matrix-react-sdk-vector-and-latest-matrix-features&quot;&gt;🔗&lt;&#x2F;a&gt;matrix-react-sdk, Vector, and latest Matrix features&lt;&#x2F;h2&gt;
&lt;p&gt;Last but not least: huge amounts of our time over the last year has gone into building &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-react-sdk&quot;&gt;matrix-react-sdk&lt;&#x2F;a&gt; - a full set of glossy Web UI components for building super-high quality glossy apps based on Matrix, built on the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-js-sdk&quot;&gt;matrix-js-sdk&lt;&#x2F;a&gt;.  This is basically a reaction against the original &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;matrix-org&#x2F;matrix-angular-sdk&quot;&gt;matrix-angular-sdk&lt;&#x2F;a&gt; and Matrix Console app that we launched Matrix with back in 2014 - which had minimal attention to UI&#x2F;UX and suffered from major performance problems; it was built purely as the fastest possible way we knew to prototype and demo Matrix in the first place.  matrix-react-sdk however has been built for both performance and quality of UI&#x2F;UX, as well as obviously using all the latest and greatest Matrix APIs.  (In fact, the transition from matrix-angular-sdk to matrix-react-sdk is pretty similar to the Synapse to Dendron transition on the horizon - although the latter should be more incremental and less &#x27;rewrite the world&#x27;).&lt;&#x2F;p&gt;
&lt;p&gt;Meanwhile, as part of our commercial work at our day job (i.e. &lt;b&gt;not&lt;&#x2F;b&gt; as Matrix.org) we&#x27;ve been helping on a glossy FOSS app called &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vector-im&#x2F;vector-web&quot;&gt;Vector&lt;&#x2F;a&gt; which is layered on top of matrix-react-sdk as a thin &#x27;skin&#x27; layer of CSS and a few custom components.  The intention for Vector is to ensure that Matrix has a flagship glossy client: which it clearly needs, in order to gain credibility and drive uptake of the Matrix standard, and also ensure that the Matrix standard actually does indeed fit the needs for a state-of-the-art collaboration tool.&lt;&#x2F;p&gt;
&lt;p&gt;matrix-react-sdk (and thus Vector) is still in incredibly heavy development - we&#x27;re going to start a formal beta fairly soon, but as of right now it&#x27;s still sprouting features and refinements on a daily basis.  Meanwhile matrix-react-sdk&#x27;s APIs are not remotely frozen (we entirely refactored it as recently as a few weeks ago), so not yet ready for use as a general purpose building block.&lt;&#x2F;p&gt;
&lt;p&gt;Some of the stuff going into react-sdk is &lt;em&gt;incredibly&lt;&#x2F;em&gt; cool - recent Matrix stuff that it shows off includes:&lt;&#x2F;p&gt;
&lt;ul&gt;
 &lt;li&gt;Animated read receipts.  If you haven&#x27;t seen these, you haven&#x27;t lived.  They are a &lt;a href=&quot;http:&#x2F;&#x2F;matrix.org&#x2F;docs&#x2F;spec&#x2F;r0.0.0&#x2F;client_server.html#id15&quot;&gt;relatively new addition to the Matrix spec.&lt;&#x2F;a&gt;
 &lt;&#x2F;li&gt;&lt;li&gt;Full server-side search.  We now have &lt;a href=&quot;http:&#x2F;&#x2F;matrix.org&#x2F;docs&#x2F;spec&#x2F;r0.0.0&#x2F;client_server.html#id42&quot;&gt;full-text search&lt;&#x2F;a&gt; in the Matrix spec, and implemented on synapse both on sqlite and postgres - and now in Vector too.  Having good search over all of your chat history makes Matrix *so* much more usable.
 &lt;&#x2F;li&gt;&lt;li&gt;Video conferencing.  We have full multi-way conferencing in Vector via matrix-appservice-verto and FreeSWITCH.  The intention is to add this to the core Matrix spec (having first made it a bit more generic) - see the &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;vector-im&#x2F;vector-web&#x2F;blob&#x2F;master&#x2F;docs&#x2F;conferencing.md&quot;&gt;draft spec&lt;&#x2F;a&gt; for details.
 &lt;&#x2F;li&gt;&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;matrix.org&#x2F;docs&#x2F;spec&#x2F;r0.0.0&#x2F;client_server.html#third-party-invites&quot;&gt;3rd party invites&lt;&#x2F;a&gt;.  You can now invite users into Matrix by email address as well as matrix ID, and it works.  Vector implements this.
 &lt;&#x2F;li&gt;&lt;li&gt;&lt;a href=&quot;http:&#x2F;&#x2F;matrix.org&#x2F;docs&#x2F;spec&#x2F;r0.0.0&#x2F;client_server.html#room-tagging&quot;&gt;Room tagging&lt;&#x2F;a&gt;.  You can now tag rooms as favourites, low priority, or with arbitrary namespaced metadata.  Vector implements this through a swanky drag &amp; drop UI.
 &lt;&#x2F;li&gt;&lt;li&gt;&quot;V2&quot; Sync API.  Now part of the &#x27;r0.0.0&#x27; spec, this lets Matrix support much smarter incremental and partial &lt;a href=&quot;http:&#x2F;&#x2F;matrix.org&#x2F;docs&#x2F;spec&#x2F;r0.0.0&#x2F;client_server.html#get-matrix-client-r0-sync&quot;&gt;synchronisation patterns&lt;&#x2F;a&gt;.  Vector now implements this, meaning that browser windows sync much faster after being offline for a bit, and no longer hammer the user with stale desktop notifications.
 &lt;&#x2F;li&gt;&lt;li&gt;Accessing &#x27;historical&#x27; rooms.  Matrix now lets you keep track of rooms you&#x27;ve left, so you can view and search the conversation logs even after you&#x27;ve left the conversation.  Vector now implements this (as of Monday!)
 &lt;&#x2F;li&gt;&lt;li&gt;Tab-complete that doesn&#x27;t suck.  This is a purely client-side feature which landed on Thursday!
 &lt;&#x2F;li&gt;&lt;li&gt;Roll-overable animated GIFs.  &#x27;nuff said.
 &lt;&#x2F;li&gt;&lt;li&gt;Markdown support. yay!
 &lt;&#x2F;li&gt;&lt;li&gt;Synchronised read and notification history.  This hasn&#x27;t landed yet (in vector or synapse or even the spec), but finally provides a way to keep read and notification state in sync in realtime across all your clients and a meaningful favicon &#x27;badge&#x27; telling you how many notifications you missed!
 &lt;&#x2F;li&gt;&lt;li&gt;Guest access.  This hasn&#x27;t landed in Vector yet, but it&#x27;s in &lt;a href=&quot;http:&#x2F;&#x2F;matrix.org&#x2F;docs&#x2F;spec&#x2F;r0.0.0&#x2F;client_server.html#guest-access&quot;&gt;the spec&lt;&#x2F;a&gt; and Synapse.  It will let folks use Matrix without having to create an account (at least for rooms which support &#x27;guest access&#x27; from the public).&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;If you haven&#x27;t given Vector a spin, it&#x27;s well worth heading over to &lt;a href=&quot;https:&#x2F;&#x2F;vector.im&quot;&gt;https:&#x2F;&#x2F;vector.im&lt;&#x2F;a&gt; and taking a look.&lt;&#x2F;p&gt;
&lt;p&gt;There&#x27;s also an Electron desktop version of Vector in progress, contributed by Steven Hammerton at &lt;a href=&quot;https:&#x2F;&#x2F;github.com&#x2F;stevenhammerton&#x2F;vector-desktop&quot;&gt;https:&#x2F;&#x2F;github.com&#x2F;stevenhammerton&#x2F;vector-desktop&lt;&#x2F;a&gt; (although it&#x27;s currently stuck on an old release).&lt;&#x2F;p&gt;
&lt;h2 id=&quot;epilogue&quot;&gt;&lt;a class=&quot;zola-anchor&quot; href=&quot;#epilogue&quot; aria-label=&quot;Anchor link for: epilogue&quot;&gt;🔗&lt;&#x2F;a&gt;Epilogue&lt;&#x2F;h2&gt;
&lt;p&gt;Okay, this has got a lot longer than it was meant to be - but hopefully makes up a bit for the lack of comms over the last few months whilst we&#x27;ve been drowning in work on Synapse, Vector, the Spec, Dendron, and everything else mentioned above.&lt;&#x2F;p&gt;
&lt;p&gt;2015 has been an epic year as we&#x27;ve taken Matrix from a very early beta to the advanced stage that it&#x27;s at now.  Obviously there&#x27;s still a lot of stuff to do though.  Right now we expect the focus in 2016 to be:&lt;&#x2F;p&gt;
&lt;ul&gt;
 &lt;li&gt;Vector - making sure the Matrix protocol has a flagship glossy FOSS client that normal (non-geek) users can use.&lt;&#x2F;li&gt;
 &lt;li&gt; Dendron - making Synapse more reliable, scalable and maintainable.&lt;&#x2F;li&gt;
 &lt;li&gt;Bridging - wiring as much of the rest of the world into Matrix as accurately and efficiently as possible.&lt;&#x2F;li&gt;
 &lt;li&gt;Federation Spec - finishing and releasing the Server-Server API.&lt;&#x2F;li&gt;
 &lt;li&gt;End-to-end crypto - finishing it off.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;...and obviously continuing to refine and extend the core of Matrix itself with features like threading, editable messages, and possibly even distributed accounts.&lt;&#x2F;p&gt;
&lt;p&gt;There are very fun and exciting times ahead.  We&#x27;d just like to say a profound thank you to everyone who&#x27;s supported Matrix this far and helped make this mission possible - whether it&#x27;s by running clients&#x2F;servers&#x2F;services, or writing your own, or filing bugs and feedback on our code or the spec, or telling folks about the project, or paying us to work on it(!), or just by reading this blog post.  Hopefully 2016 will be the year where online communication starts to open up and interoperate once again, rather than becoming ever more fragmented and closed.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks for reading - and Merry Christmas, for those who celebrate :)&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Matthew, Amandine &amp;amp; the Matrix Team.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
</content>
</entry>

    
</feed>
