Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Group calls powered by Matrix

License

AGPL-3.0, Unknown licenses found

Licenses found

AGPL-3.0
LICENSE-AGPL-3.0
Unknown
LICENSE-COMMERCIAL
NotificationsYou must be signed in to change notification settings

element-hq/element-call

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ChatLocalazyLicense

🎬 Live Demo 🎬

The world's first 🌐 decentralized and 🤝 federated video conferencing solutionpowered bythe Matrix protocol.

📌 Overview

Element Call is a native Matrix video conferencing application developed byElement, designed forsecure,scalable,privacy-respecting, anddecentralized video and voice calls over theMatrix protocol. Built onMatrixRTC(MSC4143), itutilizesMSC4195withLiveKit as its backend.

A demo of Element Call with six people

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

Note

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

✨ Key Features

Decentralized & Federated – No central authority; works across Matrixhomeservers.
End-to-End Encrypted – Secure and private calls.
Standalone & Widget Mode – Use as an independent app or embed in Matrixclients.
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 toorganize the flow of the meeting.
Emoji Reactions – Users can react with emojis 👍️ 🎉 👏 🤘, addingengagement and interactivity to the conversation.

🚀 Deployment & Packaging Options

Element Call is developed using theMatrix js-sdk with Matroska mode.This allows the app to run either as a Standalone App directly connected to ahomeserver with login interfaces or it can be used as a widget within a Matrixclient.

🖥️ Standalone Mode

Element Call in Standalone Mode

In Standalone mode, Element Call operates as an independent, full-featured videoconferencing web application, enabling users to join or host calls withoutrequiring a separate Matrix client.

📲 In-App Calling (Widget Mode in Messenger Apps)

When used as a widget 🧩, Element Call is solely responsible on the core callingfunctionality (MatrixRTC). Authentication, event handling, and room stateupdates (via the Client-Server API) are handled by the hosting client.Communication between Element Call and the client is managed through the widgetAPI.

Element Call in Widget Mode

Element Call can be embedded as a widget inside apps likeElement Web orElement X(iOS,Android), bringingMatrixRTC capabilities to messenger apps for seamless decentralized videoand voice calls within Matrix rooms.

Important

Embedded packaging is recommended for Element Call in widget mode!

📦 Element Call Packaging

Element Call offers two packaging options: one for standalone or widgetdeployment, and another for seamless widget-based integration into messengerapps. Below is an overview of each option.

Full Package – Supports bothStandalone andWidget mode. It ishosted as a static web page and can be accessed via a URL when used as a widget.

Element Call Full Package

Embedded Package – Designed specifically forWidget mode only. It isbundled with a messenger app for seamless integration and this is therecommended method for embedding Element Call.

Element Call Embedded Package

For more details on the packages, see theEmbedded vs. Standalone Guide.

🛠️ Self-Hosting

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

🧭 MatrixRTC Backend Discovery and Selection

For proper Element Call operation each site deployment needs a MatrixRTC backendsetup as outlined in theSelf-Hosting. A typical federated sitedeployment for three different sites A, B and C is depicted below.

Element Call federated setup

Backend Discovery

MatrixRTC backend (according toMSC4143) isannounced by the Matrix site's.well-known/matrix/client file and discoveredvia theorg.matrix.msc4143.rtc_foci key, e.g.:

"org.matrix.msc4143.rtc_foci": [    {"type":"livekit","livekit_service_url":"https://matrix-rtc.example.com/livekit/jwt"    },]

where the format for MatrixRTC using LiveKit backend is defined inMSC4195.In the example above Matrix clients do discover a focus of typelivekit whichpoints them to a Matrix LiveKit JWT Auth Service vialivekit_service_url.

Backend Selection

  • Each call participant proposes their discovered MatrixRTC backend fromorg.matrix.msc4143.rtc_foci in theirorg.matrix.msc3401.call.member state event.
  • ForLiveKit MatrixRTC backend(MSC4195),thefirst participant who joined the call defines via thefoci_preferredkey in theirorg.matrix.msc3401.call.member which actual MatrixRTC backendwill be used for this call.
  • During the actual call join flow, theLiveKit JWT Auth Service providesthe client with theLiveKit SFU WebSocket URL and anaccess JWT tokenin order to exchange media via WebRTC.

The example below illustrates how backend selection works acrossMatrixfederation, using the setup from sites A, B, and C. It demonstrates backendselection forMatrix rooms 123 and 456, which include users from differenthomeservers.

