Element X: Ignition

Today, we’re beyond excited to announce the first major release of Element X synchronised across both iOS and Android, which we’ve codenamed “Ignition” given it truly marks the point where the Element X engine starts to turn over.

Element X aims to be the fastest, most beautiful and most usable messaging app ever - outperforming today’s mainstream apps such as iMessage, WhatsApp and Telegram - all while building on Matrix for open interoperability, decentralisation and end-to-end encryption. This release is intended for admins and early adopters to embark on the future of Element: it’s not quite a full replacement for the existing Element apps yet, but if you’re able to live without a few features for now it’s very usable already as a daily driver.

In this Ignition release, we’ve made account creation, login and account management more flexible and secure with OpenID Connect (OIDC). We’ve also added in VoIP support for the ability to join Element Call links, enabled the super-shiny Rich Text Editor by default, added Polls and Location Share, applied tonnes of additional visual polish, added encrypted push notifications, and further tuned sync performance to guarantee instant launch and instant sync.

In other words, Element X is the first ever app to showcase Matrix 2.0: the combination of OIDC, Sliding Sync and Native VoIP announced at FOSDEM 2023 - and you can get it right now from the App Store and Play Store. It works out of the box with any existing Matrix account on a homeserver with Sliding Sync support, and if you would like to run your own server, you can now check out our super-easy graphical installer with Element Server Suite.

Isn’t it gorgeous?

The Tao of Element X

Element X is the culmination of years of effort to build not just the world’s best Matrix client, but the world’s best messaging app.  We’ve focused on three main areas: usability, performance and stability.

Element X’s interface is deceptively simple. We’ve focused on first perfecting the mobile messaging use case rather than on deeper collaboration features - letting organisations run their own secure, decentralised, self-hosted WhatsApp/Signal communication app.  Each screen has been iterated on countless times by our design team, and will continue to be refined - paring away unnecessary features and presenting the core flows as clearly and intuitively as conceivably possible: a truly modern and efficient design, optimised for professional communication.  Rather than exposing a kitchen sink of features and settings, we’re keeping Element X truly focused: doing one job and absolutely nailing it - all while harnessing the power of Matrix for secure, interoperable, open-standard communication.

Element X is screamingly fast: over 6000 times faster than classic Element when resyncing after you’ve been offline, or when you log into a new device.  Specifically, we’ve aimed for instant login, instant launch and instant sync - no matter how many conversations you’re in, or how many people are in them.  The main architectural driver for this performance is Sliding Sync: the new Matrix API which ensures that the app syncs the precise information needed to display its UI from the server as rapidly as possible.  Then to achieve absolute peak performance, the core of Element X is written in Rust: powered by matrix-rust-sdk.  Rust provides zero cost abstractions, meaning that higher-level programming abstractions do not incur a performance penalty: the app’s engine runs as fast as it possibly can.  Finally, we’ve built on the very latest native UI frameworks on iOS and Android, giving the best possible user interface performance with the very latest accessibility best practices.

Rust is also the key to Element X’s incredible stability. By using a single SDK for all the heavy lifting, shared between iOS and Android, we can ensure that bug fixes on one platform immediately benefit the other - and meanwhile Rust’s intrinsic memory safety, type safety and concurrency safety help ensure the engine is as robust as possible.  We built the async bindings needed to connect Rust to Swift and Kotlin on iOS and Android respectively, and we believe the combination provides the ultimate development stack available today for high-performance cross-platform mobile apps.  Encryption, historically one of the hardest areas of Matrix to stabilise, is also now incredibly solid, thanks to the new Rust matrix-sdk-crypto library and the new high-performance, audited Rust implementation of Matrix’s end-to-end encryption: vodozemac.

You can read more about the rationale of Element X in the announcement posts for the iOS and Android releases - but now, let’s dig into what’s new in this release.

Native Matrix Video Conferencing with Element Call

One of the biggest steps forwards in the Ignition release is that Element X now supports end-to-end-encrypted multiparty VoIP and Video calling, thanks to the magic of Element Call!

Element Call is our long-awaited Matrix-native video and voice conferencing app, which in Element X replaces our old friend Jitsi as the default conferencing tool.

Element Call inside Element X

