Older documentation

This documentation hasn't been updated in a while. Some information might no longer be valid.

There may be more up to date information in the new documentation section.

FAQ

Frequently Asked Questions

Intro

Basics

What is Matrix?

Matrix is an open standard for interoperable, decentralised, real-time communication over IP. It can be used to power Instant Messaging, VoIP/WebRTC signalling, Internet of Things communication - or anywhere you need a standard HTTP API for publishing and subscribing to data whilst tracking the conversation history.

The Matrix.org Foundation defines the standard, and provides open source implementations of Matrix-compatible Servers, Client SDKs and Application Services to help you create new communication solutions or extend the capabilities and reach of existing ones.

What is Matrix's mission?

Matrix’s initial goal is to fix the problem of fragmented IP communications: letting users message and call each other without having to care what app the other user is on - making it as easy as sending an email.

The longer term goal is for Matrix to act as a generic HTTP messaging and data synchronisation system for the whole web - allowing people, services and devices to easily communicate with each other, empowering users to own and control their data and select the services and vendors they want to use.

What does this mean for users?

The aim is to provide an analogous ecosystem to email - one where you can communicate with pretty much anyone, without caring what app or server they are using, using whichever client app & server you chose, and use a neutral identity system like an e-mail address or phone number to discover people to talk to.

Why are you called Matrix?

We are called Matrix because we provide a structure in which all communication can be matrixed together.

No, it’s nothing to do with the film (although Third Room builds virtual worlds on top of Matrix 😎).

What does Matrix provide?

Who and how?

What kind of company is Matrix.org?

The Matrix.org Foundation is a non-profit UK Community Interest Company, incorporated to act as the neutral guardian of the standard on behalf of the whole Matrix community. It is an open initiative which acts as a neutral and independent custodian of the Matrix standard.

The Foundation defines the manifesto, mission and values of the project, the open governance process that determines how the specification develops, and provides a safety-net to ensure the project stays independent and true to its goals.

How is Matrix.org funded?

