Matrix is an open protocol for real-time communication. It is designed to allow users with accounts at one communications service provider to communicate with users of a different service provider via online chat, Voice over IP, and Videotelephony. That is, it aims to make real-time communication work seamlessly between different service providers, just like standard Simple Mail Transfer Protocol email does now for store-and-forward email service.
From a technical perspective, it is an application layer communications protocol for federated real-time communication. It provides HTTP APIs and open source reference implementations for securely distributing and persisting messages in JSON format over an open federation of servers. It can integrate with standard web services via WebRTC, facilitating browser-to-browser applications.
Previous attempts, like XMPP, at defining an open instant messaging or multimedia signalling protocol of this type and getting it widely adopted have highlighted the challenges involved, both technological and political. It is unclear if there is enough demand among users for services which interoperate among providers.
Development of Matrix is led by Matrix.org, a non-for-profit initiative based in the United Kingdom, which hopes to make it an open standard for decentralised, persistent and interoperable communications over the Internet. Matrix targets use cases like Voice over IP, Internet of Things and instant messaging, including group communication, along with a longer-term goal to be a generic messaging and data synchronization system for the web. The protocol supports security and replication, maintaining full conversation history, with no single points of control or failure. Existing communication services can integrate with the Matrix ecosystem.
Client software is available for open-federated Instant Messaging (IM), Voice over IP (VoIP) and Internet of Things (IoT) communication.
The Matrix standard specifies RESTful HTTP APIs for securely transmitting and replicating JSON data between Matrix-capable clients, servers and services. Clients send data by PUTing it to a ‘room’ on their server, which then replicates the data over all the Matrix servers participating in this ‘room’. This data is signed using a git-style signature to mitigate tampering, and the federated traffic is encrypted with HTTPS and signed with each server’s private key to avoid spoofing. Replication follows eventual consistency semantics, allowing servers to function even if offline or after data-loss by re-synchronizing missing history from other participating servers.
The Olm library provides for optional end-to-end encryption on a room-by-room basis via an Axolotl ratchet. It can ensure that conversation data at rest is only readable by the room participants. With it configured, data transmitted over Matrix is only visible as ciphertext to the Matrix servers, and can be decrypted only by authorized participants in the room.
Without a matrix circuit, a 61-key keyboard would require 62 wires to connect (one for each note, and a ground) — an awkwardly thick bundle of wiring. With a matrix circuit, any of 61 notes can be determined with only 16 wires. This is drawn schematically as a matrix of 8 columns and 8 rows of wires, with a switch at every intersection. The keyboard controller scans the columns. If a key has been pressed, the controller scans the rows — and in a manner analogous to the board game “Battleship!”, the controller determines the row-column combination at which a key has been pressed, and generates a note corresponding to that key. This process occurs so quickly that the performer is unaware of any delay.
The inside of a Yamaha SY77 synthesizer shows the various internal components. The switches for each key are connected to the microprocessor chip using a matrix circuit. Even though the SY77 has 61 keys, only a small ribbon cable of wiring comes from the keyboard.
There are at least two limitations with this system. The first is that it provides only a crude binary on/off signal for each key. Better electronic keyboards employ two sets of switches for each key that are slightly offset. By determining the timing between the activation of the first and second switches, the velocity of a key press can be determined — greatly improving the performance dynamic of a keyboard.
The second is that instruments with a matrix circuit can only play in a monophonic fashion without the addition of a diode for each key crossing. The diode is a one-way valve which prevents unwanted notes (“phantom keys”) from being triggered, or intended notes from being masked (“phantom key blocking”).
Monophonic instruments and most low-cost computer keyboards reduce costs by leaving out most or all of those diodes. To avoid “phantom keys”, the keyboard controller in modern low-cost computer keyboards will ignore further key presses once two keys (other than modifier keys) have been pressed, which is known as jamming.
The matrix circuit approach is also used in other types of non-musical keyboards, such as in the keypads for calculators and the “QWERTY” alphabetic and numeric keyboards used to enter information into computers. The same matrix circuit approach is also used in many pinball machines.
Often in pocket calculators the multiplexed digit drive lines would be used to scan the keyboard as well, providing further savings.