Skip to main content

Overview

The manifest is a JSON document that describes an addon’s capabilities, metadata, and supported resources. It’s served at the /manifest.json endpoint and must conform to the Manifest structure.

Manifest Structure

Required Fields

id
string
required
Unique identifier for the addon. Must be unique across all addons.Example: "com.example.movies"
version
semver::Version
required
Semantic version of the addon following semver specification.Example: "1.0.0"
name
string
required
Human-readable name displayed in the UI.Example: "My Awesome Movies Addon"
types
string[]
required
List of content types supported by the addon.Common types: movie, series, tv, channel, anime
If this list is empty, the addon is considered to support no types.
resources
ManifestResource[]
required
Resources provided by the addon. Can be specified in short or full format.See Resources section below.

Optional Fields

contactEmail
string
Email address for addon support or contact.
description
string
Brief description of what the addon provides.
URL to the addon’s logo image.
background
URL
URL to a background image for the addon.
idPrefixes
string[]
Globally supported ID prefixes (e.g., ["tt", "kitsu"]).If specified, resources should only use prefixes from this list.
catalogs
ManifestCatalog[]
List of catalogs provided by the addon.See Catalogs section below.
addonCatalogs
ManifestCatalog[]
Catalogs that list other addons.
behaviorHints
ManifestBehaviorHints
Hints about addon behavior and capabilities.See Behavior Hints section below.

Resources

Resources can be defined in two formats:

Short Format

Simply specify the resource name as a string:
{
  "resources": ["catalog", "meta", "stream", "subtitles"]
}
This indicates the addon supports these resources for all types and ID prefixes defined globally in the manifest.

Full Format

Specify resource-specific types and ID prefixes:
{
  "resources": [
    {
      "name": "catalog",
      "types": ["movie", "series"],
      "idPrefixes": ["tt"]
    },
    {
      "name": "meta",
      "types": ["movie"],
      "idPrefixes": null
    },
    "stream"
  ]
}
name
string
required
Resource name: catalog, meta, stream, or subtitles
types
string[]
Content types supported by this specific resource.Must be a subset of manifest-level types.
idPrefixes
string[]
ID prefixes supported by this specific resource.If null, uses manifest-level idPrefixes.

Catalogs

Catalogs define browsable content collections:
{
  "catalogs": [
    {
      "id": "top",
      "type": "movie",
      "name": "Top Movies",
      "extra": [
        {
          "name": "genre",
          "isRequired": false,
          "options": ["Action", "Comedy", "Drama"],
          "optionsLimit": 1
        },
        {
          "name": "skip",
          "isRequired": false
        }
      ]
    }
  ]
}
id
string
required
Unique identifier for the catalog.
type
string
required
Content type for this catalog (e.g., movie, series).
name
string
Display name for the catalog.
extra
ExtraProp[]
Additional query parameters supported by the catalog.Can be specified in full or short format.

Extra Properties

Full Format

{
  "extra": [
    {
      "name": "genre",
      "isRequired": false,
      "options": ["Action", "Comedy"],
      "optionsLimit": 1
    }
  ]
}
name
string
required
Parameter name (e.g., genre, skip, search).
isRequired
boolean
default:false
Whether this parameter must be provided in requests.
options
string[]
default:[]
List of valid values for this parameter.
optionsLimit
number
default:1
Maximum number of values that can be passed for this parameter.

Short Format

{
  "extraSupported": ["genre", "skip"],
  "extraRequired": ["search"]
}

Behavior Hints

{
  "behaviorHints": {
    "adult": false,
    "p2p": false,
    "configurable": true,
    "configurationRequired": false
  }
}
adult
boolean
default:false
Whether the addon contains adult content.
p2p
boolean
default:false
Whether the addon uses peer-to-peer technology.
configurable
boolean
default:false
Whether the addon supports configuration.
configurationRequired
boolean
default:false
Whether configuration is required before using the addon.

Complete Example

{
  "id": "com.example.movies",
  "version": "1.0.0",
  "name": "Example Movies",
  "description": "Provides movies and series metadata",
  "logo": "https://example.com/logo.png",
  "background": "https://example.com/bg.png",
  "contactEmail": "[email protected]",
  "types": ["movie", "series"],
  "idPrefixes": ["tt"],
  "resources": [
    {
      "name": "catalog",
      "types": ["movie", "series"],
      "idPrefixes": ["tt"]
    },
    "meta",
    "stream"
  ],
  "catalogs": [
    {
      "id": "top",
      "type": "movie",
      "name": "Top Movies",
      "extra": [
        {
          "name": "genre",
          "options": ["Action", "Comedy", "Drama"]
        },
        {
          "name": "skip"
        }
      ]
    }
  ],
  "behaviorHints": {
    "adult": false,
    "p2p": false,
    "configurable": false,
    "configurationRequired": false
  }
}

Validation

Stremio Core validates manifests to ensure:
  • All required fields are present
  • Resource types are subsets of manifest types
  • Resource idPrefixes are subsets of manifest idPrefixes (when specified)
  • Catalog extra properties match supported/required lists
  • URLs are valid
Use the is_resource_supported() method to check if a resource path is supported by the manifest.

Build docs developers (and LLMs) love