SDK quickstart

Install Vyla SDK, resolve a source, and build a safe server-side integration.

Before you start

Vyla SDK is for server-side Node.js. It contains provider integrations and makes outbound requests from the process where you install it. Do not import it into a browser bundle or expose provider results, credentials, or internal source keys directly to untrusted clients.

You need Node.js 18 or later and, for sources that resolve title metadata, a TMDB API key.

Install and initialize

npm install @vyla-entertainment/sdk
pnpm install @vyla-entertainment/sdk
yarn add @vyla-entertainment/sdk
import VylaSDK from "@vyla-entertainment/sdk";

const vyla = new VylaSDK({
  tmdbApiKey: process.env.TMDB_API_KEY,
  penguManifest: process.env.PENGU_MANIFEST
});

Keep TMDB_API_KEY and any deployment configuration in server-side environment variables. Never commit them or send them to a client.

Resolve a movie

First inspect active providers. Provider availability changes over time, so select a key from the running configuration instead of hard-coding a placeholder.

const providers = vyla.getSources(true);
console.table(providers.map(({ key, label }) => ({ key, label })));

const provider = providers[0];
const result = await vyla.getStream(provider.key, 155);
const candidates = result.allUrls ?? [result];

console.log(candidates.map(({ url, type, quality }) => ({ url, type, quality })));

155 is a TMDB movie ID. For an episode, include season and episode:

const result = await vyla.getStream(provider.key, 1396, 1, 1);

Make it resilient

Provider results are inherently variable: a source can fail, time out, return more than one candidate, or be temporarily disabled. In production:

  1. Probe sources or maintain a recent availability signal before choosing one.
  2. Give every provider call a request deadline in your application.
  3. Treat allUrls as fallback candidates, not a guarantee that every URL will play.
  4. Return only the fields your client needs and validate requests at your own API boundary.
  5. Cache and rate-limit at your boundary to avoid repeatedly triggering upstream work.
const health = await vyla.probeAllSources();
const usableKey = Object.entries(health).find(([, result]) => result.ok)?.[0];

if (!usableKey) throw new Error("No providers are currently available");

const stream = await vyla.getStream(usableKey, 155);

Next steps

  • Read the complete SDK reference for methods and return shapes.
  • Learn provider flags, timeout behavior, and source keys in Providers.
  • Choose Stream API only when an SSE HTTP interface better fits your client architecture.