ESC
v1.0 Addons
StreamCube Addon SDK

Build powerful addons
for StreamCube

11 addon types. HTTP services, WASM sandboxed transforms, declarative JSON configs. One manifest, infinite possibilities.

HTTP Services
Node.js, Python, Go — any language, any host
WASM Sandbox
Rust, Go, C — zero-access sandboxed execution
Declarative JSON
Themes, filters, overlays — no code required
Stremio Compatible. StreamCube extends the Stremio addon protocol. Any existing Stremio addon works in StreamCube without changes. The streamcube manifest field unlocks 8 additional addon types exclusive to StreamCube.

Compatibility Matrix

FeatureStremioStreamCube
Stream providersYesYes
Catalog/metadataYesYes
SubtitlesYesYes
Transform/decrypt (WASM)NoYes
ThemesNoYes
EPGNoYes
IPTV channelsNoYes
RecommendationsNoYes
Content filtersNoYes
CalendarNoYes
Player overlaysNoYes
.stcb bundlesNoYes
Addon config UINoYes

Quick Start

Every StreamCube addon starts with a manifest. Here's the fastest path to a working addon.

1

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"
  }
}
2

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)
3

Install in StreamCube

URL Install

Settings → Streaming → Add Addon → paste your manifest URL

Or deep link: streamcube://addon/install?url=https://...

Bundle Install

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.

Think in compatibility levels, not separate manifest formats. A Stremio addon is just the standard Stremio manifest. A StreamCube addon is that same manifest plus the optional 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.
Important: 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)

FieldTypeRequiredDescription
idstringYesReverse-domain identifier. Pattern: ^[a-z][a-z0-9]*(\.[a-z][a-z0-9]*)+$. When same addon installed multiple times, StreamCube appends #1, #2, etc.
versionstringYesSemantic version: MAJOR.MINOR.PATCH
namestringYesDisplay name (max 50 chars, no HTML/markdown)
descriptionstringNoShort description (max 500 chars, plain text)
logostringNoURL to 256x256 PNG/SVG/WebP logo. For .stcb bundles, use relative path: assets/logo.png
typesarrayYes"movie", "series", "tv", "channel", "other"
resourcesarrayYes"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.
catalogsarrayNoCatalog definitions. Required when resources includes "catalog". Each catalog has type, id, name, and optional extra params (search, genre, skip).

StreamCube Extension

FieldTypeRequiredDescription
manifestVersionintegerYesSchema version. Currently 1. Higher versions rejected by older apps.
addonTypestringYesPrimary 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.
capabilitiesarrayNoOptional fine-grained hints for tooling and future validation. Do not use this field instead of resources or addonType.
minAppVersionstringNoMinimum StreamCube version required
permissionsarrayNoRequired permissions. Users prompted on install.
configSchemaarrayNoConfiguration 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.

CapabilityDescriptionValid for
catalogBrowsable catalogsmetadata
metaDetailed metadatametadata
streamPlayable streamsstream
subtitlesSubtitle trackssubtitle
stream_interceptPre-resolve URL transformtransform
stream_transformPost-resolve URL/data transformtransform
themeUI themingtheme
epgEPG dataepg
iptvLive TV channelsiptv
recommendationContent recommendationsrecommendation
content_filterContent filteringfilter
calendar_entriesCalendar entriescalendar
player_overlayPlayer overlay elementsplayer-overlay
watch_history_readRead user watch historyrecommendation, 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 TypeUI ElementValue type
textText inputString
passwordMasked text inputString (stored encrypted)
numberNumber inputNumber
toggleSwitch/checkboxBoolean
selectDropdown menuString

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.

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.

Architecture

Stream Addons
Metadata Addons
Subtitle Addons
StreamCube Backend
Transform Pipeline (WASM)
Player
Theme
Overlay
EPG
IPTV
Filter
Calendar
Recs