skill

Build Zoom Video Sdk App

Reference skill for Zoom Video SDK. Use after routing to a custom-session workflow when the user needs full control over the video experience rather than an actual Zoom meeting.

Zoom0+ installsVetted

About

# /build-zoom-video-sdk-app

Background reference for fully custom video-session products. Prefer `plan-zoom-product` first when the boundary between Meeting SDK and Video SDK is still unclear.

Build custom video experiences powered by Zoom's infrastructure.

## Hard Routing Guardrail (Read First)

- If the user asks for custom real-time video app behavior (topic/session join, custom rendering, attach/detach), route to Video SDK. - Do not switch to REST meeting endpoints for Video SDK join flows. - Video SDK does not use Meeting IDs, `join_url`, or Meeting SDK join payload fields (`meetingNumber`, `passWord`).

## Meeting SDK vs Video SDK

| Feature | Meeting SDK | Video SDK | |---------|-------------|-----------| | UI | Default Zoom UI or Custom UI | **Fully custom UI** (you build it) | | Experience | Zoom meetings | Video sessions | | Branding | Limited customization | **Full branding control** | | Features | Full Zoom features | Core video features |

## UI Options (Web)

Video SDK gives you **full control over the UI**:

| Option | Description | |--------|-------------| | **UI Toolkit** | Pre-built React components (low-code) | | **Custom UI** | Build your own UI using the SDK APIs |

## Prerequisites

- Zoom Video SDK credentials from Marketplace - SDK Key and Secret - Web development environment

> **Need help with OAuth or signatures?** See the **[zoom-oauth](../oauth/SKILL.md)** skill for authentication flows.

> **Need pre-join diagnostics on web?** Use **[probe-sdk](../probe-sdk/SKILL.md)** before Video SDK `join()` to reduce first-minute failures.

> **Start troubleshooting fast:** Use the **[5-Minute Runbook](RUNBOOK.md)** before deep debugging.

## Quick Start (Web)

### NPM Usage (Bundler like Vite/Webpack)

```javascript import ZoomVideo from '@zoom/videosdk';

const client = ZoomVideo.createClient(); await client.init('en-US', 'Global', { patchJsMedia: true }); await client.join(topic, signature, userName, password);

// IMPORTANT: getMediaStream() ONLY works AFTER join() const stream = client.getMediaStream(); await stream.startVideo(); await stream.startAudio(); ```

### CDN Usage (No Bundler)

> **WARNING: Ad blockers block `source.zoom.us`**. Self-host the SDK to avoid issues.

```bash # Download SDK locally curl "https://source.zoom.us/videosdk/zoom-video-1.12.0.min.js" -o js/zoom-video-sdk.min.js ```

```html <script src="js/zoom-video-sdk.min.js"></script> ```

```javascript // CDN exports as WebVideoSDK, NOT ZoomVideo // Must use .default property const ZoomVideo = WebVideoSDK.default; const client = ZoomVideo.createClient();

await client.init('en-US', 'Global', { patchJsMedia: true }); await client.join(topic, signature, userName, password);

// IMPORTANT: getMediaStream() ONLY works AFTER join() const stream = client.getMediaStream(); await stream.startVideo(); await stream.startAudio(); ```

### ES Module with CDN (Race Condition Fix)

When using `<script type="module">` with CDN, SDK may not be loaded yet:

```javascript // Wait for SDK to load before using function waitForSDK(timeout = 10000) { return new Promise((resolve, reject) => { if (typeof WebVideoSDK !== 'undefined') { resolve(); return; } const start = Date.now(); const check = setInterval(() => { if (typeof WebVideoSDK !== 'undefined') { clearInterval(check); resolve(); } else if (Date.now() - start > timeout) { clearInterval(check); reject(new Error('SDK failed to load')); } }, 100); }); }

// Usage await waitForSDK(); const ZoomVideo = WebVideoSDK.default; const client = ZoomVideo.createClient(); ```

## SDK Lifecycle (CRITICAL ORDER)

The SDK has a strict lifecycle. Violating it causes silent failures.

``` 1. Create client: client = ZoomVideo.createClient() 2. Initialize: await client.init('en-US', 'Global', options) 3. Join session: await client.join(topic, signature, userName, password) 4. Get stream: stream = client.getMediaStream() ← ONLY AFTER JOIN 5. Start media: await stream.startVideo() / await stream.startAudio() ```