Matrix.org is currently funded by the community, through a combination of community support (via Patreon, [Liberapay] (https://liberapay.com/matrixdotorg), Bitcoin and Ethereum), corporate sponsorship, and grant funding.

Current Elliptic-level supporters on Patreon and corporate sponsors can be found on our supporters page.

If you would like to support the core Matrix team as a member of the community, you can do so via:

If you would like to sponsor the team as a corporation, or are interested in paying for prioritised or custom development, please get in touch .

For the first three years of Matrix's development (2014-2017), most of the core contributors worked for Amdocs, who paid for them to work fulltime on Matrix. In July 2017, Amdocs considered the project to be sufficiently successful that it could now self-support and so stopped funding. The majority of the core team is now employed by Element , an independent company set up to hire the team and support Matrix's development. Other contributors are funded by their own employers or donate their own time to the project.

Who is building Matrix?

The core team is ~12 people with extensive experience in building custom VoIP and Messaging apps for mobile network operators. Most of us work for Element, but there are an increasing number of contributors from other companies and folks all over the internet.

Concept

Why have you released this as open source?

We believe that any open standard defining interoperable communication needs to be justified, demonstrated and validated with transparent open source implementations. For Matrix to achieve its mission of making all communications services interoperable we believe it needs to be truly open, giving people access to take all the code we produce and to use and build on top of it.

What do you mean by open?

Matrix is an open standard, meaning that we have freely published the details for how to communicate interoperably using the Matrix set of HTTP APIs. We encourage anyone and everyone to use the APIs and build their own projects which implement them and so benefit from interoperability with the rest of the Matrix ecosystem. We also ensure the standard is not encumbered by any known patent licensing requirements.

Matrix is also open source, meaning that we have released the source code of the reference servers, clients and services to the public domain under the Apache Licence v2, to encourage anyone and everyone to run their own servers and clients, and enhance them and contribute their enhancements as they see fit.

What does federated mean?

Federation allows separate deployments of a communication service to communicate with each other - for instance a mail server run by Google federates with a mail server run by Microsoft when you send email from @gmail.com to @hotmail.com.

interoperable clients may simply be running on the same deployment - whereas in federation the deployments themselves are exchanging data in a compatible manner.

Matrix provides open federation - meaning that anyone on the internet can join into the Matrix ecosystem by deploying their own server.

How is this like e-mail?

The history of email is instructive when thinking about the importance of interoperability.

Early email systems behaved as isolated communities which only allowed you to exchange mail with users on the same system. If you got your email from one service and your friend from another, then you couldn't message each other. This is basically the situation we're in today with VoIP and IM.

Why has no one done this before?

There have been several attempts before including RCS.

All of these have had some level of success, but many different technological/usability/economic factors have ended up limiting their success. Unfortunately, we've not ended up in a world where everyone has a SIP URI or Jabber ID on their business card, or a phone that actually uses RCS.

Take a look at the Comparisons section for a more detailed look at how Matrix compares to other projects.

Practical

What can I actually do with this?

A typical client provides a simple chatroom interface to Matrix - letting the user interact with users and rooms anywhere within the Matrix federation. Text and image messages are supported, as well as voice and video calling via WebRTC in one-to-one rooms and via Jitsi elsewhere.

How can I get involved?

There are plenty of ways to get involved. First, create a user account and come say hi on #matrix:matrix.org!

Then...

See our contributor guide for full details on how to contribute to the project. All are welcome!

Where can I get support?

The point of entry for everything matrix is #matrix:matrix.org aka #matrix on irc.libera.chat.

If you're a developer and are looking to get involved with building something on Matrix, try #matrix-dev:matrix.org.

If you host a Synapse homeserver, you can get support in the #synapse:matrix.org room.

You can link to a Matrix room or user by going to matrix.to , and typing in the room alias or ID for linking to rooms, or a user's Matrix ID for linking to users. There is also a matrix: URL scheme for Matrix rooms and users, similar to email's mailto: scheme, or XMPP's xmpp: scheme.

Usage

As a user

What clients are available?

There are many clients available, ranging from the glossy mass-market to the geeky command-line. There's even an emacs macro.

The most popular and established client is Element, available on web, desktop, Android and iOS.

To get a list of all the clients we're aware of, head to the clients page

What bridges to other networks are available?

There are a large number of 'bridges' which integrate existing communication networks into Matrix. This list is growing rapidly, and you can find bridges both written by the Matrix core team and contributed by the wider community. We maintain a list of all the bridges we heard about.

How do I get an account and get started?

The quickest way is to pick a client and sign up.

Clients can access any homeserver—you don't have to use matrix.org, though historically it is the largest public homeserver. anchel.nl lists free public homeservers, and a few other resources for getting started.

How can I get a rooms list from matrix.org?

If you're using Element, you can use the "Explore" screen, which you open from a button next to the search box on the right.

It you're working on a client, you can use the Client-Server API to get a list of public rooms.

Tech

How do I Matrix-enable my existing app?

If your app doesn't have any communication capability already, you'll want to use one of the Matrix client SDKs to add it in. These come in different levels of sophistication - ranging from a simple HTTP API wrapper through to reusable UI components.

Can I write a Matrix homeserver?

Yes. Matrix is just a spec, and implementations of the spec are very welcome! Synapse is the most well-distributed homeserver, but Dendrite and Conduit are other projects aiming to implement the server component.

Why HTTP? Isn't it bad? Why don't you use websockets/CoAP/HTTP2/etc?

HTTP may not be the most efficient transport, but it is ubiquitous, very well understood and has numerous implementations on almost every platform and language. It also has a simple upgrade path to HTTP/2, which is relatively bandwidth and round-trip efficient.

For these reasons it has been chosen as the mandatory baseline of the exchange, but it is still entirely possible to use other protocols for communication between clients and server (see for example this websocket transport spec proposal), and it's also possible in the future that negotiation of more efficient protocols will be added for the federation between servers, with HTTP+JSON remaining as the compatibility baseline.

Self-hosting

How do I join the global Matrix federation?

You can choose a client and create a user account on an existing homeserver.

To host your own, start by looking at recommended guides for installing Synapse.

Can I run my own identity server?

See also: What is an identity server?

Yes - the reference implementation is sydent and you can run your own ID server cluster that tracks 3rd party to Matrix ID mappings. This won't be very useful right now, though, and we don't recommend it.

If you want your server to participate in the global replicated Matrix ID service then please get in touch with us. Meanwhile, we are looking at ways of decentralising the 'official' Matrix identity service so that identity servers are 100% decentralised and can openly federate with each other. N.B. that you can use Matrix without ever using the identity service - it exists only to map 3rd party IDs (e.g. email addresses) to matrix IDs to aid user discovery.

Why can't I rename my homeserver?

Currently, the homeserver name is assumed never to change. This means that if you rename your server, other servers will think it's a different server.

Perhaps in the future we will add an API for changing the homeserver name, but for now this is not supported.

Detail

Position in the world

Why do you think existing apps will ever join this officially?

We firmly believe it is what is right for the consumer. As people begin to use interoperable communications tools, service providers will see the benefit and compete on quality of service, security and features rather than relying on locking people into their walled garden. We believe as soon as users see the availability and benefits of interoperable services they will demand it.

Why aren't you doing this through the IETF? or W3C? or 3GPP?

We do recognise the advantages of working with existing standards bodies. We have been focused on writing code and getting it out, and the standard has been evolving rapidly since initial release in September 2014. Once the standard has matured sufficiently it may well be appropriate to work with an official standard body to maintain it going forwards.

What is the current project status?

A very quick recap by-the-numbers (updated May 2020):

As of September 2019, the Matrix ecosystem has dozens of independent homeserver hosts, many bridges and is under active development.

Why Apache Licence?

See also: What do you mean by open?

The Apache Licence is a permissive licence. We want the Matrix protocol itself to be free and open, but people are free to create both free and commercial apps and services that uses the protocol. In our opinion, any Matrix-service only enhances the Matrix ecosystem.

Comparisons

What is the difference between Matrix and IRC?

We love IRC. In fact, prior to the point where Element was stable enough for daily use IRC was our primary communication tool. Between us we've written IRCds, IRC bots and admined dreamforge, UnrealIRCd, epona, ircservices and several others. That said, it has some limitations that Matrix seeks to improve on:

IRCv3 exists and is addressing some of these issues; this is great news and we wish them well. It's almost a contradiction in terms to get competitive between openly interoperable communication projects - in fact there there already exist mature Matrix-IRC bridges. matrix-appservice-irc is currently used to bridge with Libera.Chat and many other IRC networks.

What is the difference between Matrix and XMPP?

We think of Matrix and XMPP as being quite different; at its core Matrix can be thought of as an eventually consistent global JSON database with an HTTP API and pubsub semantics - whilst XMPP can be thought of as a message passing protocol. You can use them both to build chat systems; you can use them both to build pubsub systems; each comes with different tradeoffs. Matrix has a deliberately extensive 'kitchen sink' baseline of functionality; XMPP has a deliberately minimal baseline set of functionality. If XMPP does what you need it to do, then we're genuinely happy for you! Meanwhile, rather than competing, an XMPP Bridge like Matrix.org's own purple-matrix has potential to let both environments coexist and make the most of each other's benefits.

The whole area of XMPP vs Matrix is quite subjective. Rather than fighting over which open interoperable communication standard works the best, we should just collaborate and bridge everything together. The more federation and interoperability the better.

How does Matrix compare with something like Trillian or Pidgin?

Trillian and Pidgin and similar aggregating IM clients merge all your IM activity into a single app. However, your history and identity is still fragmented across the networks. People can't find you easily, and your history is fragmented (other than on the device where the client runs). And rather than being able to chose the right app for the job when communicating with people, you are pushed towards relying on a specific aggregation app.

Matrix lets you get the best of both worlds by linking to all the different networks (XMPP, AIM, ICQ, Lync, Skype etc) on the serverside, using bridges which can be run by anyone. Matrix then provides a simple standard HTTP API to access any of these networks, and lets you choose whichever client you prefer (either as a 'native' Matrix client or using a non-Matrix client from one of the networks which has been bridged in).

More Detail

What is a client?

Users in Matrix use one or more clients to communicate. This could be any combination of a web client, a command line client, a mobile client - or embedded clients built into existing apps. It could even be a piece of hardware (e.g. a drone) that is Matrix enabled.

Can I use Matrix without installing a Matrix client?

Yes! An ever increasing number of protocols are being bridged into Matrix, so if you use something like IRC on Libera.Chat you may well be indirectly benefiting from Matrix, as others may be connected into the IRC channel via Matrix.

What is a homeserver?

A user's client connects to a single homeserver, which stores the communication history and account information for that user, and shares data with the wider Matrix ecosystem by synchronising communication history with other homeservers.

What is a MXID?

Matrix user IDs (MXID) are unique user IDs. They are in the format @username:homeserver.tld (this format is used to avoid confusing them with email addresses.) They are intended to be fairly hidden (although right now they are not) - instead you will find and identify other users via 3PIDs.

What is a 3PID?

Third-party IDs (3PIDs) are IDs from other systems or contexts, such as email addresses, social network accounts and phone numbers.

What is an identity server?

Users in Matrix are identified internally via their 3PID namespaces such as email addresses or phone numbers should be used publicly to identify Matrix users, at least for invitation purposes. A Matrix "Identity" describes both the user ID and any other existing IDs from third party namespaces linked to their account.

Matrix users can link third-party IDs (3PIDs) to their user ID. Linking 3PIDs creates a mapping from a 3PID to a user ID. This mapping can then be used by Matrix users in order to discover the MXIDs of their contacts.

In order to ensure that the mapping from 3PID to user ID is genuine, the intention is for a globally federated cluster of trusted "Identity Servers" (IS) be used to verify the 3PID and persist and replicate the mappings. Usage of an IS is not required in order for a client application to be part of the Matrix ecosystem. However, without one clients will not be able to look up user IDs using 3PIDs.

The precise architecture of identity servers is currently in flux and subject to change as we work to fully decentralise them.

Where do my conversations get stored?

Each replicated across all of the homeservers whose users are participating in a given room.

What are redactions?

Since events are extensible it is possible for malicious users and/or servers to add keys that are, for example offensive or illegal. Since some events cannot be simply deleted (e.g. membership events) we instead 'redact' events, essentially stripping the event of all keys that are not required by the protocol. Redacting an event cannot be undone, allowing server owners to also delete the offending content from the databases.

Can I log into other homeservers with my username and password?

Currently, no. We are looking at options for decentralising or migrating user accounts between multiple servers, and might add this feature at a later stage.

What are spaces?

Spaces are a collections of rooms. #community:matrix.org is the official matrix community space containing rooms managed by the core Matrix team.

Spaces are the replacements for the deprecated communities which were also known as groups. Other than groups a space itself is a Room

Architecture

How does Matrix actually work architecturally?

For an introduction to the Matrix architecture, see https://spec.matrix.org/latest/#architecture.

What is a room?

For a more thorough introduction see: https://spec.matrix.org/latest/#room-structure.

A room is a conceptual place where users can send and receive events. Events are sent to a room, and all participants in that room with sufficient access will receive the event.

Bridging

Why don't you use separate homeserver instances to improve bridging performance?

For example:

Is there any merit in a proposal that the current matrix.org Freenode bridge could be taken off matrix.org and put on a new HS (at a new server-name domain such as freenode.matrix.org) so as to not be bogged down in performance?

The Matrix.org Foundation currently runs one homeserver: matrix.org. This homeserver is operationally intensive and can sometimes suffer from slow response times. However running two homeservers would not improve performance, because the work done to maintain one homeserver would need to be duplicated. Also, the traffic on the bridge instance would be intensive just by itself. Running two intensive homeservers, where optimisations such as caching and federation traffic batching would need to be duplicated would have a marked decrease in overall performance.

Running the bridge on another homeserver means the same traffic will be hitting matrix.org, except it now has to be handled by the federation inbound workers too. Now you have two hosts handling the same amount of traffic. You might see a benefit to federated homeservers, but the new homeserver will struggle just as much with inbound/outbound federation slowness as it does now with bridging.

Further, it may turn out that the ongoing work on Synapse to introduce shared master processes actually makes it so much more efficient that whole benefit of creating two homeservers is now moot.

Encryption

What does End-to-End (E2E) encryption mean?

End-to-End encryption describes a scenario where a message is encrypted at the device or client of the sender, and is only decrypted by the device or client of the receiver, with no decryption or reading performed on the server.

What is the status of E2E?

End-to-End Encryption is fully supported in Matrix. New rooms have encryption enabled by default, and all existing rooms can optionally have End-to-End Encryption turned on.

Which matrix clients support E2E?

Head to the clients section to get an up to date overview of what features they support (including E2EE).

Why are large public rooms like #matrix:matrix.org not encrypted?

There is no value in encrypting public rooms. If anyone can join the room then encryption does not protect the contents, and may offer inconvenience for some users.

The Spec

What is The Spec?

The Matrix Specification describes and prescribes the interaction between Application Services and more.

The spec is available to read on matrix.org.

To contribute to the development of the Matrix Specification, see https://spec.matrix.org/proposals/.

Where is The Spec?

You can view the spec at https://spec.matrix.org.

How can I contribute to The Spec?

To contribute to the Matrix Specification, first take a look at the documentation as it is currently written, then review the process for new proposals. You should start by writing a publicly-accessible proposal describing your change.

To see the proposals currently under discussion,join us in #matrix-spec:matrix.org.

What is the process for adding Spec proposals?

See the documentation at https://spec.matrix.org/proposals. In summary:

What's an MSC?

"MSC" refers to Matrix Spec Change, each proposal is assigned an MSC number to make referencing them easier.

MSC numbers are taken from GitHub issues on the matrix-doc repo. To see a list of all active MSCs, and to understand how to contribute your own, see https://spec.matrix.org/proposals.

VoIP

How do you do VoIP calls on Matrix?

Voice (and video) over Matrix uses the WebRTC 1.0 standard to transfer call media (i.e. the actual voice and video traffic). Matrix is used to signal the establishment and termination of the call by sending call events, like any other event.

Are VoIP calls encrypted?

WebRTC encrypts the media that's being sent. The signalling events that set up (and end) the call are encrypted if the room they were sent in has enabled encryption.

Do I need a TURN server?

VoIP calls should work if both parties are on public networks. However, in practice one (or both) devices are often behind NAT, and so having a TURN server is important to help set up the call.

See this guide for setting up a TURN server with Synapse.

Synapse

What is Synapse?

Synapse is a Matrix "homeserver" implementation developed by the matrix.org core team, written in Python 3/Twisted. It is intended to showcase the concept of Matrix and let folks see the spec in the context of a codebase and let you run your own homeserver and generally help bootstrap the ecosystem.

How do I install Synapse?

Take a look at the Synapse Installation Guide. There are options for installing using docker and/or ansible, plus manual installation instructions.

Will Synapse share my chat data with other servers in the federation?

Federation in Matrix means that data is only shared between servers of participating users of a room. If all users in a room are on your server, no data is shared with other servers.

Why is the state_groups_state table so large? What is it storing?

Room state takes up a lot of space! To be specific, regular snapshots are taken of room states, so you can rapidly find out the state for historical events.

Why is it so important to record this, and to know the past room state including full member list?

It's needed to enable access control and state resolution, for example the homeserver needs to be able to decide:

Definitions

TermDefinition
ClientUsers in Matrix use one or more clients to communicate. This could be any combination of a web client, a command line client, a mobile client - or embedded clients built into existing apps. It could even be a piece of hardware (e.g. a drone) that is Matrix enabled.
matrixed togetherIn mathematics, a matrix is a lattice-like arrangement, in which expressions can be combined and treated as a single entity
homeserverEach account in the Matrix federation is associated with a single homeserver. The software running at this server stores the history and account information for that user. Homeservers synchronise message history with other homeservers.
SynapseSynapse is a homeserver implemented in Python by the matrix.org core team. It is currently by far the most installed homeserver available.
interoperableA more general definition of interoperability is for systems to be able to freely exchange data with another by a known mechanism. In the case of matrix, we have openly documented how to communicate with our HTTP APIs.
New VectorNew Vector is a company formed to build Matrix.org. It is a continuation of the original project team, and is focused on development and maintenance of matrix.org.
federationFederation means that separate instances of a service communicate - the best example of this is email servers, in which it's possible to send mail between difference service providers. For Matrix, this means that data about rooms and message history is shared between servers of participating users.
SIPSession Initiation Protocol is a communications protocol for signaling and controlling multimedia communication sessions in applications of Internet telephony for voice and video calls.
XMPPXMPP is a communication protocol for message-oriented middleware based on XML. We think of Matrix and XMPP as being quite different; at its core Matrix can be thought of as an eventually consistent global JSON database, whilst XMPP can be thought of as a message passing protocol.
RCSRich Communication Services is a communication protocol between mobile-telephone carriers and between phone and carrier, aiming at replacing SMS messages with a text-message system that is richer, provides phonebook polling (for service discovery), and transmit in-call multimedia.
bridgingBridging to Matrix means that it's possible to read and write to channels hosted outside matrix. For example, it's possible to speak in IRC and slack rooms.
ElementElement is a popular matrix client developed by the core matrix.org team. It's available as a web app, on Android and on iOS.
client SDKA client SDK makes it easier to develop client applications using matrix. See: How do I Matrix-enable my existing app?
MXIDMatrix user IDs (MXID) are unique user IDs. They are in the format @username:homeserver.tld.
3PIDThird-party IDs (3PIDs) are IDs from other systems or contexts, such as email addresses, social network accounts and phone numbers.
the specThe Matrix Specification describes the interactions between actors in the Matrix ecosystem, including Server-Server and Client-Server. You can see the spec here.
sigilSigils refer the symbols uses at the beginning of many matrix identifiers. For example '@' is used for users, '#' for rooms, and '+' for communities.
communityCommunities are collections of rooms. They have been replaced by spaces.
groupGroups are now known as communities, they are collections of rooms. They have been replaced by spaces.
spaceSpaces are collections of rooms as rooms. They replace communities and groups.
roomA room is a fundamental building bock of the matrix architecture: events are typically sent in the context of a room. A room is a conceptual place where users can send and receive events. Events are sent to a room, and all participants in that room with sufficient access will receive the event. See more detail.
botA bot is an autonomous agent. In the context of matrix, it means software which is able to make automated posts in rooms.
pubsubThe publish-subscribe pattern describes an architecture in which message senders push messages to a location, without needing to know who the subscribers will be. For Matrix, this means a client can send a message to a room without knowing the members, and the members can read that message.
PostgresWhile Synapse can be installed using Sqlite, Postgres is preferred for any significant use.