Element Call SFU selection over Matrix federation

🌍 Translation

If you'd like to help translate Element Call, head over toLocalazy. You're also encouraged to jointheElement Translators space todiscuss and coordinate translation efforts.

🛠️ Development

Frontend

To get started clone and set up this project:

git clone https://github.com/element-hq/element-call.gitcd element-callcorepackenableyarn

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

You're now ready to launch the development server:

yarn dev

See also:

Backend

A docker compose filedev-backend-docker-compose.yml is provided to start thewhole stack of components which is required for a local development environment:

  • Minimum Synapse Setup (servername:synapse.m.localhost)
  • LiveKit Authorization Service (Note requires Federation API and hence a TLS reverse proxy)
  • Minimum LiveKit SFU Setup using dev defaults for config
  • Redis db for completeness
  • Minimumlocalhost Certificate Authority (CA) for Transport Layer Security (TLS)
  • Minimum TLS reverse proxy for
    • Synapse homeserver:synapse.m.localhost
    • MatrixRTC backend:matrix-rtc.m.localhost
    • Local Element Call developmentcall.m.localhost viayarn dev --host
    • Element Webapp.m.localhost
    • Note certificates will expire on Thu, 03 May 2035 10:32:02 GMT

These use a test 'secret' published in this repository, so this must be usedonly for local development andnever be exposed to the public Internet.

Run backend components:

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

Note

To ensure your local development frontend functions properly, you’ll need toadd certificate exceptions in your browser forhttps://localhost:3000,https://matrix-rtc.m.localhost/livekit/jwt/healthz andhttps://synapse.m.localhost/.well-known/matrix/client. This can be eitherdone by adding the minimum localhost CA(./backend/dev_tls_local-ca.crt) to your webbrowsers trusted certificates or by simply copying and pasting each URL intoyour browser’s address bar and follow the prompts to add the exception.

Playwright tests

Our Playwright tests run automatically as part of our CI along with our othertests, on every pull request.

You may need to follow instructions to set up your development environment forrunning Playwright by followinghttps://playwright.dev/docs/browsers#install-browsers andhttps://playwright.dev/docs/browsers#install-system-dependencies.

However the Playwright tests are run, an element-call instance must be runningonhttps://localhost:3000 (this is configured inplaywright.config.ts) - thisis what will be tested.

The local backend environment should be running for the test to work:yarn backend

There are a few different ways to run the tests yourself. The simplest is torun:

yarn run test:playwright

This will run the Playwright tests once, non-interactively.

There is a more user-friendly way to run the tests in interactive mode:

yarn run test:playwright:open

The easiest way to develop new test is to use the codegen feature of Playwright:

npx playwright codegen

This will record your action and write the test code for you. Use the tool barto test visibility, text content and clicking.

Investigate a failed test from the CI

In the failed action page, click on the failed job, then scroll down to theupload-artifact step. You will find a link to download the zip report, as per:

Artifact playwright-report has been successfully uploaded! Final size is 1360358 bytes. Artifact ID is 2746265841Artifact download URL: https://github.com/element-hq/element-call/actions/runs/13837660687/artifacts/2746265841

Unzip the report then use this command to open the report in your browser:

npx playwright show-report~/Downloads/playwright-report/

Under the failed test there is a small icon looking like "3 columns" (next tothe test name file name), click on it to see the live screenshots/consoleoutput.

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. Runyarn i18n to extract the new key and update the translation files. Thiswill add a skeleton entry to thelocales/en/app.json file:

    {..."some_new_key":"",...}
  3. Update the skeleton entry in thelocales/en/app.json file with the Englishtranslation:

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

📖 Documentation

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

Docs

📝 Copyright & License

Copyright 2021-2025 New Vector Ltd

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

(1) for free under the terms of the GNU Affero General Public License (aspublished 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 betweenyou and Element (the terms of which may vary depending on what you and Elementhave 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 theLicenses for the specific language governing permissions and limitations underthe Licenses.

About

Group calls powered by Matrix

Topics

Resources

License

AGPL-3.0, Unknown licenses found

Licenses found

AGPL-3.0
LICENSE-AGPL-3.0
Unknown
LICENSE-COMMERCIAL

Security policy

Stars

Watchers

Forks

Packages

 
 
 

[8]ページ先頭

©2009-2025 Movatter.jp