Releases: element-hq/element-call
v0.9.0-rc.4
What's Changed since rc.3
Full Changelog: v0.9.0-rc.3...v0.9.0-rc.4
Docker full package
Element Call is available as a Docker image from the GitHub Container Registry.
The image provides a full build of Element Call that can be used both in standalone and as a widget (on a remote URL).
docker pull ghcr.io/element-hq/element-call:0.9.0-rc.4
Embedded packages
This release includes the following embedded packages that allow Element Call to be used as an embedded widget
within another application.
NPM
npm install @element-hq/element-call-embedded@0.9.0-rc.4
Android AAR
dependencies {
implementation 'io.element.android:element-call-embedded:0.9.0-rc.4'
}
SwiftPM
.package(url: "https://github.com/element-hq/element-call-swift.git", from: "0.9.0-rc.4")
v0.9.0-rc.3
What's Changed since rc.2
Full Changelog: v0.9.0-rc.2...v0.9.0-rc.3
Docker full package
Element Call is available as a Docker image from the GitHub Container Registry.
The image provides a full build of Element Call that can be used both in standalone and as a widget (on a remote URL).
docker pull ghcr.io/element-hq/element-call:0.9.0-rc.3
Embedded packages
This release includes the following embedded packages that allow Element Call to be used as an embedded widget
within another application.
NPM
npm install @element-hq/element-call-embedded@0.9.0-rc.3
Android AAR
dependencies {
implementation 'io.element.android:element-call-embedded:0.9.0-rc.3'
}
SwiftPM
.package(url: "https://github.com/element-hq/element-call-swift.git", from: "0.9.0-rc.3")
v0.9.0-rc.2
What's Changed since rc.1
- Backport: Fix join errors mistakenly showing a generic error screen by @robintown in #3119
Full Changelog: v0.9.0-rc.1...v0.9.0-rc.2
Docker full package
Element Call is available as a Docker image from the GitHub Container Registry.
The image provides a full build of Element Call that can be used both in standalone and as a widget (on a remote URL).
docker pull ghcr.io/element-hq/element-call:0.9.0-rc.2
Embedded packages
This release includes the following embedded packages that allow Element Call to be used as an embedded widget
within another application.
NPM
npm install @element-hq/element-call-embedded@0.9.0-rc.2
Android AAR
dependencies {
implementation 'io.element.android:element-call-embedded:0.9.0-rc.2'
}
SwiftPM
.package(url: "https://github.com/element-hq/element-call-swift.git", from: "0.9.0-rc.2")
v0.9.0-rc.1
What's Changed
This is the first release candidate of v0.9.0.
Highlights
- Element Call is now available as two packages: "full" and "embedded"
- Full package is the same as what was previously published: docker image + tarball
- Embedded package is to allow Element Call to be distributed as part of a Matrix Client supporting Web (NPM), Android (AAR) and iOS (SwiftPM) platforms
- Documentation improvements
- New self-hosting guide
- Clarifications around URL parameters
- Improvements to error handling including:
- participant limit imposed by a LiveKit SFU
- failure to get JWT token
- End-to-end integration tests using Playwright
Changes
- Refactor README.md by @fkwp in #3059
- Use fetch() in a way that works for file URLs by @hughns in #3071
- Localazy Download by @RiotRobot in #3078
- Fix typing on config: EULA is optional as it has a default by @hughns in #3074
- Vite embedded build of Element Call by @hughns in #3077
- refactor: Centralize group call errors in custom GroupCallErrorBoundary by @BillCarsonFr in #3058
- Separate widget-only URL parameters in the documentation by @hughns in #3088
- First integration tests with playwright by @BillCarsonFr in #3091
- README.md add information about rc_delayed_event_mgmt by @fkwp in #3026
- Integration Test: Add test for register, login, logout and guest create and join call by @BillCarsonFr in #3096
- Integration Test: Add test for register, login, logout and guest create and join call by @BillCarsonFr in #3097
- Keep rate limits for dev backend, disable only for playwright tests by @BillCarsonFr in #3098
- Update readme with new Element Call screenshot by @fkwp in #3099
- Eslint: Ensure playwright files are checked by eslint by @BillCarsonFr in #3101
- deleted old demo.jpg by @fkwp in #3104
- Show "insufficient capacity" when hitting participant limits by @robintown in #3110
- Run the 'prevent blocked' workflow even if PR has conflicts by @robintown in #3112
- Error management: Handle fail to get JWT token by @BillCarsonFr in #3076
- Move all tests into one workflow, give them clear names by @robintown in #3111
- Publish embedded package for releases of Element Call by @hughns in #3086
- Analytics configuration is the responsibility of the host application when running in widget mode by @hughns in #3089
Full Changelog: v0.8.0...v0.9.0-rc.1
Docker full package
Element Call is available as a Docker image from the GitHub Container Registry.
The image provides a full build of Element Call that can be used both in standalone and as a widget (on a remote URL).
docker pull ghcr.io/element-hq/element-call:0.9.0-rc.1
Embedded packages
This release includes the following embedded packages that allow Element Call to be used as an embedded widget
within another application.
NPM
npm install @element-hq/element-call-embedded@0.9.0-rc.1
Android AAR
dependencies {
implementation 'io.element.android:element-call-embedded:0.9.0-rc.1'
}
SwiftPM
.package(url: "https://github.com/element-hq/element-call-swift.git", from: "0.9.0-rc.1")
v0.8.0
What's Changed
Highlights
This release brings a major architectural shift: call participation and video tiles now rely on MatrixRTC membership instead of the LiveKit room state. This marks the final step toward enabling to-device media key exchange. To support this change, we introduced a new MembershipManager, ensuring RTC membership is accurately handled across all scenarios.
Additionally this release includes various usability improvements.
Key updates:
- Implement the new MatrixRTCSession MembershipManager
- Base (call participation) video tiles on MatrixRTC membership rather than LiveKit participants (a prerequisite for to-device E2EE key distribution)
- Improve UX by making on-screen tile selection and arrangement more stable
- Add sound effects for call exits and screen share activation
- Introduce a wave/hello reaction 👋
- Ensure new devices don't start unmuted by default
- Remember previous mute states when devices disconnect and reconnect
- Begin handling errors more gracefully, including:
- SFU capacity limits
- Missing MatrixRTC backend in a Matrix site deployment
- Enhancements in widget mode:
- Adapt to theme changes during a call
- Hide the header
- On Failure: leave session and show relevant error
- Introduce a "close" action when the widget is ready to shut down (allowing error messages to be displayed and benefiting other widgets)
- Notify users when their camera is initializing in the Lobby
- Authenticate media requests when loading avatars
Changes
- Upgrade js-sdk to develop with MSC4222 state_after support by @hughns in #2841
- Mute state improvements including muting if skipLobby=true in SPA (Same as #2834) by @toger5 in #2846
- Fix wrong hand raise margins in pip tile. by @toger5 in #2840
- Fix Cache-Control header for docker images by @hughns in #2847
- Bump js-sdk (key after leave fix) by @toger5 in #2850
- Use light background by @toger5 in #2851
- Add sound effect for call joined / left by @Half-Shot in #2794
- Show hostname in developer settings by @hughns in #2857
- Add a lower limit to duplicate tiles. by @Half-Shot in #2854
- add information about MSC4222 state_after by @fkwp in #2864
- Rename
en-GB
language toen
by @hughns in #2866 - Use a consistent background colour for video tiles and avatars by @hughns in #2868
- Make video tiles be based on MatrixRTC member not LiveKit participants by @toger5 in #2701
- Localazy Download by @RiotRobot in #2877
- Use specific Node.js version (22) instead of latest LTS by @hughns in #2879
- Authenticate media requests when loading avatars by @Half-Shot in #2856
- Ensure call sound effects are played over the correct sink by @Half-Shot in #2863
- Configure sentry integration for netlify PR previews by @hughns in #2884
- Update dependency vite to v6 by @renovate in #2853
- Add missing full stops from end of settings descriptions by @hughns in #2883
- Ignore URL params where they are not applicable for the mode (widget vs SPA) by @hughns in #2882
- Check for parentUrl when deciding whether a SPA specific url parameter should be ignored by @hughns in #2881
- Enable @typescript-eslint/consistent-type-imports lint rule by @hughns in #2886
- Simplify settings tabs by @hughns in #2875
- Add some quick-and-dirty debug info for TileStore by @robintown in #2887
- Rename developerSettingsTab to developerMode for consistency by @hughns in #2889
- Add support for playing a sound when the user exits a call. by @Half-Shot in #2860
- Clean up useMuteStates test by @hughns in #2891
- Refactor preferences tab strings for consistency by @hughns in #2888
- Bump matrix-js-sdk by @hughns in #2897
- Determine which tiles are on screen in a more stable manner by @robintown in #2894
- Developer setting to show LiveKit participants that do not have MatrixRTC sessions a.k.a. non-member tiles by @hughns in #2771
- Wait for .well-known/matrix/client to load before determining MatrixRTC foci by @hughns in #2901
- Localazy Download by @RiotRobot in #2898
- Revert "Wait for .well-known/matrix/client to load before determining MatrixRTC foci" by @toger5 in #2902
- Skip some redundant updates to the grid and spotlight by @robintown in #2899
- Support selection of audio output device when using Firefox by @robintown in #2816
- Use finnish notation for observables by @hughns in #2905
- Use afterEach from vitest for consistency by @hughns in #2908
- Use AutoDiscovery.getRawClientConfig() instead of MatrixClient.getClientWellKnown() and wait for result by @hughns in #2906
- Bump matrix-js-sdk for bundle improvements by @hughns in #2911
- Introduce intent URL param and make it change the default lobby behaviour by @hughns in #2828
- Inform user that their camera is starting in Lobby by @hughns in #2869
- Fix loading of matrix-sdk-crypto-wasm when running in local development mode by @hughns in #2915
- Add screen share sound effect. by @Half-Shot in #2917
- Refactor reactions / hand raised to use rxjs and start ordering tiles based on hand raised. by @Half-Shot in #2885
- Update dependency @livekit/components-react to v2.6.10 by @renovate in #2920
- Update LiveKit components by @renovate in #2923
- Add developer mode option to show RTC connection statistics by @hughns in #2904
- Update dependency @vector-im/compound-design-tokens to v3 by @renovate in #2896
- Upgrade to React Router v6 by @sandhose in #2919
- Update dependency i18next to v24 by @renovate in #2822
- Remove unnecessary dependency on @testing-library/react-hooks by @hughns in #2926
- Use documented @sentry/vite-plugin config options by @hughns in #2925
- Update dependency @vector-im/compound-web to v7.6.2 by @renovate in #2932
- Update codecov/codecov-action action to v5 by @renovate in #2933
- Update docker/build-push-action action to v6.11.0 by @renovate in #2936
- Set the document title to the current call name. by @Half-Shot in #2928
- Add wave/hello reaction by @davidegirardi in #2921
- React to theme changes in widget mode by @robintown in #2910
- Update dependency global-jsdom to v26 by @renovate in #2941
- Update dependency jsdom to v26 by @renovate in #2938
- Type fixes for react v19 compatibility by @hughns in #2937
- Update GitHub Actions by @renovate in #2945
- Use correct Sentry entrypoints for react router v7 by @hughns in #2943
- Disambiguate displaynames by @Half-Shot in #2918
- Bump matrix-js-sdk to latest by @hughns in #2946
- Fix displayname calculation around RTL / unhomoglyth. by @Half-Shot in #2953
- Update dependency @sentry/vite-plugin to v3 by @renovate in #2950
- Update vitest mo...
v0.8.0-rc.4
What's Changed since rc.3
- Rename built artifact name on v0.8.0 release branch for compatibility with Netlify PR preview by @hughns in #3108
- Downgrade to livekit client v2.9.1 by @hughns in #3106
Full Changelog: v0.8.0-rc.3...v0.8.0-rc.4
v0.8.0-rc.3
What's Changed since rc.2
- Fix: js-sdk version that uses expected value for
isJoined
(isJoined
will now be false before we left as expected by EC) by @toger5 in #3094. See also js-sdk pr: matrix-org/matrix-js-sdk#4752
Full Changelog: v0.8.0-rc.2...v0.8.0-rc.3
Full Changelog Since rc.1: v0.8.0-rc.1...v0.8.0-rc.3
rc.2 was only live for 10minutes since we found an issue very quickly. Hence the diff since rc.1 is the more relevant.
v0.8.0-rc.2
What's Changed
The second release candidate for v0.8.0.
Changes since rc.1
- Cache calls to removeHiddenChars() to fix performance bottleneck in Safari by @hughns in #3072
- Backport: New Membership Manager js-sdk develop by @toger5 in #3079
- Pin matrix-js-sdk to a specific commit by @hughns in #3082
- Backport: close button instead of go to home when in widget mode by @BillCarsonFr in #3087
Full Changelog: v0.8.0-rc.1...v0.8.0-rc.2
v0.8.0-rc.1
What's Changed
The first release candidate for v0.8.0.
Highlights
This release contains a fundamental change: video tiles are now based on matrix and not based on LiveKit anymore.
This is the last underlying piece missing to transition to to-device key exchange. This project resulted in building a new MembershipManager since the RTC membership now plays a much more central role and we need it to be correct in all scenarios.
- Determine which tiles are on screen in a more stable manner
- Make video tiles be based on MatrixRTC member not LiveKit participants
- Add sound effect when the user exits a call and when a screen share is started
- Authenticate media requests when loading avatars
- Add wave/hello reaction
- React to theme changes in widget mode
- Prevent new devices from automatically starting unmuted
- Remember previous mute states when devices disappear and reappear
- Error screens
- Hide the header in widget mode
- Leave session when error occurs and show error screens in widget mode
- Introduce a 'close' action when the widget is ready to close (This allows an error to be shown in the widget mode. Also useful for other widgets.)
- Inform user that their camera is starting int the Lobby
- Use the New MatrixRTCSession MembershipManager
Changes
- Upgrade js-sdk to develop with MSC4222 state_after support by @hughns in #2841
- Mute state improvements including muting if skipLobby=true in SPA (Same as #2834) by @toger5 in #2846
- Fix wrong hand raise margins in pip tile. by @toger5 in #2840
- Fix Cache-Control header for docker images by @hughns in #2847
- Bump js-sdk (key after leave fix) by @toger5 in #2850
- Use light background by @toger5 in #2851
- Add sound effect for call joined / left by @Half-Shot in #2794
- Show hostname in developer settings by @hughns in #2857
- Add a lower limit to duplicate tiles. by @Half-Shot in #2854
- add information about MSC4222 state_after by @fkwp in #2864
- Rename
en-GB
language toen
by @hughns in #2866 - Use a consistent background colour for video tiles and avatars by @hughns in #2868
- Make video tiles be based on MatrixRTC member not LiveKit participants by @toger5 in #2701
- Localazy Download by @RiotRobot in #2877
- Use specific Node.js version (22) instead of latest LTS by @hughns in #2879
- Authenticate media requests when loading avatars by @Half-Shot in #2856
- Ensure call sound effects are played over the correct sink by @Half-Shot in #2863
- Configure sentry integration for netlify PR previews by @hughns in #2884
- Update dependency vite to v6 by @renovate in #2853
- Add missing full stops from end of settings descriptions by @hughns in #2883
- Ignore URL params where they are not applicable for the mode (widget vs SPA) by @hughns in #2882
- Check for parentUrl when deciding whether a SPA specific url parameter should be ignored by @hughns in #2881
- Enable @typescript-eslint/consistent-type-imports lint rule by @hughns in #2886
- Simplify settings tabs by @hughns in #2875
- Add some quick-and-dirty debug info for TileStore by @robintown in #2887
- Rename developerSettingsTab to developerMode for consistency by @hughns in #2889
- Add support for playing a sound when the user exits a call. by @Half-Shot in #2860
- Clean up useMuteStates test by @hughns in #2891
- Refactor preferences tab strings for consistency by @hughns in #2888
- Bump matrix-js-sdk by @hughns in #2897
- Determine which tiles are on screen in a more stable manner by @robintown in #2894
- Developer setting to show LiveKit participants that do not have MatrixRTC sessions a.k.a. non-member tiles by @hughns in #2771
- Wait for .well-known/matrix/client to load before determining MatrixRTC foci by @hughns in #2901
- Localazy Download by @RiotRobot in #2898
- Revert "Wait for .well-known/matrix/client to load before determining MatrixRTC foci" by @toger5 in #2902
- Skip some redundant updates to the grid and spotlight by @robintown in #2899
- Support selection of audio output device when using Firefox by @robintown in #2816
- Use finnish notation for observables by @hughns in #2905
- Use afterEach from vitest for consistency by @hughns in #2908
- Use AutoDiscovery.getRawClientConfig() instead of MatrixClient.getClientWellKnown() and wait for result by @hughns in #2906
- Bump matrix-js-sdk for bundle improvements by @hughns in #2911
- Introduce intent URL param and make it change the default lobby behaviour by @hughns in #2828
- Inform user that their camera is starting in Lobby by @hughns in #2869
- Fix loading of matrix-sdk-crypto-wasm when running in local development mode by @hughns in #2915
- Add screen share sound effect. by @Half-Shot in #2917
- Refactor reactions / hand raised to use rxjs and start ordering tiles based on hand raised. by @Half-Shot in #2885
- Update dependency @livekit/components-react to v2.6.10 by @renovate in #2920
- Update LiveKit components by @renovate in #2923
- Add developer mode option to show RTC connection statistics by @hughns in #2904
- Update dependency @vector-im/compound-design-tokens to v3 by @renovate in #2896
- Upgrade to React Router v6 by @sandhose in #2919
- Update dependency i18next to v24 by @renovate in #2822
- Remove unnecessary dependency on @testing-library/react-hooks by @hughns in #2926
- Use documented @sentry/vite-plugin config options by @hughns in #2925
- Update dependency @vector-im/compound-web to v7.6.2 by @renovate in #2932
- Update codecov/codecov-action action to v5 by @renovate in #2933
- Update docker/build-push-action action to v6.11.0 by @renovate in #2936
- Set the document title to the current call name. by @Half-Shot in #2928
- Add wave/hello reaction by @davidegirardi in #2921
- React to theme changes in widget mode by @robintown in #2910
- Update dependency global-jsdom to v26 by @renovate in #2941
- Update dependency jsdom to v26 by @renovate in #2938
- Type fixes for react v19 compatibility by @hughns in #2937
- Update GitHub Actions by @renovate in #2945
- Use correct Sentry entrypoints for react router v7 by @hughns in #2943
- Disambiguate displaynames by @Half-Shot in #2918
- Bump matrix-js-sdk to latest by @hughns in #2946
- Fix displayname calculation around RTL / unhomoglyth. by @Half-Shot in #2953
- Update dependency @sentry/vite-plugin to v3 by @renovate in #2950
- Update vitest monorepo to v3 (major) by @renovate in #2954
- Remember previous mute states when devices disappear and reappear by @robintown in #2957
- Make error screens more visually consistent by @robintown in https://github.com/element-hq/...
v0.7.2
What's Changed
This is a patch release with no user-facing changes—only some small changes to how Element Call widgets talk to clients. It exists to simplify the rollout of some future improvements to error screens.
- Patch for v0.7: Send a 'close' action when the widget is ready to close by @robintown in #3046
- Backport "Avoid closing the widget in returnToLobby mode" to v0.7 by @robintown in #3057
- Backport "Send a 'join' action when entering the call" to v0.7 by @robintown in #3056
Full Changelog: v0.7.1...v0.7.2