At FOSDEM 2026, the world’s largest open source conference, David Baker (Staff Software Engineer and the original author of Element Web) and Florian Duros (Senior Software Engineer) presented an inside look at Element Web - from its early days to the bold plans shaping its future. They shared how the team is modernising the platform to be faster, more reliable and more flexible - all while keeping the experience seamless for the millions of people who rely on it worldwide.
Watch the whole presentation
Where we started
Element Web first launched in 2015 alongside the Matrix JS SDK. Its earliest prototype was small, simple, and lightning fast - switching between rooms felt instantaneous. But it came with trade-offs: features like end-to-end encryption, Spaces, and other core Matrix functionality weren’t yet in place and, as the platform grew, so did the complexity and technical debt.
The initial architecture leaned on a Flux-style model (“good God, Marty”) and a shared SDK, matrix-react-sdk, which was intended to be a reusable foundation for any Matrix app. In practice, however, it became tightly coupled and increasingly difficult to maintain. Business logic often lived inside UI components, making updates and improvements tricky as React evolved and the wider web ecosystem changed. On top of that, code quality fluctuated, reflecting both that particular project’s open-source nature and the evolving practices of a growing team.
Despite these challenges, Element Web has laid the groundwork for everything that followed. It became a fast, flexible client trusted by millions and widely adopted across the ecosystem. Projects like BundesMessenger in Germany and LuxChat in Luxembourg, along with countless other organisations and community deployments, have shown the value of a web-based Matrix client that is both reliable and trusted. This strong foundation now sets the stage for the next generation of Element Web.
Why this matters
We believe decentralised communication must be fast, reliable, and competitive with closed-source alternatives. While many in the Matrix community appreciate the platform’s values, broader adoption will only happen if everyday users find the experience familiar and fluid - not something they put up with because they “get it.” To achieve this, Element Web needs to feel as polished and performant as mainstream consumer apps.
This is exactly why we have been evolving our architecture and building shared components. These provide a foundation that is both flexible and future-proof while maintaining a smooth, reliable user experience.
Our Vision: Shared, reusable, UI-first components
Rather than rewriting Element Web from scratch, which would be risky and disruptive, we are evolving it piece by piece. The core idea is to break the app into shared components - building blocks that focus purely on the user interface. They do not contain any Matrix business logic, they work independently of the underlying SDK, and they handle display and interaction only.These components know what to show and what actions to trigger, but not where the data comes from. This separation allows us to reuse them across different apps, not just Element Web, but also clients like Aurora and modules for Element Web.
We started with smaller components and are now tackling larger parts of the interface, including the room list and timeline tiles. After that, we will move on to panels like the Spaces sidebar and login or registration screens. Each shared component has its own module with clearly defined interfaces, which means we can improve the UI and accessibility without touching the data layer.
This approach also allows us to gradually replace how data is fetched without rewriting the entire app. Shared components already allow us to reuse UI code between Element Web and Aurora, avoiding duplication, improving maintainability, and ensuring a consistent experience across clients.
A Modern Architecture: MVVM
At the heart of this transformation is the Model-View-ViewModel (MVVM) pattern. In MVVM, models represent data sources, whether that’s the JS SDK, the Rust SDK, or simple in-memory stores. Views are the shared components - the UI elements that display data and handle user interactions. ViewModels sit in between, translating data into a form the views can use and managing the actions that views trigger.
This separation makes it easier to maintain, test, and evolve both the UI and the business logic independently. In practice, shared components declare what data they need, and the view model provides it. That data can come from legacy sources or newer backends like the Rust SDK, allowing us to modernise the architecture without rewriting everything at once.
Better tooling, accessibility and testing
As part of this work, we’ve modernised our tooling to make development faster, safer, and more reliable. Shared components are built with Vite and documented using Storybook, making it easier to explore and understand each piece of the UI.
We use visual tests to capture light and dark theme states, interface variations, and accessibility concerns early in the process. Automated tests help catch regressions and ensure features behave consistently across different contexts.
This focus on tooling and testing improves not just performance, but also stability and confidence. The result is a more reliable Element Web for developers, contributors, and users alike.
The Rust SDK and what comes next
A key part of our long-term plan is integrating the Rust SDK into Element Web via WebAssembly. The Rust SDK already powers Element X mobile apps, delivering dramatically improved performance and memory efficiency. Bringing that same core to the web will unlock similar benefits for Element Web users.
Our shared component approach makes this transition possible. Because the UI and views are decoupled from the data sources, we can gradually replace the underlying logic, including syncing, without rewriting the entire interface.
This approach allows us to continue delivering user-facing improvements while we integrate the Rust SDK. It gives us the best of both worlds: ongoing enhancements for today and a modern, high-performance foundation for the future.
What this means for you
This phased approach allows us to evolve Element Web progressively, reduce technical debt over time, and roll out UI improvements across multiple apps. At the same time, it prepares the web client for the next generation of Matrix SDKs.
We’re excited about the path ahead and hope this gives you a clear view of the work already underway and what’s coming next. Stay tuned for more updates, and as always, we welcome your feedback as we continue to refine and improve Element Web and our shared UI platform.