Element Call gives us highly scalable voice and video conferencing (handling up to hundreds of users) thanks to leveraging LiveKit’s end-to-end encryption capable Selective Forwarding Unit (SFU). Element Call comes with a beautiful new dynamic interface which lets you drag and zoom the participants to lay them out however you like in Freeform mode - or let Element Call do it automatically for you in Spotlight mode, based on who’s speaking.

For Ignition, we’ve embedded Element Call into Element X so that Element Call links (e.g. https://call.element.io) will open natively in Element X on iOS and Android - effectively making Element X a native Element Call client, rather than having to use your mobile web browser. In exchange, you can now background the app and even lock the phone when on a call without getting kicked off! Element Call is also fully end-to-end encrypted (E2EE).

Next on the Element X roadmap for Element Call is a deeper integration that will allow users to start and end native Matrix calls directly from the interface, be it 1:1 direct calls that work like phone calls, with the ability to be controlled from the lockscreen - or group calls that can be started from Matrix rooms.

Once the deep Element Call integration is in place, it will benefit from even stronger encryption between the call participants, using Matrix’s verification process and using individual sender keys (an industry first!).

Element Call is still quite young, and we’re considering it beta until it’s fully integrated in Element X and Element Web and it supports full Matrix-based E2EE - so for those counting: today’s release is Element Call Beta 4!

Running Element X with Element Server Suite

It’s worth noting that Element Server Suite (including Element Starter) has complete support for Element X’s new Matrix 2.0 features out of the box since release 23.09: with the Sliding Sync proxy, Matrix Authentication Service and the Element Call server all conveniently and securely packaged up as Kubernetes pods orchestrated by the ESS kubernetes operator.  Meanwhile, Element Cloud users also get Sliding Sync and Element Call support at their fingertips too.

ESS Admin Console interface

To keep your setup stable, safe and secure, we’re also introducing additional support: our new advance security advisory process will follow industry standards to help our customers with advance notice on security issues and patch support. We’re also introducing a new Long-term Support (LTS) version of Element Server Suite for customers who require maximum stability - backporting security patches for 12 months for LTS releases without introducing new features or changes

Putting you in your Element

If you haven’t noticed, we’re putting a *lot* of work into the design of Element X. The rich-text editor UI alone is an unrecognisable step forwards from the early days of Element, but there’s been a huge amount of new work across the board.  You’ve probably seen that the app icons have been refined to be higher contrast and easier to spot (as part of our accessibility focus overall) - and you’ll likely spot that users’ names in the timeline are now (subtly) colour coded.

A major new addition is the new header on the main screen, which shows your avatar surrounded by a subtle glowing aura which we call a bloom.  The idea here is that we’re branding the app based on your avatar - literally putting you in your Element, and infusing your personality into the interface.

Be in your Element X

We’ve had a form of this on Element Web for years with the Room List background being a satin or frosted-glass magnified view of your avatar - but with Blooms in Element X, we’re going for a more subtle and unique effect. We’re still tweaking the precise aesthetics of the glow, but we already think it gives the app a lot more character - your character, to be precise!

Rich Text for Everyone!

Another long-awaited step forward is the arrival of our Rich Text Editor as the default composer in Element X on both iOS and Android. The new editor has been a real labour of love over the last year or so, with the core logic built in Rust and integrations for iOS, Android and Web built on top - and we’re super excited that it’s mature enough now to transparently drop in and provide a really beautiful and robust text composing experience, complete with full-screen mode and a wide range (wider than markdown!) of formatting options. We’d just like to gently point out that this is light years ahead of anything that WhatsApp, iMessage, Signal or Telegram have…

Rich text formatting in the composer

And don’t worry - if you’re addicted to Markdown and dread the idea of using a GUI to format your messages, you can always switch editor in Advanced Settings :)

Location share and Polls

Element X is catching up with Element on some of the more exotic features too - in Ignition we also have static location sharing (backed by any Mapbox-compatible tileserver), as well as beautiful new animated Polls support - so you too can decide in style where to go for lunch.

Polls

Native OpenID Connect (OIDC)

Meanwhile, by far the biggest under-the-hood change in the Ignition release is that we now have support for account creation and account management thanks to native OpenID Connect (OIDC).  With an appropriately configured homeserver you can now use Element X to register, login and manage your account and its sessions via our brave new world of native OIDC.

