2025-03-05 21:13:55 +01:00
2024-12-03 16:57:53 +01:00
2025-02-27 18:25:24 +00:00
2025-03-05 21:13:55 +01:00
2025-02-28 13:38:53 +00:00
2023-04-06 17:59:48 +01:00
2021-12-20 16:59:39 +00:00
2023-08-28 17:14:40 -04:00
2021-10-14 17:41:59 -07:00
2022-05-03 14:24:04 +01:00
2022-05-03 14:24:04 +01:00
2023-06-30 18:46:10 -04:00
2024-10-18 16:39:02 -04:00
2023-01-20 10:51:28 -05:00
2025-02-20 06:33:01 +03:00
2025-03-05 21:13:55 +01:00

Element Call

Chat Localazy License

🎬 Live Demo 🎬

The world's first 🌐 decentralized and 🤝 federated video conferencing solution powered by the Matrix protocol.

📌 Overview

Element Call is a native Matrix video conferencing application developed by Element, designed for secure, scalable, privacy-respecting, and decentralized video and voice calls over the Matrix protocol. Built on MatrixRTC (MSC4143), it utilizes MSC4195 with LiveKit as its backend.

A demo of Element Call with six people

You can find the latest development version continuously deployed to call.element.dev.

Note

For prior version of the Element Call that relied solely on full-mesh logic, check full-mesh branch.

Key Features

Decentralized & Federated No central authority; works across Matrix homeservers.
End-to-End Encrypted Secure and private calls.
Standalone & Widget Mode Use as an independent app or embed in Matrix clients.
WebRTC-based No additional software required.
Scalable with LiveKit Supports large meetings via SFU (MSC4195: MatrixRTC using LiveKit backend).
Raise Hand Participants can signal when they want to speak, helping to organize the flow of the meeting.
Emoji Reactions Users can react with emojis 👍 🎉 👏 🤘, adding engagement and interactivity to the conversation.

🚀 Deployment Options

Element Call can be packaged in two ways:

Full Package Supports both Standalone and Widget mode. Hosted as a static web page and accessed via a URL when used as a widget.

Embedded Package Designed for Widget mode only. Bundled with a messenger app for seamless integration. This is the recommended method for embedding Element Call into a messenger app.

Standalone mode

Element Call in Standalone Mode

In Standalone mode Element Call operates as an independent, full-featured video conferencing web application, allowing users to join or host calls without requiring a separate Matrix client.

Widget mode embedded in Messenger Apps

Element Call in Widget Mode

Element Call can be embedded as a widget inside apps like Element Web or Element X (iOS, Android), bringing MatrixRTC capabilities to messenger apps for seamless decentralized video and voice calls within Matrix rooms.

Important

Embedded packaging is recommended for Element Call in widget mode!

🛠️ Self-Hosting

For operating and deploying Element Call on your own server, refer to the Self-Hosting Guide.

Element Call requires a Livekit SFU alongside a Livekit JWT service to work. The url to the Livekit JWT service can either be configured in the config of Element Call (fallback/legacy configuration) or be configured by your homeserver via the .well-known/matrix/client. This is the recommended method.

The configuration is a list of Foci configs:

"org.matrix.msc4143.rtc_foci": [
    {
        "type": "livekit",
        "livekit_service_url": "https://someurl.com"
    },
     {
        "type": "livekit",
        "livekit_service_url": "https://livekit2.com"
    },
    {
        "type": "another_foci",
        "props_for_another_foci": "val"
    },
]

Translation

If you'd like to help translate Element Call, head over to Localazy. You're also encouraged to join the Element Translators space to discuss and coordinate translation efforts.

Development

Frontend

To get started clone and set up this project:

git clone https://github.com/element-hq/element-call.git
cd element-call
yarn

To use it, create a local config by, e.g., cp ./config/config.devenv.json ./public/config.json and adapt it if necessary. The config.devenv.json config should work with the backend development environment as outlined in the next section out of box.

(Be aware, that this config.devenv.json is exposing a deprecated fallback LiveKit config key. If the homeserver advertises SFU backend via .well-known/matrix/client this has precedence.)

You're now ready to launch the development server:

yarn dev

Backend

A docker compose file dev-backend-docker-compose.yml is provided to start the whole stack of components which is required for a local development environment:

  • Minimum Synapse Setup (servername: synapse.localhost)
  • LiveKit JWT Service (Note requires Federation API and hence a TLS reverse proxy)
  • Minimum TLS reverse proxy (servername: synapse.localhost) Note certificates are valid for at least 10 years from now
  • Minimum LiveKit SFU Setup using dev defaults for config
  • Redis db for completeness

These use a test 'secret' published in this repository, so this must be used only for local development and never be exposed to the public Internet.

Run backend components:

yarn backend
# or  for podman-compose
# podman-compose -f dev-backend-docker-compose.yml up

Test Coverage

Add a new translation key

To add a new translation key you can do these steps:

  1. Add the new key entry to the code where the new key is used: t("some_new_key")

  2. Run yarn i18n to extract the new key and update the translation files. This will add a skeleton entry to the locales/en/app.json file:

    {
        ...
        "some_new_key": "",
        ...
    }
    
  3. Update the skeleton entry in the locales/en/app.json file with the English translation:

   {
       ...
       "some_new_key": "Some new key",
       ...
   }

Documentation

Usage and other technical details about the project can be found here:

Docs

Copyright 2021-2025 New Vector Ltd

This software is dual-licensed by New Vector Ltd (Element). It can be used either:

(1) for free under the terms of the GNU Affero General Public License (as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version); OR

(2) under the terms of a paid-for Element Commercial License agreement between you and Element (the terms of which may vary depending on what you and Element have agreed to). Unless required by applicable law or agreed to in writing, software distributed under the Licenses is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the Licenses for the specific language governing permissions and limitations under the Licenses.

Description
No description provided
Readme 41 MiB
Languages
TypeScript 88.6%
CSS 10.3%
JavaScript 0.9%