You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
✅ **Decentralized & Federated** – No central authority; works across Matrix
36
+
homeservers.
37
+
✅ **End-to-End Encrypted** – Secure and private calls.
38
+
✅ **Standalone & Widget Mode** – Use as an independent app or embed in Matrix
39
+
clients.
40
+
✅ **WebRTC-based** – No additional software required.
41
+
✅ **Scalable with LiveKit** – Supports large meetings via SFU
42
+
([MSC4195: MatrixRTC using LiveKit backend](https://github.com/hughns/matrix-spec-proposals/blob/hughns/matrixrtc-livekit/proposals/4195-matrixrtc-livekit.md)).
43
+
✅ **Raise Hand** – Participants can signal when they want to speak, helping to
44
+
organize the flow of the meeting.
45
+
✅ **Emoji Reactions** – Users can react with emojis 👍️ 🎉 👏 🤘, adding
46
+
engagement and interactivity to the conversation.
31
47
32
-
If all went well, you can now find the build output under `dist` as a series of
33
-
static files. These can be hosted using any web server that can be configured
34
-
with custom routes (see below).
48
+
## 🚀 Deployment Options
35
49
36
-
You also need to add a configuration file which goes in `public/config.json` -
37
-
you can use the sample as a starting point:
50
+
Element Call can be packaged in two ways:
38
51
39
-
```sh
40
-
cp config/config.sample.json public/config.json
41
-
# edit public/config.json
42
-
```
52
+
**Full Package** – Supports both **Standalone** and **Widget** mode. Hosted as
53
+
a static web page and accessed via a URL when used as a widget.
43
54
44
-
The sample needs editing to contain the homeserver and LiveKit backend that you
45
-
are using.
46
-
47
-
Because Element Call uses client-side routing, your server must be able to route
48
-
any requests to non-existing paths back to `/index.html`. For example, in Nginx
49
-
you can achieve this with the `try_files` directive:
50
-
51
-
```jsonc
52
-
server {
53
-
...
54
-
location / {
55
-
...
56
-
try_files $uri /$uri /index.html;
57
-
}
58
-
}
59
-
```
55
+
**Embedded Package** – 🚧 **Coming [Soon](https://github.com/element-hq/element-call/issues/2994):** Designed for **Widget mode** only. Bundled with a
56
+
messenger app for seamless integration. This is the recommended method for
57
+
embedding Element Call into a messenger app.
60
58
61
-
Element Call requires a homeserver with registration enabled without any 3pid or
62
-
token requirements, if you want it to be used by unregistered users.
63
-
Furthermore, it is not recommended to use it with an existing homeserver where
64
-
user accounts have joined normal rooms, as it may not be able to handle those
65
-
yet and it may behave unreliably.
66
-
67
-
Therefore, to use a self-hosted homeserver, this is recommended to be a new
68
-
server where any user account created has not joined any normal rooms anywhere
69
-
in the Matrix federated network. The homeserver used can be setup to disable
70
-
federation, so as to prevent spam registrations (if you keep registrations open)
71
-
and to ensure Element Call continues to work in case any user decides to log in
72
-
to their Element Call account using the standard Element app and joins normal
73
-
rooms that Element Call cannot handle.
74
-
75
-
## Configuration
76
-
77
-
There are currently two different config files. `.env` holds variables that are
78
-
used at build time, while `public/config.json` holds variables that are used at
79
-
runtime. Documentation and default values for `public/config.json` can be found
80
-
in [ConfigOptions.ts](src/config/ConfigOptions.ts).
81
-
82
-
If you're using [Synapse](https://github.com/element-hq/synapse/), you'll need
83
-
to additionally add the following to `homeserver.yaml` or Element Call won't
84
-
work:
85
-
86
-
```yaml
87
-
experimental_features:
88
-
# MSC3266: Room summary API. Used for knocking over federation
89
-
msc3266_enabled: true
90
-
# MSC4222 needed for syncv2 state_after. This allow clients to
91
-
# correctly track the state of the room.
92
-
msc4222_enabled: true
93
-
94
-
# The maximum allowed duration by which sent events can be delayed, as
95
-
# per MSC4140.
96
-
max_event_delay_duration: 24h
97
-
98
-
rc_message:
99
-
# This needs to match at least the heart-beat frequency plus a bit of headroom
100
-
# Currently the heart-beat is every 5 seconds which translates into a rate of 0.2s
101
-
per_second: 0.5
102
-
burst_count: 30
103
-
```
59
+
### Standalone mode
60
+
61
+

62
+
63
+
In Standalone mode Element Call operates as an independent, full-featured video
64
+
conferencing web application, allowing users to join or host calls without
65
+
requiring a separate Matrix client.
66
+
67
+
### Widget mode embedded in Messenger Apps
68
+
69
+

70
+
71
+
Element Call can be embedded as a widget inside apps like
72
+
[**Element Web**](https://github.com/element-hq/element-web) or **Element X
the **first participant who joined the call** defines via the `foci_preferred`
122
+
key in their `org.matrix.msc3401.call.member` which actual MatrixRTC backend
123
+
will be used for this call.
124
+
- During the actual call join flow, the **LiveKit JWT Auth Service** provides
125
+
the client with the **LiveKit SFU WebSocket URL** and an **access JWT token**
126
+
in order to exchange media via WebRTC.
127
+
128
+
The example below illustrates how backend selection works across **Matrix
129
+
federation**, using the setup from sites A, B, and C. It demonstrates backend
130
+
selection for **Matrix rooms 123 and 456**, which include users from different
131
+
homeservers.
132
+

133
+
134
+
## 🌍 Translation
140
135
141
136
If you'd like to help translate Element Call, head over to
142
137
[Localazy](https://localazy.com/p/element-call). You're also encouraged to join
143
138
the [Element Translators](https://matrix.to/#/#translators:element.io) space to
144
139
discuss and coordinate translation efforts.
145
140
146
-
## Development
141
+
## 🛠️ Development
147
142
148
143
### Frontend
149
144
@@ -155,13 +150,15 @@ cd element-call
155
150
yarn
156
151
```
157
152
158
-
To use it, create a local config by, e.g., `cp ./config/config.devenv.json ./public/config.json`
159
-
and adapt it if necessary. The `config.devenv.json` config should work with the backend
160
-
development environment as outlined in the next section out of box.
153
+
To use it, create a local config by, e.g.,
154
+
`cp ./config/config.devenv.json ./public/config.json` and adapt it if necessary.
155
+
The `config.devenv.json` config should work with the backend development
156
+
environment as outlined in the next section out of box.
161
157
162
-
(Be aware, that this `config.devenv.json` is exposing a deprecated fallback
163
-
LiveKit config key. If the homeserver advertises SFU backend via
164
-
`.well-known/matrix/client`this has precedence.)
158
+
> [!NOTE]
159
+
> Be aware, that this `config.devenv.json` is exposing a deprecated fallback
160
+
> LiveKit config key. If the homeserver advertises SFU backend via
161
+
> `.well-known/matrix/client` this has precedence.
165
162
166
163
You're now ready to launch the development server:
167
164
@@ -200,7 +197,8 @@ yarn backend
200
197
201
198
To add a new translation key you can do these steps:
202
199
203
-
1. Add the new key entry to the code where the new key is used: `t("some_new_key")`
200
+
1. Add the new key entry to the code where the new key is used:
201
+
`t("some_new_key")`
204
202
1. Run `yarn i18n` to extract the new key and update the translation files. This
205
203
will add a skeleton entry to the `locales/en/app.json` file:
206
204
@@ -212,30 +210,38 @@ To add a new translation key you can do these steps:
212
210
}
213
211
```
214
212
215
-
1. Update the skeleton entry in the `locales/en/app.json` file with
216
-
the English translation:
213
+
1. Update the skeleton entry in the `locales/en/app.json` file with the English
214
+
translation:
217
215
218
-
```jsonc
216
+
```jsonc
219
217
{
220
218
...
221
219
"some_new_key":"Some new key",
222
220
...
223
221
}
224
-
```
222
+
```
225
223
226
-
## Documentation
224
+
## 📖 Documentation
227
225
228
226
Usage and other technical details about the project can be found here:
229
227
230
228
[**Docs**](./docs/README.md)
231
229
232
-
## Copyright & License
230
+
## 📝 Copyright & License
233
231
234
232
Copyright 2021-2025 New Vector Ltd
235
233
236
-
This software is dual-licensed by New Vector Ltd (Element). It can be used either:
234
+
This software is dual-licensed by New Vector Ltd (Element). It can be used
235
+
either:
237
236
238
-
(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
237
+
(1) for free under the terms of the GNU Affero General Public License (as
238
+
published by the Free Software Foundation, either version 3 of the License, or
239
+
(at your option) any later version); OR
239
240
240
-
(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).
241
-
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.
241
+
(2) under the terms of a paid-for Element Commercial License agreement between
242
+
you and Element (the terms of which may vary depending on what you and Element
243
+
have agreed to). Unless required by applicable law or agreed to in writing,
244
+
software distributed under the Licenses is distributed on an "AS IS" BASIS,
245
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
246
+
Licenses for the specific language governing permissions and limitations under
Copy file name to clipboardExpand all lines: docs/embedded-standalone.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,7 +2,7 @@
2
2
3
3
Element call is developed using the js-sdk with matroska mode. This means the app can run either as a standalone app directly connected to a homeserver providing login interfaces or it can be used as a widget.
4
4
5
-
As a widget the app only uses the core calling (matrixRTC) parts. The rest (authentication, sending events, getting room state updates about calls) is done by the hosting client.
5
+
As a widget the app only uses the core calling (MatrixRTC) parts. The rest (authentication, sending events, getting room state updates about calls) is done by the hosting client.
6
6
Element Call and the hosting client are connected via the widget api.
7
7
8
8
Element call detects that it is run as a widget if a widgetId is defined in the url parameters. If `widgetId` is present element call will try to connect to the client via the widget postMessage api using the parameters provided in [Url Format and parameters
0 commit comments