Skip to content
πŸ§™ A Node.js SDK for creating and publishing Stremio add-ons
Branch: master
Clone or download
Ivshti Merge pull request #73 from TomSputz/patch-1
Give meaning to the order of streams
Latest commit c4635a1 Apr 20, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
cli
docs Give meaning to the order of streams Apr 19, 2019
examples examples/from-readme: rename to builder Mar 8, 2019
src Rename `cache` to `cacheMaxAge` Mar 18, 2019
test Add Docs for `cacheMaxAge` Mar 18, 2019
.eslintrc.js eslint automated Feb 18, 2019
.gitignore first commit Mar 25, 2018
.travis.yml add .travis.yml Jan 22, 2019
LICENSE.md LICENSE updated Feb 19, 2019
README.md Fix Links to Deployment Docs Mar 19, 2019
_config.yml Merge branch 'master' into advanced-usage-guide Mar 4, 2019
package-lock.json 1.2.0 Mar 18, 2019
package.json

README.md

Stremio Add-on SDK πŸ§™

Stremio

The πŸ§™ Stremio Add-on SDK πŸ§™ was developed by the Stremio Team as a way of vastly simplifying Node.js add-on creation for our streaming platform.

Stremio currently supports Windows, macOS, Linux, Android and iOS.

Quick Example

This arbitrary example creates an add-on that provides a stream for Big Buck Bunny and outputs a HTTP address where you can access it.

const { addonBuilder, serveHTTP, publishToCentral }  = require('stremio-addon-sdk')

const builder = new addonBuilder({
    id: 'org.myexampleaddon',
    version: '1.0.0',

    name: 'simple example',

    // Properties that determine when Stremio picks this add-on
    // this means your add-on will be used for streams of the type movie
    catalogs: [],
    resources: ['stream'],
    types: ['movie'],
    idPrefixes: ['tt']
})

// takes function(args, cb)
builder.defineStreamHandler(function(args, cb) {
    if (args.type === 'movie' && args.id === 'tt1254207') {
        // serve one stream to big buck bunny
        const stream = { url: 'http://distribution.bbb3d.renderfarming.net/video/mp4/bbb_sunflower_1080p_30fps_normal.mp4' }
        return Promise.resolve({ streams: [stream] })
    } else {
        // otherwise return no streams
        return Promise.resolve({ streams: [] })
    }
})

serveHTTP(builder.getInterface(), { port: 7000 })
//publishToCentral("https://your-domain/manifest.json") // <- invoke this if you want to publish your add-on and it's accessible publically on "your-domain"

Save this as addon.js and run:

npm install stremio-addon-sdk
node ./addon.js

It will output a URL that you can use to install the add-on in Stremio

Please note: add-on URLs in Stremio must be loaded with HTTPS (except 127.0.0.1) and must support CORS! CORS support is handled automatically by the SDK, but if you're trying to load your add-on remotely (not from 127.0.0.1), you need to support HTTPS.

Getting started with a new add-on

In order to scaffold a new Stremio add-on, we've made a tool called addon-bootstrap.

You can use it in the following way:

npm install -g stremio-addon-sdk # use sudo if on Linux
addon-bootstrap hello-world

You'll be asked about what resources and types you want to support, after which the add-on will be created in the hello-world directory, and you'll be able to run it:

cd hello-world
npm install
npm start -- --launch

If you wish to install the add-on in the Desktop version of Stremio (which you can download here), you should use npm start -- --install

Documentation

All our documentation is right here on GitHub. Take a look at our examples list for some high-level information, or dive straight into our SDK documentation for our code reference docs.

We also have an example add-on that you can use as a guide to help you build your own add-on.

We've made two step by step guides: one for this SDK, and one for any programming language, which you can read here.

If you don't wish to use Node.js (and therefore not use this SDK either), you can create add-ons in any programming language, see the add-on protocol specification for more information.

It is also possible to create an add-on without any programming language, see our static add-on example based on the protocol specification.

SDK Features Include:

  • Publishing an add-on through HTTP(s)
  • Publishing an add-on through IPFS
  • Publishing your add-on link to the public Add-on collection with publishToCentral
  • Creating a homepage for your add-on that includes an "Install Add-on" button

Testing

For developers looking for a quick way to test their new add-ons, you can either:

Deploying

In order for your add-on to be used by others, it needs to be deployed online.

You can check our list of recommended hosting providers for Node.js or alternatively host it locally with localtunnel.

After you've deployed publically, in order to get your add-on to show in Stremio (through the public Add-on collection), you need to use publishToCentral.

Examples & tutorials

Check out our ever growing list of examples and demo add-ons. This list also includes examples & tutorials on how to develop Stremio addons in PHP, Python, Ruby, C#, Java and Go. It also includes a list of video tutorials.

Advanced Usage

Read our guide for advanced usage to understand the many ways that add-ons can be used.

Reporting Issues

If you have any issues regarding the Stremio Add-on SDK, please feel free to report them here.

Migration from v0.x

To migrate from v0.x, you need to:

  • change new addonSDK to new addonBuilder, which you can import via const addonBuilder = require('stremio-addon-sdk').addonBuilder
  • change addon.run(opts) to serveHTTP(addon.getInterface(), opts), which you can import via const serveHTTP = require('stremio-addon-sdk').serveHTTP
  • all handlers have to return a Promise (rather than take a cb)

Use Cases Outside Add-on SDK

The use of this SDK is not mandatory for creating Stremio Add-ons. You can use any programming language that supports creating a HTTP server to make Stremio Add-ons. Refer to our protocol specification for details and examples.

One useful scenario of not using the SDK is when you need user specific data for you add-on (for example, an API Autherntication Token), you can see an example of passing user specific data in the Add-on URL here. This example uses Node.js and Express to get user specific data.

built with love and serious coding skills by the Stremio Team

You can’t perform that action at this time.