Skip to contentSkip to navigationSkip to topbar
Page tools
Useful for sharing or LLM
Accelerate development with AI

On this page
Looking for more inspiration?Visit the

Differences from the JavaScript SDK


(new)

Public Beta

The Video Media SDK for Node.js is currently available as a Public Beta product and the information contained in this document is subject to change. This means that some features are not yet implemented and others may be changed before the product is declared as Generally Available. Public Beta products are not covered by the Twilio Support Terms or Twilio Service Level Agreement(link takes you to an external page).

The Video Media SDK for Node.js is not a US Health Insurance Portability and Accountability Act (HIPAA)(link takes you to an external page) Eligible Service or Payment Card Industry Data Security Standard (PCI DSS)(link takes you to an external page) compliant and should not be enabled in workflows that are subject to HIPAA or PCI.

The Video Media SDK for Node.js shares the Room, Participant, and Track model and event names with the Twilio Video JavaScript SDK. It connects with the same Access Token and VideoGrant format. It uses the JavaScript SDK object model.


Shared concepts

shared-concepts page anchor

The following concepts work the same way in both SDKs:

  • To install either SDK, use npm.
  • To return a Room, use the connect() method. The Room exposes participants and emits Participant lifecycle events.
  • Remote media flows through RemoteParticipant, trackSubscribed, and trackUnsubscribed.
  • Tracks come in three varieties: video, audio, and data.
  • Publish tracks through LocalParticipant and received through RemoteParticipant.
  • Room re-emits Participant track events with the emitting RemoteParticipant as the final argument.

What changes on the server

what-changes-on-the-server page anchor

The Node.js SDK runs on a server without camera, microphone, or screen. The following table maps each feature between browser and server.

Video JavaScript SDKVideo Media SDK for Node.js
Send video framesCaptures local media from a camera or microphone.Push raw frames without device capture.
Render video framesRenders remote media.Has no attach() method. Delivers raw decoded frames through the frames() async iterator.
Accept audio inputsAccepts various input from devices.Uses 48 kHz mono S16LE PCM.
Choose codecsUses the codecs the browser supports, including VP8, VP9, and H.264.Supports only VP8 video and Opus or PCMU audio. Can't publish or subscribe to H.264 or VP9 video tracks. Any other value in preferredVideoCodecs or preferredAudioCodecs makes connect() reject with a TypeError.
Tune bandwidthSupports adaptive simulcast and the TrackPriority API.Uses bandwidthProfile, encodingParameters, and setContentPreferences().
Create local tracksCreates asynchronously after device permission.Creates synchronously without device prompt.
Send data messagessend() returns nothing.send() returns a promise that always resolves to { ok, messageId, error }, never rejects, and throws a RangeError synchronously for a message larger than 64 KB.
End a sessionYour app calls room.disconnect().Your app calls room.disconnect(), and then room.dispose() to release native resources. Until your app calls dispose(), the Node.js process doesn't exit.

The JavaScript SDK runs in a browser. The Node.js SDK runs on Node.js version 24.0.0 or later on Linux x86-64, or on macOS x86-64 for local development. On an Apple Silicon Mac, you need an x64 build of Node.js. To learn more, see system requirements.


  • Quickstart: Connect to a Room and move your first frames.
  • Work with media frames: Learn the I420 video and PCM audio formats that replace device capture and rendering.