Element Cloud Documentation

Documentation for Element and EMS by the EMS team

Element X status on EMS Cloud

This page outlines the current plan for making sliding sync (required for Element X) available for EMS cloud customers. The page will be updated if anything changes.

See the Element blog post “Element X: Ignition” for more information on Element X.

Hosts using traditional password authentication

All EMS hosts using traditional password authentication now have the sliding sync proxy and you can start using Element X.

If your host is using Custom DNS and you are not using “EMS hosts well-knowns”, you will need to update your client well-known file to enable Element X support. You will receive an email with specific instructions for your host. But, if you want to prepare, you can update your client well-known file like this:

GET https://yourcustomdoman.tld/.well-known/matrix/client

    "m.homeserver": {
        "base_url": "https://your-ems-hostname.ems.host"
    "m.identity_server": {
        "base_url": "https://vector.im"
    "org.matrix.msc3575.proxy": {
        "url": "https://your-ems-hostname.ems.host"

If you are not using Custom DNS or if you are using “EMS hosts well-knowns”, no changes are required by you.

Hosts using delegated authentication/SSO including Element One users

Unfortunately, you will not get sliding sync support right now. We are hoping to be able to offer sliding sync in the early part of 2024.

Frequently Asked Questions

Element General

Can spaces be deleted?

Spaces in Matrix are just rooms with some extra metadata. You can delete them the same way you delete rooms. If you are an EMS admin, see How do I delete a room or a space?

How do I enable guest users in a room?

Set the following settings:

Guest users only work if a native user on the default homeserver configured in your client is a member of the room. For example, to join a room on your EMS server as a guest using the client at https://app.element.io/, an account on the matrix.org homeserver must be a member of the room.

1 Guest users will technically work with encryption enabled, but guests will not be able to read any messages as they do not have the keys to decrypt them.

It's not recommended to add encryption to public rooms. Anyone can find and join public rooms, so anyone can read messages in them. You'll get none of the benefits of encryption, and you won't be able to turn it off later. Encrypting messages in a public room will make receiving and sending messages slower.

How do I get my access token?

The access token grants full access to your Matrix account. Do not share it with anyone.

My secret storage (key backup) secret key/passphrase has leaked, how do I reset and secure it again?
  1. Backup your message encryption keys, see Export and Import E2E Room Keys
  2. In Element Wed/Desktop settings, under Security & Privacy -> Secure backup, click Delete Backup repeatedly until all backup versions are deleted.
  3. Click Reset under Secure Backup.
  4. Click Reset under Cross-signing.
  5. Import the message encryption keys you backed up earlier. See Export and Import E2E Room Keys
What are the permissions required to start a video call?

In a room with more than two members, voice and video calls are done using the Jitsi integration. Users need "Modify widgets" permissions to add the Jitsi widget to the room and initiate a call.

Once the call is initiated, anyone in the room can join.

What is the preferred resolution for room and space icons?

Room and space icons can be shown in a full-screen lightbox, so the resolution should be high. The homeserver will create a smaller thumbnail that is displayed when viewing rooms and spaces normally.

Matrix General

Can encrypted messages be recovered?

If you want to restore encrypted messages to your Matrix account, you need to have access to your encryption keys that were used to encrypt those messages.

If you have lost your encryption keys, you will not be able to decrypt these messages and they will remain encrypted.

However, if you have used multiple devices to access your Matrix account and have access to the encryption keys on one of those devices, you can try using that device to decrypt messages.

Can I sign in to multiple Matrix accounts in Element Desktop?

If you have multiple Matrix accounts - for example, an EMS account and a matrix.org account - you cannot log in to both simultaneously in the Element Desktop client today. However, you can launch multiple Element instances locally via its Profiles feature.

Do you have tips for migrating between Matrix accounts?

Currently Matrix doesn't support moving communication history over homeservers. The suggested manual method is to invite your new user (for example on an EMS cloud server) over to the same rooms as your old user and give your new user the relevant power levels, if possible.

Old messages in a room will be visible to the new user depending on the room history setting. If you have a room with history open to members, you will be able to simply scroll back to read history (assuming at least one homeserver in the room has the history available locally). Note that changing the room history visibility setting for a room doesn't affect old messages in the room. For rooms where history is limited for new users in the room from "join" or "invite", there is no way to retrieve that history using a user who was not present in that rooms.

Note for encrypted rooms, please ensure to export encryption keys from your old account and import them to the new account. This will allow you to decrypt encrypted room history for messages you have access to. You can do this from the "Security & Privacy" settings in Element.

It may also make sense to export important messages to file, in cases where you cannot get access to them from your new account, for example due to room message visibility settings. Element allows you to export chat history from a room from the room context menu.

How do I add a password if my account was created using SSO?

If your account was created using SSO, for example via GitLab or Apple, and your homeserver supports multiple authentication methods for an account (matrix.org does), follow these steps to add a password to your Matrix account. Note, you will need access to the third party SSO account you used to create the account.

  1. Add an email address to your account. See Add Email to Your Account.
  2. Open a new Matrix client, for example https://app.element.io in a private/incognito browser window, then reset the password for your account. See step 3 and onwards in this guide. Note signing out all other devices when prompted is optional for this guide to work.
  3. You can now sign in to your Matrix account using either your original SSO account, or the password you just created.
How do I manually tombstone a room?

This can only be done by room admins (by default). This action cannot be undone.

What characters can I use in my username/localpart?

Your Matrix username/localpart can only contain lower case letters, numbers, and the characters . _ = - /.

What is an Identity Server, and how does it work?

The best response to 'What is an Identity Server' is detailed in section 2. of the vector.im Identity Server privacy policy, available here: https://element.io/is-privacy-notice.

New Vector runs two identity servers, one at matrix.org and another at vector.im. These servers run in a closed federation - this means that if you add (or remove) your data from one, it is added to (or removed from) the other automatically, too.

The behavior and role of Identity Servers are changing. Historically, Identity Servers provided three sets of functionality:

  1. They let users publish their third-party identifiers (email/telephone number) to a directory to allow other Matrix users to discover them.
  2. Letting users send invites to a Matrix chat room to an email address instead of a Matrix ID.
  3. Letting homeservers send emails/SMS text messages to verify that they belong to a given Matrix user so that the user can log in to the homeserver using a third-party identifier instead of a Matrix ID.

Identity Servers continue to provide the functionality described in 1. However, the features described in 2. and 3. are now provided by the homeserver instead and will be deprecated and phased out of the Identity Server in the future.

For a period in 2019, while privacy functionality was being enhanced on vector.im and matrix.org, these Identity Servers were restricted to only provide services for users on New Vector homeservers. Once privacy improvements landed, this restriction was lifted.

Element Matrix Services

Account Management

Can I migrate from Element One to Element Home/Cloud?

Unfortunately, Element One and Home are different products and do not currently have an upgrade path. You can set up an Element Home/Cloud host, then manually invite your new Element Home account to all rooms from your Element One account. Bridged rooms have to be manually re-bridged from your Home host.

The same applies to migration from Element Home/Cloud to Element One.

How do I enable 2FA on my EMS account?

Please note:

Please discontinue my account

It is best if EMS customers delete their host or account themselves. Here's how:

Delete the host from the host management page at https://ems.element.io/user/hosting by clicking the Delete host button (and confirming deletion in the resulting dialog). This will delete the host and cancel all associated subscriptions.

You can manage or cancel your Element One subscription on https://ems.element.io/user/hosting#/elementone.

Or delete the EMS account entirely. This is done from the user account page https://ems.element.io/user/account by clicking on the Delete account button and confirming. This will delete all hosts and subscriptions before removing the user's account.


Bots? What's the reason for using them?

Bots allow you to get information and perform actions in line with your chat. There are a bunch that can be found at https://matrix.org/docs/projects/bots/.

Can I host my own Telegram bridge?

Unfortunately, you are not currently able to host your own bridges to work with your EMS-hosted homeserver. As of December 2020, we have added a Telegram bridge to EMS. See our blog post: EMS brings more interoperability to messaging.

If you have federation enabled for your homeserver, you can also bridge into publicly accessible rooms, such as https://t2bot.io/, or integrations available on public homeservers such as matrix.org.

Do DMs count towards the 20-channel limit for the paid Slack bridge?

Yes, but we're currently reviewing the bridging pricing models, and soon we'll likely be offering Slack (as well as all of our other bridges) on a usage basis rather than on a room/workspace capped basis.

When this launches, existing customers will be able to stay on their existing plan or choose to move to the new model.

How do I add a GitHub integration?

To create a GitHub integration in a room, click on the i icon at the top right, accept the privacy policy, click Add widgets, bridges & bots, click Add integrations and select GitHub from the Bots list. When prompted, log in to GitHub and select the repositories and functions you want.

Note that your server needs to have federation enabled for integrations to work.

How do I add RSS integration to my Matrix server?

To create RSS integration in a room, click on the i icon at the top right, accept the privacy policy, click Add widgets, bridges & bots, click Add integrations and select RSS Bot from the Bots list. Then, enter the RSS URL and click Subscribe.

Note that your server needs to have federation enabled for integrations to work.

How do I bridge to Libera Chat IRC rooms with more than 100 users?

Please talk to your account manager, or open a support ticket by emailing support@matrix.org. The bridge team will consider requests on a case-by-case basis.

What is the difference between the free and paid Slack bridge?

They're mostly the same. The big difference is that the free one doesn't bridge DMs / puppet your account. See also Do DMs count towards the 20 channel limit for the paid Slack bridge?

With Jitsi video conferencing, how is the data being transferred?

Jitsi conferencing data goes directly from the browser to the Jitsi server, and it does not use the Matrix protocol. If you add a Jitsi widget to a room, that widget will be stored in the room state as Matrix events, but the Jitsi communication itself is from the client to the Jitsi server used.


Are all my messages stored on my homeserver?

Messages are stored on your server. However, if you are communicating with users registered on other servers, then relevant messages/events will also exist on their server.

How do I send "System Alerts" or post from the @server user?

The web console has a form to do this. "System status messages" - You can use this form to send messages to all users of your server. For example, this could be used to send "messages of the day", or important policy updates, etc.

How do I update External IDs for my users?

When managing SSO integrations, you might need to edit the external IDs for your Matrix users. This can be done using the Synapse Admin API. You can follow this knowledge base page for further details, How do I migrate to SSO while keeping my original accounts?.

Is there a maximum file size per upload?

The file upload limit for EMS hosts is currently set at 100MB.

What are the benefits of paying for an EMS homeserver?

EMS aims to take the hassle out of hosting and managing your own Matrix stack. There is a significant technical overhead (in terms of technical knowledge required) as well as ongoing time and resources to ensure that your server continues running and is kept up to date with all of the latest security updates etc. With EMS, you don't have to worry about that, as it is all taken care of for you at the touch of a button.

We also provide a (growing) suite of proprietary host administration tools in the form of the EMS Synapse admin dashboard to help give you better insight and control of your server.

What are the limitations in terms of storage?

We’ve shied away from hard limits for storage and instead adopted a fair use policy. If you use the server for business conversations and share a few images as part of your discussions, you will never have problems. However, if you share thousands of images daily per user, you will hit a limit.

Pricing & Payment

Do you offer other payment options like PayPal, Crypto, or IBAN/SEPA?

Currently, we only accept Credit or Debit/bank account cards as payment. "Debit cards" should work with any regular bank account.

How do I update my payment info?

To update your payment info, go to https://ems.element.io/user/billing. From here, you can update your payment details.

If I join a room with a lot of external users from my homeserver, will I be charged for those?

No, you are only ever charged for users that are registered on your server and who have been active for more than two days in a month. These users make up your Monthly Active User (MAU) total. Users that are registered on other servers (that you communicate with over federation), guest users, and users who are only briefly active on your server are not counted.

Server Configuration & Management

Are custom appservices supported?

Uploading custom (YAML) registration files for appservices is not currently supported for EMS hosts.

We are actively working on improving bridging support for EMS hosts and hope that this will be something that you see substantial improvement in over the coming months.

Are you able to use a custom domain like "matrix.example.com"?

Yes, absolutely! However, you need to set this at host creation time as the homeserver name is "baked in" to all of the events that the homeserver creates.

You can set both the homeserver name, e.g., example.com (so your Matrix user IDs would be of the form @foo:example.com), and your (Element) client address, which might be something like webchat.example.com. However, to prove that you own the domain in question, you will need to place some JSON / text into two well-known files on the webserver for your domain. In the setup wizard, you will be guided through this process when setting up the custom domain for your server.

Can I add all my users to a Space by default?

Yes, this is available for Gold and Enterprise customers. Please talk to your Account Manager or open a support ticket.

Can I change the default room notification level for my users?

This is currently not possible, unfortunately.

Can I customize the Element web login page?

Yes, you can modify the look and feel of your client to suit you.

Please see our blog article on custom branding for your Element instance here https://element.io/blog/custom-branding/ and Client Look & Feel for more details.

You will be able to enter the customization preferences from the managed host page of your EMS account - https://ems.element.io/user/hosting.

Can I use a subdomain instead of the root domain with my EMS server?

Yes. However, this is not recommended. For the same reason your email address probably is not someone@email.example.com, you probably don't want your Matrix IDs to be @someone:matrix.example.com.

Please see https://element-hq.github.io/synapse/latest/setup/installation.html#choosing-your-server-name for additional details on your server name.

Can I use EMS-hosted well-knowns with the root of my domain?

Yes, you can, but there are some limitations:

CNAME and .well-known?

The client file needs to contain:

    "m.homeserver": {
        "base_url": "https://yourEMShost.ems.host"
    "m.identity_server": {
        "base_url": "https://vector.im"

The server file needs to contain:

    "m.server": "yourEMShost.ems.host:443"
CNAME doesn't work with Cloudflare?

You can use the CNAME with CloudFlare, but you have to change the Proxy status to DNS only.

Could you expand on "over federation"?

If you have federation turned on in your server configuration, you are able to communicate with users registered on other servers (e.g., matrix.org).

You are only ever charged for users that are registered on your server and who have been active for more than two days in a month. These users make up your Monthly Active User (MAU) total. Users that are registered on other servers (that you communicate with over federation), guest users, and users who are only briefly active on your server are not counted.

DNS is not resolving

This problem is most likely caused by a delay in DNS replication downstream of your DNS servers.

How can I manage my #general room?

You can gain admin permissions in this room by calling this Synapse Admin API or by contacting EMS Support at https://ems.element.io/support.

Gold and Enterprise customers can also request changes to the list of default rooms their users are automatically added to.

How do I change the name/brand of the Element Web client?

You can rename the Element client from Element to for example Company Chat with the Client name field on https://ems.element.io/user/hosting#/hosts. See Client Look & Feel for additional details.

How do I change the server's custom domain?

You can only set a custom domain name for a server at setup time. This is because the server's domain name is "baked-in" to all of the events generated by the server.

So, you would need to deprovision an existing server and create a new one, selecting your custom DNS preferences from the advanced settings section of host setup configuration if you wish to change the current host DNS.

How do I delete a room or a space?

Go to https://ems.element.io/user/hosting#/admin, click Rooms, and find the room or space you want to delete. Then click the button to delete it.

How do I delete users when administering the server?

You can deactivate users from the admin dashboard for your host at https://ems.element.io/user/hosting.

Select the Server Admin tab and then the User Info sub-tab. From here, you can search for the relevant user and hit the Deactivate account button.

How do I enable the public room directory?

The public room directory is enabled on your EMS server if both Federation and Guest users are enabled.

How do I reactivate a user?
How do I migrate from EMS to self-hosted if I choose to do so in the future?

Currently, the process of migrating away is manual. However, we hope to have an automated, self-serve system in the not too distant future. For the time being, if you wish to migrate away, please email ems-support@element.io (while your EMS server is still up and running) and ask for a snapshot of your Synapse database. We will then generate a snapshot for you and create a link to download the data. You can then use this to restore the database / Synapse instance on your own infrastructure.

Note that migrating from EMS to self-hosted is only possible if you use your own domain (Custom DNS) with your EMS server.

I deleted my host, now my server name is taken, and I cannot rebuild

This is part of a security measure. We generally prevent hosts from returning to the pool after they were initially claimed to prevent people from attempting to imitate old servers/users. Contact support from https://ems.element.io/support while signed in to get the hostname released.

Online users are displayed as offline?

Unfortunately, we are not able to offer user presence as a feature at the moment. This is due to potential performance impact and excess resource usage on hosts when this feature is enabled. The Synapse team is aware of this, and it is on their roadmap to address. However, we do not currently have a timeline for when it will be available again.

What does "Include bridged accounts" on the user management page mean?

When you bridge to external services, external users get an "appservice user" on your EMS server. If you have any bridges and check this checkbox, users from across your bridges will also be shown.

Element Matrix Services

Element Matrix Services

Add Additional Users

  1. Click Your Account and Manage Servers or click this link https://ems.element.io/user/hosting.
  2. Click the Hosts tab.
  3. Change Total Monthly Active User Seats to the number of users you want and click Save at the bottom.
    • Note that you cannot decrease your user count later.

For server on our legacy plans, Say you want a total of 10 Monthly Active Users on your EMS Nickel server. Add 5 in the Additional users field. Then click Save.

Element Matrix Services

Add Users

  1. Click Your Account and Manage Servers or click this link: https://ems.element.io/user/hosting

  2. Click Server Admin

  3. Select your host

  4. Click Add user Enter the username and click Add

  5. Select Make new user server admin if you want this user to be able to use the Synapse Admin API to perform administrative tasks on your server. Be careful with this as this option has a lot of power on your server.

  6. The username and password for the new user is displayed. You will only be able to see this information once so send the password to the user in a secure manner and then delete it

Element Matrix Services

Apply coupon/discount

Coupons can only be applied by new customers before purchasing any products. However, if you are an existing customer and want to add a coupon, please contact support at https://ems.element.io/support.

Terms and Conditions apply. See the page for your coupon or ask your Element contact or support.

Element Matrix Services

Client Look & Feel

This feature allows you to customize the home and welcome page on your EMS-provided Element Web client.

Blog posts

See also our blog posts on the subject:

Create home and login template

  1. Create the files you want to use.

    1. Edit ems_home.html. This can be as simple as a couple of lines of HTML, for example:

      <h1>Snow Leopard LTD</h1>
      <h2>Rooms to join</h2>
          <li><a href='/#/room/#welcome:snowleopard-staging.ems.host'>Welcome to Demo web chat (#welcome)</a></li>
          <li><a href='/#/room/#support:snowleopard-staging.ems.host'>Support (#support)</a></li>
          <li><a href='/#/room/#offtopic:snowleopard-staging.ems.host'>Off topic conversation (#offtopic)</a></li>

      You can also add a more complex HTML and styling.

    2. It looks like this in your web browser:

    3. Edit ems_welcome.html. This is a bit more complex, but it can be almost anything you want as long as it has links to Log in (/#/login) and Create account (/#/register). The default design is based on this template. You can get creative with the CSS and the !important tag.

      Click to see ems_welcome contents

      The only change I made from the template is adding <p>This is some demo text!</p> on line 177.

      <style type="text/css">
      /* we deliberately inline style here to avoid flash-of-CSS problems, and to avoid
      * voodoo where we have to set display: none by default
      h1::after {
          content: "!";
      .mx_Parent {
          display: -webkit-box;
          display: -webkit-flex;
          display: -ms-flexbox;
          display: flex;
          -webkit-box-orient: vertical;
          -webkit-box-direction: normal;
          -webkit-flex-direction: column;
          -ms-flex-direction: column;
          flex-direction: column;
          -webkit-box-pack: center;
          -webkit-justify-content: center;
          -ms-flex-pack: center;
          justify-content: center;
          -webkit-box-align: center;
          -webkit-align-items: center;
          -ms-flex-align: center;
          align-items: center;
          text-align: center;
          padding: 25px 35px;
          color: #2e2f32;
      .mx_Logo {
          height: 54px;
          margin-top: 2px;
      .mx_ButtonGroup {
          margin-top: 10px;
      .mx_ButtonRow {
          display: -webkit-box;
          display: -webkit-flex;
          display: -ms-flexbox;
          display: flex;
          -webkit-justify-content: space-around;
          -ms-flex-pack: distribute;
          -webkit-box-align: center;
          -webkit-align-items: center;
          -ms-flex-align: center;
          align-items: center;
          justify-content: space-between;
          box-sizing: border-box;
          margin: 12px 0 0;
      .mx_ButtonRow > * {
          margin: 0 10px;
      .mx_ButtonRow > *:first-child {
          margin-left: 0;
      .mx_ButtonRow > *:last-child {
          margin-right: 0;
      .mx_ButtonParent {
          display: -webkit-box;
          display: -webkit-flex;
          display: -ms-flexbox;
          display: flex;
          padding: 10px 20px;
          -webkit-box-orient: horizontal;
          -webkit-box-direction: normal;
          -webkit-flex-direction: row;
          -ms-flex-direction: row;
          flex-direction: row;
          -webkit-box-pack: center;
          -webkit-justify-content: center;
          -ms-flex-pack: center;
          justify-content: center;
          -webkit-box-align: center;
          -webkit-align-items: center;
          -ms-flex-align: center;
          align-items: center;
          border-radius: 4px;
          width: 150px;
          background-repeat: no-repeat;
          background-position: 10px center;
          text-decoration: none;
          color: #2e2f32 !important;
      .mx_ButtonLabel {
          margin-left: 20px;
      .mx_Header_title {
          font-size: 24px;
          font-weight: 600;
          margin: 20px 0 0;
      .mx_Header_subtitle {
          font-size: 12px;
          font-weight: normal;
          margin: 8px 0 0;
      .mx_ButtonSignIn {
          background-color: #368BD6;
          color: white !important;
      .mx_ButtonCreateAccount {
          background-color: #0DBD8B;
          color: white !important;
      .mx_SecondaryButton {
          background-color: #FFFFFF;
          color: #2E2F32;
      .mx_Button_iconSignIn {
          background-image: url('welcome/images/icon-sign-in.svg');
      .mx_Button_iconCreateAccount {
          background-image: url('welcome/images/icon-create-account.svg');
      .mx_Button_iconHelp {
          background-image: url('welcome/images/icon-help.svg');
      .mx_Button_iconRoomDirectory {
          background-image: url('welcome/images/icon-room-directory.svg');
      .mx_WelcomePage_loggedIn is applied by EmbeddedPage from the Welcome component
      If it is set on the page, we should show the buttons. Otherwise, we have to assume
      we don't have an account and should hide them. No account == no guest account either.
      .mx_WelcomePage:not(.mx_WelcomePage_loggedIn) .mx_WelcomePage_guestFunctions {
          display: none;
      .mx_ButtonRow.mx_WelcomePage_guestFunctions {
          margin-top: 20px;
      .mx_ButtonRow.mx_WelcomePage_guestFunctions > div {
          margin: 0 auto;
      @media only screen and (max-width: 480px) {
          .mx_ButtonRow {
              flex-direction: column;
          .mx_ButtonRow > * {
              margin: 0 0 10px 0;
      <div class="mx_Parent">
          <a href="https://element.io" target="_blank" rel="noopener">
              <img src="welcome/images/logo.svg" alt="" class="mx_Logo"/>
          <h1 class="mx_Header_title">_t("Welcome to Element")</h1>
          <!-- XXX: Our translations system isn't smart enough to recognize variables in the HTML, so we manually do it -->
          <h4 class="mx_Header_subtitle">_t("Decentralised, encrypted chat &amp; collaboration powered by $matrixLogo")</h4>
          <p>This is some demo text!</p>
          <div class="mx_ButtonGroup">
              <div class="mx_ButtonRow">
                  <a href="#/login" class="mx_ButtonParent mx_ButtonSignIn mx_Button_iconSignIn">
                      <div class="mx_ButtonLabel">_t("Sign In")</div>
                  <a href="#/register" class="mx_ButtonParent mx_ButtonCreateAccount mx_Button_iconCreateAccount">
                      <div class="mx_ButtonLabel">_t("Create Account")</div>
              <!-- The comments below are meant to be used by Ansible as a quick way
                  to strip out the marked content when desired.
                  See https://github.com/element-hq/element-web/issues/8622.
                  TODO: Strip out these comments and rely on the guest flag -->
              <!-- BEGIN Ansible: Remove these lines when guest access is disabled -->
              <div class="mx_ButtonRow mx_WelcomePage_guestFunctions">
                      <a href="#/directory" class="mx_ButtonParent mx_SecondaryButton mx_Button_iconRoomDirectory">
                          <div class="mx_ButtonLabel">_t("Explore rooms")</div>
              <!-- END Ansible: Remove these lines when guest access is disabled -->
    4. It looks like this in your web browser: