Nuvio Providers
A collection of streaming providers for the Nuvio app. Providers are JavaScript modules that fetch streams from various sources.
📖 Read the Comprehensive Developer Guide
Quick Start
Using in Nuvio App
- Open Nuvio > Settings > Plugins
- Add this repository URL:
https://raw.githubusercontent.com/yoruix/nuvio-providers/refs/heads/main/manifest.json - 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.
Project Structure
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
Development
There are two ways to create providers:
Option 1: Single-File Provider
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 }
Option 2: Multi-File Provider (Recommended)
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.
Building
Build Source Providers
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.js
Transpile Single-File Providers
If 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 --transpile
Watch Mode
Automatically rebuilds when files change.
npm run build:watch
Testing
Create 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.js
Stream Object Format
Providers 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..." } }
Available Modules
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.
Manifest Options
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 }
Contributing
- 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
License
This project is licensed under the GNU General Public License v3.0.
Disclaimer
- 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.