The panel will appear on the right side after the participant pane panel. Currently the panel is disabled by default and the components that are rendered in the panel are empty (null). The panel is easily customizable by adding some content in the CustomPanel component.
In branding you can add now
"labels-translation-languages": {
"en": "/static/translation-overwritten-en.json"
}
This allows overwriting strings from the translation-languages namespace, till now it was possible only for the main one.
If you are in a private conversation with someone and that participant leaves, the selection of messages switches to Everyone but the private message notice stays.
* fix(groupchat-polls-permissions): Adds UI setting to show the option.
Make sure we do not show the setting when everyone is a moderator in the room.
* squash: Change text and default value.
* squash: Defaults to false.
* squash: Set it in metadata.
* squash: Whitelist the config.
* Change stage view and use newly reducedUImainToolbarButtons config to show different custom buttons as main toolbar buttons for when web is in reduced UI.
This partially reverts commit 02787b1 to avoid looping between request subtitles and start recording which results not closing the start recording dialog.
Addresses multiple issues when enabling/disabling PiP dynamically:
1. External API: Replace dead config-overwrite event handler with
interception in executeCommand. This properly manages the intersection
observer and PiP state when pip config changes via overwriteConfig.
2. PiPVideoElement: Fix ref access pattern - access videoRef.current
inside useEffects instead of capturing at render time. The captured
value was null on first render, causing blur/focus listeners to never
be set up when component mounted into a stable conference.
3. useCanvasAvatar: Return streamRef object instead of refs.current.stream
so consumers can access .current inside their effects. The stream is
created in an effect and wasn't available at render time.
4. Add on-mount focus check with loadedmetadata wait to handle PiP enable
while app is in background, ensuring video source is ready before
attempting to enter PiP mode.
Implements Picture-in-Picture functionality for the Electron wrapper to maintain video engagement when users are not actively focused on the conference window. This feature addresses the need to keep users visually connected to the conference even when multitasking.
Key features:
- Automatic PiP mode activation and deactivation based on user interaction
- Displays large video participant's stream or renders their avatar on canvas when video unavailable
- Provides audio/video mute controls via MediaSession API directly in PiP window
- Adds API events (_pip-requested) for Electron wrapper integration
Implementation includes new pip feature module with Redux architecture, canvas-based avatar rendering with custom backgrounds support, and integration with existing mute/unmute logic. Depends on jitsi-meet-electron-sdk#479 for proper user gesture handling in Electron.
* Change toolbar background color from IFrame API #16468 fixed
* fix(toolbar #16468): implement toolbar background color via configOverwrite for web and mobile
* keep toolbarConfig defaults commented in config.js
* add trailing comma to commented toolbarConfig.backgroundColor
* fix: resolve linting errors
* feat(api): add toolbarVisibilityChanged event to IFrame API
* fix lint
* fix(recording): allow samesite iframe embeds to work with local recording
Skip capture handle validation when inside an iframe to ensure local
recording works. This only applies if the iframe is served from the
same domain.
* fix(recording): add missing line breaks for better readability in LocalRecordingManager