Skill 125 · Zoom Meeting SDK Web
Subchapter 125.7
references/web.mdMarkdown8 KBView on GitHub
References
Component View Breakout RoomsAlso bundled
Browser SupportThe Zoom Meeting SDK for Web embeds the full Zoom meeting experience into your web application with two view options: Component View and Client View.
| View | Description | Use Case |
|---|---|---|
| Component View | Flexible, embeddable UI components | Custom layouts, React/Vue integration |
| Client View | Full-page Zoom meeting experience | Quick integration, standard Zoom UI |
| Approach | Technology | Port | View | Best For |
|---|---|---|---|---|
| Components | React + TypeScript + Vite | 3000 | Component | Modern, flexible integration |
| Local | React + Webpack + NPM | 9999 | Client | Traditional npm-based setup |
| CDN | Vanilla JS + CDN | 9999 | Client | Simple, no build tools |
npm install @zoom/meetingsdk<script src="https://source.zoom.us/3.1.6/lib/vendor/react.min.js"></script>
<script src="https://source.zoom.us/3.1.6/lib/vendor/react-dom.min.js"></script>
<script src="https://source.zoom.us/3.1.6/lib/vendor/redux.min.js"></script>
<script src="https://source.zoom.us/3.1.6/lib/vendor/redux-thunk.min.js"></script>
<script src="https://source.zoom.us/3.1.6/lib/vendor/lodash.min.js"></script>
<script src="https://source.zoom.us/3.1.6/zoom-meeting-3.1.6.min.js"></script>Note: CDN provides
ZoomMtg(Client View). ForZoomMtgEmbedded(Component View), use npm.
The Meeting SDK requires a signature from an authentication backend:
# Clone Zoom's auth endpoint sample
git clone https://github.com/zoom/meetingsdk-auth-endpoint-sample --depth 1
cd meetingsdk-auth-endpoint-sample
cp .env.example .env
# Edit .env with your SDK credentials
npm install && npm run startimport ZoomMtgEmbedded from '@zoom/meetingsdk/embedded';
const client = ZoomMtgEmbedded.createClient();
await client.init({
zoomAppRoot: document.getElementById('meetingSDKElement'),
language: 'en-US',
});
await client.join({
sdkKey: SDK_KEY,
signature: signature,
meetingNumber: meetingNumber,
userName: 'User',
password: password,
});Meeting SDK Web uses WebRTC for real-time communication with optimizations for:
// Check browser compatibility
const compatibility = client.checkSystemRequirements();
console.log('Video supported:', compatibility.video);
console.log('Audio supported:', compatibility.audio);
console.log('Screen share supported:', compatibility.screen);// SharedArrayBuffer is REQUIRED for 720p, gallery view, virtual background
const sabAvailable = typeof SharedArrayBuffer === 'function';
if (!sabAvailable) {
console.warn('HD features require SharedArrayBuffer');
console.warn('Enable COOP/COEP headers on your server');
}await client.init({
zoomAppRoot: document.getElementById('meetingSDKElement'),
language: 'en-US',
// Enable 720p (default true for SDK >= 2.8.0)
enableHD: true,
// Enable 1080p for webinar attendees (SDK >= 2.9.0)
enableFullHD: true,
});To enable 720p:
Resolution tiers:
Key limitation: If a 3rd participant turns video on, quality reverts to standard definition.
For optimal performance, configure these headers:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corpclient.on('connection-change', (payload) => {
console.log('Connection state:', payload.state);
});
client.on('user-added', (payload) => {
console.log('User joined:', payload);
});
client.on('user-removed', (payload) => {
console.log('User left:', payload);
});// User events
ZoomMtg.inMeetingServiceListener('onUserJoin', (data) => {
console.log('User joined:', data);
});
ZoomMtg.inMeetingServiceListener('onUserLeave', (data) => {
console.log('User left:', data);
});
// Waiting room
ZoomMtg.inMeetingServiceListener('onUserIsInWaitingRoom', (data) => {
console.log('User in waiting room:', data);
});
// Meeting status changes
ZoomMtg.inMeetingServiceListener('onMeetingStatus', (data) => {
console.log('Meeting status:', data);
});await client.join({
sdkKey: SDK_KEY,
signature: signature,
meetingNumber: meetingNumber,
userName: 'User',
});client.leaveMeeting();import { ZoomMtg } from '@zoom/meetingsdk';
// Check system requirements
console.log(ZoomMtg.checkSystemRequirements());
// Preload WebAssembly for faster init
ZoomMtg.preLoadWasm();
ZoomMtg.prepareWebSDK();
// Initialize and join
ZoomMtg.init({
leaveUrl: '/meeting-ended',
disableCORP: !window.crossOriginIsolated, // Disable if no COOP/COEP
success: () => {
ZoomMtg.join({
meetingNumber: '123456789',
userName: 'User Name',
signature: signature, // From auth endpoint
userEmail: 'user@example.com',
passWord: 'meeting-password',
success: (res) => {
console.log('Joined meeting');
ZoomMtg.getAttendeeslist({});
ZoomMtg.getCurrentUser({
success: (res) => console.log('Current user:', res.result.currentUser)
});
},
error: (err) => console.error('Join error:', err)
});
},
error: (err) => console.error('Init error:', err)
});For users in China, use the China-specific CDN:
// Set before preLoadWasm()
ZoomMtg.setZoomJSLib('https://jssdk.zoomus.cn/{VERSION}/lib', '/av');For government applications, apply for SDK credentials at ZFG Marketplace (opens in a new tab).
{
"dependencies": {
"@zoom/meetingsdk": "3.11.2-zfg"
}
}Client View:
ZoomMtg.setZoomJSLib('https://source.zoomgov.com/{VERSION}/lib', '/av');
ZoomMtg.init({
webEndpoint: 'www.zoomgov.com',
});Component View:
const client = ZoomMtgEmbedded.createClient();
client.init({
assetPath: 'https://source.zoomgov.com/{VERSION}/lib/av',
webEndpoint: 'www.zoomgov.com'
});