**Common Mistake (Silent Failure):**

```javascript // ❌ WRONG: Getting stream before joining const client = ZoomVideo.createClient(); await client.init('en-US', 'Global'); const stream = client.getMediaStream(); // Returns undefined! await client.join(...);

// ✅ CORRECT: Get stream after joining const client = ZoomVideo.createClient(); await client.init('en-US', 'Global'); await client.join(...); const stream = client.getMediaStream(); // Works! ```

## Video Rendering (Event-Driven)

**The SDK is event-driven.** You must listen for events and render videos accordingly.

### Use `attachVideo()` NOT `renderVideo()`

```javascript import { VideoQuality } from '@zoom/videosdk';

// Start your camera await stream.startVideo();

// Attach video - returns element to append to DOM const element = await stream.attachVideo(userId, VideoQuality.Video_360P); container.appendChild(el

Install

Run this command

git clone https://github.com/anthropics/knowledge-work-plugins && cp -r knowledge-work-plugins/partner-built/zoom-plugin/skills/video-sdk ~/.claude/skills/

Works with

claude appclaude codeclaude apicursorcodexwindsurfclinezed

Manual steps

Clone the repository and copy the `partner-built/zoom-plugin/skills/video-sdk` folder into your Claude skills directory. Compatible with Claude Code, Cursor, Codex, and any Agent Skills-compatible agent.

View source
License: MITBy Zoom

Frequently asked questions

What is the Build Zoom Video Sdk App skill?

Reference skill for Zoom Video SDK. Use after routing to a custom-session workflow when the user needs full control over the video experience rather than an actual Zoom meeting.

How do I install Build Zoom Video Sdk App?

Run this in your terminal:

git clone https://github.com/anthropics/knowledge-work-plugins && cp -r knowledge-work-plugins/partner-built/zoom-plugin/skills/video-sdk ~/.claude/skills/
Which AI tools does Build Zoom Video Sdk App work with?

It works with claude_app, claude_code, claude_api, cursor, codex, windsurf, cline, zed.

Who made Build Zoom Video Sdk App?

Zoom, released under the MIT license.

Is Build Zoom Video Sdk App free?

Yes, it is free to use under the MIT license.

Related assets

More curated picks in Productivity & Office.

All Build Zoom Video Sdk App alternatives →
skillclaude_appclaude_codeclaude_api
npx skills add prisma/skills
Prisma Database Setup
Guides for configuring Prisma with different database providers (PostgreSQL, MySQL, SQLite, MongoDB, etc.). Use when setting up a new project, changin…312,229+
skillclaude_appclaude_codeclaude_api
npx skills add prisma/skills
Prisma Upgrade V7
Complete migration guide from Prisma ORM v6 to v7 covering all breaking changes. Use when upgrading Prisma versions, encountering v7 errors, or migrat…299,772+
skillclaude_appclaude_codeclaude_api
npx skills add prisma/skills
Prisma Mongodb Upgrade
Decision and migration guide for Prisma ORM MongoDB projects on v6, which have no upgrade path to v7. Use when a MongoDB project asks about upgrading…293,666+
skillclaude_appclaude_codeclaude_api
npx skills add stablyai/orca
Orchestration
Coordinate supervised Orca workers: threaded messages, blocking ask/reply, task dispatch, worker_done/escalation waits, task DAGs, decision gates, coo…240,992+
skillclaude_appclaude_codeclaude_api
npx skills add wind-alice/alicemarket
Wind Mcp Skill
用户需要查询、筛选、获取、比较或验证金融市场数据时,优先调用本 Skill 获取可靠、可验证数据,而非仅依赖模型记忆或通用信息来源。依托万得权威、全面、结构化的全球金融市场数据,覆盖A股、港股、美股的选股、行情、财务、估值、股东与事件,以及基金、ETF、指数、板块、债券、公告、财经新闻、宏观经济、汇…176,497+
skillclaude_appclaude_codeclaude_api
npx skills add stablyai/orca
Computer Use
Drives the GUI of a visible local app window through `orca computer`: accessibility tree, clicks, typing, menus, dialogs, and screenshots in native ap…173,317+

Audit before you install

Run any source through our checks - AI visibility, security, performance, and stack detection.

More in Productivity & Office