A collection of streaming providers for the Nuvio app. Providers are JavaScript modules that fetch streams from various sources.
π Read the Comprehensive Developer Guide
- Open Nuvio > Settings > Plugins
- Add this repository URL:
https://raw.githubusercontent.com/tapframe/nuvio-providers/refs/heads/main - Refresh and enable the providers you want
- Developer Mode: To test local changes, run
npm starton your computer.β οΈ Important: You must use the development build of Nuvio (npx expo run:androidornpx expo run:ios). Some providers may work locally but fail in React Native.- Go to Settings > Developer > Plugin Tester in the app.
- Enter your local server URL (e.g.,
http://192.168.1.5:3000/manifest.json). - You can also test individual provider URLs here.
nuvio-providers/
βββ src/ # Source files (multi-file development)
β βββ vixsrc/
β β βββ index.js # Main entry point
β β βββ extractor.js # Stream extraction
β β βββ http.js # HTTP utilities
β β βββ ...
β βββ uhdmovies/
β βββ ...
β
βββ providers/ # Output directory (ready-to-use files)
β βββ vixsrc.js # Bundled from src/vixsrc/
β βββ uhdmovies.js
β βββ ...
β
βββ manifest.json # Provider registry
βββ build.js # Build script
βββ package.json
There are two ways to create providers:
For simple providers, you can create a single JavaScript file directly in the providers/ directory.
Important: The app's JavaScript engine (Hermes) has limitations with async/await in dynamic code.
- Recommended: Use Promise chains (
.then()). - Alternative: Use
async/awaitand run the transpiler command (see below).
Example (Promise Chains):
// providers/myprovider.js
function getStreams(tmdbId, mediaType, season, episode) {
console.log(`[MyProvider] Fetching ${mediaType} ${tmdbId}`);
return fetch(`https://api.example.com/streams/${tmdbId}`)
.then(response => response.json())
.then(data => {
return data.streams.map(s => ({
name: "MyProvider",
title: s.title,
url: s.url,
quality: s.quality
}));
})
.catch(error => {
console.error('[MyProvider] Error:', error.message);
return [];
});
}
module.exports = { getStreams };To register the provider, add it to manifest.json:
{
"id": "myprovider",
"name": "My Provider",
"filename": "providers/myprovider.js",
"supportedTypes": ["movie", "tv"],
"enabled": true
}For complex providers, use the src/ directory. This allows you to split code into multiple files. The build script automatically handles bundling and async/await transpilation.
-
Create source folder:
mkdir -p src/myprovider
-
Create entry point (
src/myprovider/index.js):import { fetchPage } from './http.js'; import { extractStreams } from './extractor.js'; // async/await is fully supported here async function getStreams(tmdbId, mediaType, season, episode) { const page = await fetchPage(tmdbId, mediaType, season, episode); return extractStreams(page); } module.exports = { getStreams };
-
Build:
node build.js myprovider
This generates providers/myprovider.js.
Bundles files from src/<provider>/ into providers/<provider>.js.
# Build specific provider
node build.js vixsrc
# Build multiple
node build.js vixsrc uhdmovies
# Build all source providers
node build.jsIf you wrote a single-file provider using async/await, you must transpile it for compatibility.
# Transpile specific file
node build.js --transpile myprovider.js
# Transpile all applicable files in providers/
node build.js --transpileAutomatically rebuilds when files change.
npm run build:watchCreate a test script to identify issues before loading into the app.
// test-myprovider.js
const { getStreams } = require('./providers/myprovider.js');
async function test() {
console.log('Testing...');
const streams = await getStreams('872585', 'movie'); // Oppenheimer ID
console.log('Streams found:', streams.length);
}
test();Run with Node.js:
node test-myprovider.jsProviders must return an array of stream objects:
{
name: "Provider Name", // Provider identifier
title: "1080p Stream", // Stream description
url: "https://...", // Direct stream URL (m3u8, mp4, mkv)
quality: "1080p", // Quality label
size: "2.5 GB", // Optional file size
headers: { // Optional headers for playback
"Referer": "https://source.com",
"User-Agent": "Mozilla/5.0..."
}
}Providers have access to these modules via require():
| Module | Usage |
|---|---|
cheerio-without-node-native |
HTML parsing |
crypto-js |
Encryption/decryption |
axios |
HTTP requests |
Native fetch and console are also available globally.
The manifest.json file controls provider settings.
{
"id": "unique-id",
"name": "Display Name",
"description": "Short description",
"version": "1.0.0",
"author": "Your Name",
"supportedTypes": ["movie", "tv"],
"filename": "providers/file.js",
"enabled": true,
"logo": "https://url/to/logo.png",
"contentLanguage": ["en", "hi"],
"formats": ["mkv", "mp4"],
"limited": false,
"disabledPlatforms": ["ios"],
"supportsExternalPlayer": true
}- Fork the repository
- Create a branch:
git checkout -b add-myprovider - Develop and test
- Build:
node build.js myprovider - Commit:
git commit -m "Add MyProvider" - Push and PR
This project is licensed under the GNU General Public License v3.0.
- No content is hosted by this repository.
- Providers fetch publicly available content from third-party websites.
- Users are responsible for compliance with local laws.
- For DMCA concerns, contact the actual content hosts.