Build powerful addons
for StreamCube
11 addon types. HTTP services, WASM sandboxed transforms, declarative JSON configs. One manifest, infinite possibilities.
streamcube manifest field unlocks 8 additional addon types exclusive to StreamCube.
Compatibility Matrix
| Feature | Stremio | StreamCube |
|---|---|---|
| Stream providers | Yes | Yes |
| Catalog/metadata | Yes | Yes |
| Subtitles | Yes | Yes |
| Transform/decrypt (WASM) | No | Yes |
| Themes | No | Yes |
| EPG | No | Yes |
| IPTV channels | No | Yes |
| Recommendations | No | Yes |
| Content filters | No | Yes |
| Calendar | No | Yes |
| Player overlays | No | Yes |
| .stcb bundles | No | Yes |
| Addon config UI | No | Yes |
Quick Start
Every StreamCube addon starts with a manifest. Here's the fastest path to a working addon.
Create a manifest
The manifest describes your addon's identity and capabilities.
{
"id": "com.example.my-streams",
"version": "1.0.0",
"name": "My Stream Addon",
"description": "Provides streams from my source",
"types": ["movie", "series"],
"resources": ["stream"],
"catalogs": [],
"streamcube": {
"manifestVersion": 1,
"addonType": "stream",
"capabilities": ["stream"],
"minAppVersion": "2.0.0"
}
}
Implement the HTTP API
For HTTP-based addons, implement the standard Stremio endpoints. Use any language or framework.
const express = require('express');
const app = express();
app.get('/manifest.json', (req, res) => {
res.json(manifest);
});
app.get('/stream/:type/:id.json', (req, res) => {
const streams = getStreams(req.params.type, req.params.id);
res.json({ streams });
});
app.listen(3000);
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/manifest.json')
def manifest():
return jsonify(MANIFEST)
@app.route('/stream/<type>/<id>.json')
def stream(type, id):
streams = get_streams(type, id)
return jsonify({'streams': streams})
app.run(port=3000)
Install in StreamCube
Settings → Streaming → Add Addon → paste your manifest URL
Or deep link: streamcube://addon/install?url=https://...
Package as .stcb and import via Settings → Streaming → Import Bundle. Or drag & drop onto the app window (desktop).
Manifest Format
The manifest is a JSON document describing your addon's identity, capabilities, and configuration. It extends the Stremio manifest with the streamcube extension.
streamcube extension. The .stcb bundle format still carries a single source-of-truth manifest file named streamcube_manifest.json; the filename is bundle-specific, not a different schema.resources and streamcube.addonType answer different questions. resources describe which Stremio protocol endpoints your addon exposes (/catalog, /meta, /stream, /subtitles). addonType tells StreamCube what runtime role the addon plays: stream provider, theme, transform, recommendation engine, calendar source, player overlay, and so on. For classic Stremio addons these values may overlap, and that is intentional.Full Example
{
"id": "com.example.my-addon",
"version": "1.0.0",
"name": "My Addon",
"description": "A short description",
"logo": "https://example.com/logo.png",
"types": ["movie", "series"],
"resources": ["catalog", "meta", "stream", "subtitles"],
"catalogs": [
{
"type": "movie", "id": "my-movies", "name": "My Movies",
"extra": [
{ "name": "search", "isRequired": false },
{ "name": "genre", "isRequired": false, "options": ["Action", "Comedy", "Drama"] },
{ "name": "skip", "isRequired": false }
]
}
],
"streamcube": {
"manifestVersion": 1,
"addonType": "stream",
"capabilities": ["stream"],
"minAppVersion": "2.0.0",
"permissions": ["stream"],
"configSchema": [
{ "key": "api_key", "type": "password", "label": "API Key", "required": true }
]
}
}
Standard Fields (Stremio-compatible)
| Field | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Reverse-domain identifier. Pattern: ^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$. When same addon installed multiple times, StreamCube appends #1, #2, etc. |
version | string | Yes | Semantic version: MAJOR.MINOR.PATCH |
name | string | Yes | Display name (max 50 chars, no HTML/markdown) |
description | string | No | Short description (max 500 chars, plain text) |
logo | string | No | URL to 256x256 PNG/SVG/WebP logo. For .stcb bundles, use relative path: assets/logo.png |
types | array | Yes | "movie", "series", "tv", "channel", "other" |
resources | array | Yes | "catalog", "meta", "stream", "subtitles". This is the Stremio protocol surface your addon implements, not the StreamCube addon classification. Stream-only addons (no "catalog") are automatically hidden from the UI. |
catalogs | array | No | Catalog definitions. Required when resources includes "catalog". Each catalog has type, id, name, and optional extra params (search, genre, skip). |
StreamCube Extension
| Field | Type | Required | Description |
|---|---|---|---|
manifestVersion | integer | Yes | Schema version. Currently 1. Higher versions rejected by older apps. |
addonType | string | Yes | Primary StreamCube runtime role: stream, metadata, subtitle, transform, theme, epg, iptv, recommendation, filter, calendar, player-overlay. StreamCube uses this to enable non-Stremio flows such as recommendation requests, calendar aggregation, theme activation, transform pipelines, IPTV/EPG caching, and player overlay loading. |
capabilities | array | No | Optional fine-grained hints for tooling and future validation. Do not use this field instead of resources or addonType. |
minAppVersion | string | No | Minimum StreamCube version required |
permissions | array | No | Required permissions. Users prompted on install. |
configSchema | array | No | Configuration fields. Auto-generated settings UI. |
Capabilities
capabilities are optional hints. Use them when you want to describe finer-grained behavior for tooling, validators, or future compatibility checks. The runtime decisions in StreamCube are based primarily on Stremio resources plus the StreamCube addonType and type-specific config.
| Capability | Description | Valid for |
|---|---|---|
catalog | Browsable catalogs | metadata |
meta | Detailed metadata | metadata |
stream | Playable streams | stream |
subtitles | Subtitle tracks | subtitle |
stream_intercept | Pre-resolve URL transform | transform |
stream_transform | Post-resolve URL/data transform | transform |
theme | UI theming | theme |
epg | EPG data | epg |
iptv | Live TV channels | iptv |
recommendation | Content recommendations | recommendation |
content_filter | Content filtering | filter |
calendar_entries | Calendar entries | calendar |
player_overlay | Player overlay elements | player-overlay |
watch_history_read | Read user watch history | recommendation, filter |
Config Schema
Define user-configurable fields and StreamCube generates the settings UI. Config values are encrypted at rest (AES-256-GCM). Password fields are masked in API responses.
{
"configSchema": [
{
"key": "api_key",
"type": "password",
"label": "API Key",
"description": "Get your key from the provider dashboard",
"required": true
},
{
"key": "quality",
"type": "select",
"label": "Preferred Quality",
"options": [
{ "value": "4k", "label": "4K Ultra HD" },
{ "value": "1080p", "label": "Full HD" },
{ "value": "auto", "label": "Automatic" }
],
"default": "auto"
}
]
}
| Field Type | UI Element | Value type |
|---|---|---|
text | Text input | String |
password | Masked text input | String (stored encrypted) |
number | Number input | Number |
toggle | Switch/checkbox | Boolean |
select | Dropdown menu | String |
Validation rules: min (min value/length), max (max value/length), pattern (regex for text fields).
Addon Types
StreamCube supports 11 addon types organized into three execution models.
Stream
Provides playable stream URLs for movies and series.
Metadata
Browsable catalogs, posters, descriptions, episode lists.
Subtitle
Subtitle tracks in VTT/SRT format.
Transform
Decrypt/rewrite stream URLs in sandboxed WASM.
Theme
Custom colors, fonts, card styles, layout.
EPG
Electronic Program Guide for live TV.
IPTV
Live TV channel lists with stream URLs.
Recommendation
Personalized suggestions from watch history.
Filter
Content filtering and parental controls.
Calendar
Air dates, premieres, upcoming content.
Player Overlay
Custom player controls via JSON merge patch.
Lifecycle
Installation: User provides URL or .stcb file → manifest parsed → permissions approved → config dialog shown → addon registered in DB → WASM compiled and cached (if applicable).
Runtime: HTTP addons called on demand. WASM loaded into Wazero runtime. JSON configs applied directly.
Uninstallation: Config values deleted. WASM unloaded. IPTV/EPG data cleaned up. Theme/filter/overlay reverts to defaults.