---
"@context": https://schema.org
"@type": TechArticle
"@id": https://www.twilio.com/docs/video/node-differences-from-javascript-sdk#article
headline: Differences from the JavaScript SDK
description: Map what you know from the Twilio Video JavaScript SDK to the server-side Video Media SDK for Node.js, including raw frames and platform support.
url: https://www.twilio.com/docs/video/node-differences-from-javascript-sdk
inLanguage: en
dateModified: 2026-09-15T15:39:36.000Z
author:
  "@type": Organization
  name: Twilio Developer Education Team
publisher:
  "@type": Organization
  name: Twilio
---

# Differences from the JavaScript SDK

The Video Media SDK for Node.js shares the [Room][vRoom], [Participant][vPart], and [Track][vTrack] 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

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

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 SDK                                   | Video Media SDK for Node.js                                                   |
| ------------------- | ------------------------------------------------------ | ----------------------------------------------------------------------------- |
| Send video frames   | Captures local media from a camera or microphone.      | Push raw frames without device capture.                                       |
| Render video frames | Renders remote media.                                  | Doesn't render the raw decoded frames.                                        |
| Accept audio inputs | Accepts various input from devices.                    | Uses 48 kHz mono S16LE PCM.                                                   |
| Tune bandwidth      | Supports adaptive simulcast and the TrackPriority API. | Uses `bandwidthProfile`, `encodingParameters`, and `setContentPreferences()`. |
| Create local tracks | Creates asynchronously after device permission.        | Creates synchronously without device prompt.                                  |

## Platform differences

The JavaScript SDK runs in a browser. The Node.js SDK runs on Node.js 24 or later on Linux x64 or macOS x64. On Apple Silicon, install Rosetta. To learn more, see [system requirements][].

## Next steps

* [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.

[Quickstart]: /docs/video/node-getting-started

[system requirements]: /docs/video/node#system-requirements

[Twilio Video JavaScript SDK]: /docs/video/javascript

[Work with media frames]: /docs/video/node-working-with-media-frames

[vPart]: /docs/video/api/participants

[vRoom]: /docs/video/api/rooms-resource

[vTrack]: /docs/video/api/publishedtrack
