- Notifications
You must be signed in to change notification settings - Fork105
Group calls powered by Matrix
License
AGPL-3.0, Unknown licenses found
Licenses found
element-hq/element-call
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
The world's first 🌐 decentralized and 🤝 federated video conferencing solutionpowered bythe Matrix protocol.
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.
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-mesh
branch.
✅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.
Element Call can be packaged in two ways:
Full Package – Supports bothStandalone andWidget mode. Hosted asa static web page and accessed via a URL when used as a widget.
Embedded Package – Designed forWidget mode only. Bundled with amessenger app for seamless integration. This is the recommended method forembedding Element Call into a messenger app.
See thehere for more information on the packages.
In Standalone mode Element Call operates as an independent, full-featured videoconferencing web application, allowing users to join or host calls withoutrequiring a separate Matrix client.
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!
For operating and deploying Element Call on your own server, refer to theSelf-Hosting Guide.
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.
MatrixRTC backend (according toMSC4143)is announced 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
.
- Each call participant proposes their discovered MatrixRTC backend from
org.matrix.msc4143.rtc_foci
in theirorg.matrix.msc3401.call.member
state event. - ForLiveKit MatrixRTC backend(MSC4195),thefirst participant who joined the call defines via the
foci_preferred
key 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.
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.
To get started clone and set up this project:
git clone https://github.com/element-hq/element-call.gitcd element-callyarn
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.
Note
Be aware, that thisconfig.devenv.json
is exposing a deprecated fallbackLiveKit 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
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.localhost
) - LiveKit JWT Service (Note requires Federation API and hence a TLS reverse proxy)
- Minimum TLS reverse proxy (servername:
synapse.localhost
) Note certificatesare 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 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
Our Playwright tests run automatically as part of our CI along with our other tests,on every pull request.
You may need to follow instructions to set up your development environment for runningPlaywright 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 running onhttps://localhost:3000 (this is configured inplaywright.config.ts
) - this is what willbe 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 to run:
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.
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/console output.
To add a new translation key you can do these steps:
Add the new key entry to the code where the new key is used:
t("some_new_key")
Run
yarn 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":"",...}
Update the skeleton entry in the
locales/en/app.json
file with the Englishtranslation:{..."some_new_key":"Some new key",...}
Usage and other technical details about the project can be found here:
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