# Welcome to Zoom Video SDK [Zoom Video SDK](/docs/video-sdk/) enables developers to build custom video experiences with Zoom's core technology. Keep your existing user interface and let Zoom's global infrastructure power the real-time audio and video. Start migrating with 10,000 free minutes per month. Select a platform to start migrating from Twilio Programmable Video to Zoom Video SDK. Migrate as fast as 1 week per platform. - [Android](/docs/video-sdk/twilio/android/) - [iOS](/docs/video-sdk/twilio/ios/) - [Web](/docs/video-sdk/twilio/web/) Read about some [Twilio migration success stories](/twilio/). ## Web migration example Keep your existing user interface and simply swap out your Twilio Video code for Zoom Video SDK code. Migrate as fast as 1 week per platform. ```javascript // Twilio Video: import * as TwilioVideo from "twilio-video"; var twilioVideo = TwilioVideo; var twilioRoom; twilioVideo.connect(TOKEN, { name: "yourName" }).then((room) => { twilioRoom = room; }); ``` ```javascript // Zoom Video SDK: import ZoomVideo from "@zoom/videosdk"; var zoomVideo = ZoomVideo.createClient(); var zoomSession; zoomVideo.init("en-US", "Global", { patchJsMedia: true }).then(() => { zoomVideo .join("sessionName", TOKEN, "yourName", "sessionPasscode") .then(() => { zoomSession = zoomVideo.getMediaStream(); }); }); ``` ```javascript // Twilio Video: // Start: twilioVideo .createLocalVideoTrack({ height: { ideal: 720, min: 480, max: 1080 }, width: { ideal: 1280, min: 640, max: 1920 }, aspectRatio: 16 / 9, }) .then((localVideoTrack) => { twilioRoom.localParticipant.publishTrack(localVideoTrack); const localMediaContainer = document.getElementById( "twilio-self-view-div", ); localMediaContainer.appendChild(localVideoTrack.attach()); }); // Stop: twilioRoom.localParticipant.videoTracks.forEach((publication) => { publication.unpublish(); publication.track.stop(); var selfTwilioVideo = document.getElementById("twilio-self-view-div"); selfTwilioVideo.querySelector("video").remove(); }); ``` ```javascript // Zoom Video SDK: // Start: zoomSession.startVideo().then(() => { zoomSession .attachVideo(zoomVideo.getCurrentUserInfo().userId, RESOLUTION) .then((userVideo) => { document .querySelector("video-player-container") .appendChild(userVideo); }); }); // Stop: zoomSession.stopVideo().then(() => { zoomSession.detachVideo(USER_ID); }); ``` ```javascript // Twilio Video: twilioRoom.on("participantConnected", (participant) => { participant.on("trackSubscribed", (track) => { document .getElementById("twilio-user-view-div") .appendChild(track.attach()); }); participant.on("trackUnsubscribed", (track) => { var selfTwilioVideo = document.getElementById("twilio-user-view-div"); selfTwilioVideo.querySelector("video").remove(); }); }); ``` ```javascript // Zoom Video SDK: zoomVideo.on("peer-video-state-change", (payload) => { if (payload.action === "Start") { zoomSession.attachVideo(payload.userId, 3).then((userVideo) => { document .querySelector("video-player-container") .appendChild(userVideo); }); } else if (payload.action === "Stop") { zoomSession.detachVideo(payload.userId); } }); ``` ```javascript // Twilio Video: // Start Audio: twilioVideo.createLocalAudioTrack().then((localAudioTrack) => { twilioRoom.localParticipant.publishTrack(localAudioTrack); const audioElement = localAudioTrack.attach(); document.body.appendChild(audioElement); }); // Unmute: twilioRoom.localParticipant.audioTracks.forEach((publication) => { publication.track.enable(); }); // Mute: twilioRoom.localParticipant.audioTracks.forEach((publication) => { publication.track.disable(); }); ``` ```javascript // Zoom Video SDK: // Start Audio: zoomSession.startAudio(); // Unmute: zoomSession.unmuteAudio(); // Mute: zoomSession.muteAudio(); ``` ```javascript // Twilio Video: twilioVideo.disconnect(); ``` ```javascript // Zoom Video SDK: zoomVideo.leave(); ``` ## Feature map The Zoom Video SDK has [complete feature parity](/docs/video-sdk/twilio/map/) with the Twilio Video platform, plus many additional features to build with. This is not just a 1:1 migration, it's access to even more possibilities. ## Migration services Migrate faster with Zoom's support options. - Dedicated Migration Engineers: Hands on migration experts to help during your proof of concept (POC). Ask your [Zoom account rep](https://www.zoom.com/en/video-sdk/#contact-block-get-started-with-video-sdk-from-zoom) to get connected. - Premier Developer Support: [Support plans for after your POC](https://explore.zoom.us/en/support-plans/developer/). - Professional Migration Services: Have a [Certified Zoom Developer Partner](https://explore.zoom.us/en/lp/developer-partner-services/) handle the migration for you. ## Read more - [Zoom and Twilio migration announcement](https://www.zoom.com/en/blog/welcome-twilio-video-developers-3-reasons-why-zoom-s-video-sdk-is-a-win-for-you/) - [Zoom Video SDK Performance Report](https://www.zoom.com/en/resources/video-sdk-performance-guide/) - [Zoom Video SDK Web Stack (WebRTC, WebAssembly, custom code)](https://www.zoom.com/en/blog/how-zooms-video-sdk-stacks-up/) - [Zoom Video SDK Fact Sheet](/blog/video-sdk-fact-sheet/) ## Get started Get started with the [official migration guides](#migration-guides). For questions, contact us. - [Developer Sales](https://www.zoom.com/en/video-sdk/#contact-block-get-started-with-video-sdk-from-zoom) - [Developer Forum](https://devforum.zoom.us/c/video-sdk/) - [Developer Support](/support/) - [Developer Partner Services](https://explore.zoom.us/en/lp/developer-partner-services/) _See [Video SDK Plans & Pricing](https://zoom.us/pricing/developer)._