Spaces:
Paused
Paused
| # Stremio Addon SDK π§ | |
|  | |
| The **π§ Stremio Addon SDK π§** was developed by the Stremio Team as a way of vastly simplifying Node.js addon creation for | |
| our streaming platform. | |
| Stremio currently supports Windows, macOS, Linux, Android and iOS. | |
| **Important: We strongly recommend deploying addons to the [BeamUp](./docs/deploying/beamup.md) servers** | |
| ## Quick Example | |
| This arbitrary example creates an addon that provides a stream for Big Buck Bunny and outputs a HTTP address where you can access it. | |
| ```javascript | |
| 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 addon | |
| // this means your addon will be used for streams of the type movie | |
| catalogs: [], | |
| resources: ['stream'], | |
| types: ['movie'], | |
| idPrefixes: ['tt'] | |
| }) | |
| // takes function(args) | |
| builder.defineStreamHandler(function(args) { | |
| 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: process.env.PORT || 7000 }) | |
| //publishToCentral("https://your-domain/manifest.json") // <- invoke this if you want to publish your addon and it's accessible publically on "your-domain" | |
| ``` | |
| Save this as `addon.js` and run: | |
| ```bash | |
| npm install stremio-addon-sdk | |
| node ./addon.js | |
| ``` | |
| It will output a URL that you can use to [install the addon in Stremio](./docs/testing.md#how-to-install-add-on-in-stremio) | |
| **Please note:** addon 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 addon remotely (not from `127.0.0.1`), you need to support HTTPS. | |
| ## Getting started with a new addon | |
| In order to scaffold a new Stremio addon, we've made a tool called `addon-bootstrap`. | |
| You can use it in the following way: | |
| ```bash | |
| npm install -g stremio-addon-sdk # use sudo if on Linux | |
| addon-bootstrap hello-world | |
| ``` | |
| You'll be asked about what [resources and types](./docs/api/README.md) you want to support, after which the addon will be created in the `hello-world` directory, and you'll be able to run it: | |
| ```bash | |
| cd hello-world | |
| npm install | |
| npm start -- --launch | |
| ``` | |
| If you wish to install the addon in the Desktop version of Stremio (which you can [download here](https://www.stremio.com/downloads)), you should use `npm start -- --install` | |
| ## Documentation | |
| All our documentation is [right here on GitHub](./docs). Take a look at our [examples list](./docs/examples.md) for some high-level | |
| information, or dive straight into our [SDK documentation](./docs/README.md) for our code reference docs. | |
| We also have an [example addon](https://github.com/Stremio/addon-helloworld) that you can use as a guide to help you build your own addon. | |
| We've made two step by step guides: one for this SDK, and one for any programming language, [which you can read here](https://stremio.github.io/stremio-addon-guide). | |
| If you don't wish to use Node.js (and therefore not use this SDK either), you can create addons in any programming | |
| language, see the [addon protocol specification](./docs/protocol.md) for more information. | |
| It is also possible to create an addon without any programming language, see our [static addon example](https://github.com/Stremio/stremio-static-addon-example) based | |
| on the protocol specification. | |
| SDK Features Include: | |
| - Publishing an addon through HTTP(s) | |
| - Publishing your addon link to the [public Addon collection](https://api.strem.io/addonscollection.json) with [publishToCentral](./docs/README.md#publishtocentralurl) | |
| - Creating a homepage for your addon that includes an "Install Addon" button | |
| ## Testing | |
| For developers looking for a quick way to test their new addons, you can either: | |
| - [Test with Stremio](./docs/testing.md#testing-in-stremio-app) | |
| - [Test with our Web Version](./docs/testing.md#testing-in-stremio-web-version) | |
| ## Deploying | |
| In order for your addon to be used by others, it needs to be deployed online. | |
| You can check our [list of recommended hosting providers for Node.js](./docs/deploying/README.md) or alternatively host it locally with [localtunnel](https://github.com/localtunnel/localtunnel). | |
| After you've deployed publically, in order to get your addon to show in Stremio (through the [public Addon collection](https://api.strem.io/addonscollection.json)), you need to use [publishToCentral](./docs/README.md#publishtocentralurl) or publish [manually through the UI](https://stremio.github.io/stremio-publish-addon/index.html). | |
| ## Examples & tutorials | |
| Check out our ever growing list of [examples and demo addons](./docs/examples.md). This list also includes examples & tutorials on how to develop Stremio addons in PHP, Python, Ruby, C#, Rust, Java and Go. It also includes a list of video tutorials. | |
| ### Rust version | |
| There is a third-party Rust version of this SDK built on stremio-core developed by Sleeyax [here](https://github.com/sleeyax/stremio-addon-sdk). | |
| ### Go version | |
| There is a third-party Go version of this SDK developed by doingodswork [here](https://github.com/Deflix-tv/go-stremio). | |
| ## Advanced Usage | |
| Read our [guide for advanced usage](./docs/advanced.md) to understand the many ways that addons can be used. | |
| ## Reporting Issues | |
| If you have any issues regarding the Stremio Addon SDK, please feel free to [report them here](https://github.com/Stremio/stremio-addon-sdk/issues). | |
| ## 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 Addon SDK | |
| The use of this SDK is not mandatory for creating Stremio Addons. You can use any programming language that supports | |
| creating a HTTP server to make Stremio Addons. Refer to our [protocol specification](./docs/protocol.md) for details and examples. | |
| One useful scenario of not using the SDK is when you need user specific data for you addon (for example, an API | |
| Autherntication Token), you can see an example of passing user specific data in the Addon URL [here](./docs/advanced.md#using-user-data-in-add-ons). | |
| This example uses Node.js and Express to get user specific data. (Update: the Addon SDK now supports [user settings](./docs/api/responses/manifest.md#user-data)) | |
| _built with love and serious coding skills by the Stremio Team_ | |
| <img src="https://blog.stremio.com/wp-content/uploads/2018/03/new-logo-cat-blog.jpg" width="300" /> | |