Matrix is moving to OIDC for all authentication (subject to final MSC approvals) and OIDC will eventually replace the old authentication system - both for legacy username/password auth as well as legacy Single Sign On. The advantages of native OIDC are enormous, including:

  • Paving the way to 2FA, MFA, Passkeys and other advanced authentication capabilities
  • Ensuring users only ever send their password to their server, rather than exposing it to every Matrix client they use.
  • Giving a consistent authentication and account management experience no matter what app the user uses.
  • Integrating seamlessly with password managers
  • Letting users share authentication between apps, if desired.
  • Automatically refreshing users’ access tokens every few minutes, to protect against it getting skimmed
  • Letting users control what Matrix features an app has permission to use.

However, the shift to OIDC is a huge change, and while Element X itself now has full native OIDC support, some of the serverside pieces are still in progress:

  • We haven’t written the migration tool yet to shift existing homeservers with normal username/password to native OIDC (for instance, the Matrix.org homeserver doesn’t yet support native OIDC). As a stopgap, Element X also supports legacy login.
  • Migrating servers from legacy Single Sign On authentication to native OIDC is possible, but has to be done manually (see the guide).
  • Native OIDC does not yet provide full backwards compatibility for older clients: specifically, adding email addresses to your account, account deactivation, and logging out old devices is not yet wired up.

Of course, we will reach out to our customers to help with the migration over the coming months. The easiest way to get OIDC support up and running from scratch is via Element Server Suite. Experts can check out the Matrix guide for setting up native OIDC manually by deploying Matrix Authentication Service alongside Synapse.  Customers using our cloud hosting service can also request that servers using SSO are migrated to native OIDC by Element support.

Right now we recommend using native OIDC on new servers, dedicated test servers, or servers where you don’t mind breaking compatibility with non-native-OIDC clients.  However, now is definitely the right time to experiment with hooking up native OIDC on new servers and to get comfortable with the shape of things to come - especially if you’re using legacy SSO today.

To give an idea of how it feels - here’s an example of using native OIDC to log into an OIDC-enabled homeserver (the Element corporate homeserver in this instance):

Sliding Sync Speed-ups

Finally, there has been a lot of work to ensure the app runs as fast as it possibly can, despite all the new features being added. A great example of this is that the app now remembers what conversations you’re in, giving instant launch (even if you’re offline) and ensuring you can instantly search the roomlist on launch. Combined with Sliding Sync, the new Matrix API for rapidly syncing the essential information needed for the app to function, this ensures crazy fast launch and sync speed and UI performance no matter how large your account is.

We still see even more potential to simplify and speed up Sliding Sync, so expect to see some changes and improvements to Sliding Sync in the near future, based on the real-world experiences of implementing Element X.

What remains?

Now that we’ve turned the ignition on the Element X engine, we’re working hard on take-off. Our mission is to drive Element X forwards so that it can be your default communication app.

There’s obviously a bunch of stuff still remaining for Element X, but with the super-solid foundations now well and truly established we’ll be working through these rapidly, in no particular order:

  • OIDC support for existing servers (e.g. matrix.org)
  • Encrypted backup support, so you can actually read your old end-to-end encrypted messages(!)
  • A new roomlist experience with better sorting, badges (including unread state) and filters.
  • A new chat timeline experience where it’s easier to catch-up with unread messages.
  • Full Encryption UI/UX (handling untrusted users/devices)
  • Fully integrated VoIP and tight OS integration
  • Voice Messages
  • Typing notifications
  • Read receipts
  • Figuring out if and how to incorporate threads, spaces and widgets.

We’ll be aiming to ship new releases on both iOS and Android on a regular basis from here on in - and we’ll obviously aim for a production ready 1.0 as soon as possible. But meanwhile, please install Element X, and if you like it - tell your friends and colleagues! Perhaps leave a review on the app stores, and tell us how it feels in #element-x-ios:matrix.org and #element-x-android:matrix.org!

Finally, we’d like to thank BWI, the IT-Systemhouse of the German Armed Forces, for sponsoring much of the development of Element X, Rich Text Editor, Polls, Location Sharing, Native VoIP and more. It’s incredibly exciting to be able to truly take Element to the next level, and we’re very grateful indeed for the support.

Thanks for flying Element X!