Skip to main content

Browser Compatibility

lib-jitsi-meet uses the BrowserCapabilities class for browser detection and feature support checking, along with webrtc-adapter for polyfills.

BrowserCapabilities Class

Extends BrowserDetection from @jitsi/js-utils with lib-jitsi-meet-specific capabilities.
Source: modules/browser/BrowserCapabilities.ts:1, 22

Minimum Browser Versions

Source: modules/browser/BrowserCapabilities.ts:4-7

Version Detection

Safari Version
Source: modules/browser/BrowserCapabilities.ts:41-47 iOS Version
Source: modules/browser/BrowserCapabilities.ts:28-34

Browser Support Checks

Overall Support

Source: modules/browser/BrowserCapabilities.ts:101-116

Platform-Specific Support

Android
Source: modules/browser/BrowserCapabilities.ts:123-125 iOS
The iPad detection workaround is necessary because iPadOS 13+ masquerades as macOS in the user agent. Source: modules/browser/BrowserCapabilities.ts:10-11, 132-140

Mobile Detection

Source: modules/browser/BrowserCapabilities.ts:83-85, 65-67, 74-76

Trusted Web App Detection

Detects if running as a Trusted Web App (Android). Source: modules/browser/BrowserCapabilities.ts:92-94

Codec Support

setCodecPreferences API

Source: modules/browser/BrowserCapabilities.ts:178-189

Codec Selection API

Chrome 126+ supports changing codecs on encodings without renegotiation. Source: modules/browser/BrowserCapabilities.ts:199-201

VP9 Support

See: https://bugs.webkit.org/show_bug.cgi?id=231074 Source: modules/browser/BrowserCapabilities.ts:276-281

SVC Support

Scalable Video Coding is supported on all browsers except Firefox. Source: modules/browser/BrowserCapabilities.ts:288-290

Simulcast

SDP Munging for Simulcast

Chrome, Safari, and React Native use SDP munging. Firefox uses RIDs/MIDs. Source: modules/browser/BrowserCapabilities.ts:297-299

RIDs for Simulcast

Source: modules/browser/BrowserCapabilities.ts:307-309

Scalability Mode API

Chrome 113+ supports the Scalability Mode API for VP9/AV1 simulcast and full SVC. Source: modules/browser/BrowserCapabilities.ts:255-257

E2EE Support

Insertable Streams

Source: modules/browser/BrowserCapabilities.ts:340-357

Encoded Transform

Alternative to insertable streams, currently Safari/WebKit behind a flag. Source: modules/browser/BrowserCapabilities.ts:331-333

Audio RED Format

Source: modules/browser/BrowserCapabilities.ts:364-367

Statistics Support

Bandwidth Statistics

Source: modules/browser/BrowserCapabilities.ts:167-171

RTT Statistics

Source: modules/browser/BrowserCapabilities.ts:236-246

Receiver Stats

Source: modules/browser/BrowserCapabilities.ts:226-229

Track-Based Stats

Older Chrome versions (< 112) support track-based statistics for resolution/framerate. Source: modules/browser/BrowserCapabilities.ts:265-267

Media Capabilities

getDisplayMedia Support

Source: modules/browser/BrowserCapabilities.ts:316-320

Device Change Events

Source: modules/browser/BrowserCapabilities.ts:216-219

Video Mute Strategy

On Firefox, the MediaStream is removed from PeerConnection on mute to turn off camera. See: https://bugzilla.mozilla.org/show_bug.cgi?id=1735951 Source: modules/browser/BrowserCapabilities.ts:56-58

Video Mute Events

Chrome and React Native fire ‘onmute’/‘onunmute’ events when connection is interrupted. Source: modules/browser/BrowserCapabilities.ts:158-160

Browser-Specific Features

User Interaction for Unmute

Older Firefox versions require user interaction before unmute. Source: modules/browser/BrowserCapabilities.ts:148-150

RTX Support

Source: modules/browser/BrowserCapabilities.ts:383-387

Dependency Descriptor Headers

Firefox 136+ supports Dependency Descriptor RTP header extension. Source: modules/browser/BrowserCapabilities.ts:208-210

Voice Activity Detection

VADAudioAnalyser service is only supported on Chromium-based browsers. Source: modules/browser/BrowserCapabilities.ts:374-376

webrtc-adapter Integration

lib-jitsi-meet uses webrtc-adapter for WebRTC API polyfills:
This provides:
  • Unified WebRTC API across browsers
  • getUserMedia polyfill
  • RTCPeerConnection shims
  • Browser compatibility fixes
Source: modules/RTC/RTCUtils.js:3, CLAUDE.md:53

Usage Pattern

Common Compatibility Checks

Before Using APIs

Platform Detection

iPad Detection IssueStarting with iPadOS 13, Safari pretends to be macOS 10.15.7 in the user agent:
This workaround is necessary for proper iPad detection.Source: modules/browser/BrowserCapabilities.ts:10-11, 134-136

Best Practices

  1. Always check feature support: Don’t assume APIs exist
  2. Use platform detection for optimization: Different defaults for mobile
  3. Handle browser bugs: Apply workarounds where necessary
  4. Graceful degradation: Provide fallbacks for unsupported features
  5. Check minimum versions: Block unsupported browsers early

Next Steps