Library / SDK
Stremio/stremio-web avatar
Stremio/stremio-web

Stremio Web: a private webpack shell around stremio-core

Stremio - Freedom to Stream

15,072 stars1,744 forksJavaScriptGPL-2.0

At a glance

What is it?
stremio-web is the React UI of Stremio, with the engine in Rust compiled to WebAssembly and playback delegated to another package. It is easy to run locally and impossible to install from a registry.
Who is it for?
Use it if you want a media center you host and are willing to build from source, since the package is private and the default branch is development. Skip it if you need a supported install or a documented codec matrix; neither exists in this repository.
Can I use it commercially?
Yes, with conditions. GPL-2.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly JavaScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 13, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • Stremio/stremio-web15,072 ★ · +1,128
Star history
Repository2026-09-222026-11-13
Stremio/stremio-web13.9k15.1k

1,128 Stars in the last 52 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

The React app renders state stremio-core computes

This repository holds the React app, and stremio-core holds the state. The core is Stremio's Rust engine, compiled to WebAssembly, running in a Web Worker so the main thread keeps rendering while the engine works. The UI renders what the engine returns, and the dependency list pins @stremio/stremio-core-web at 0.66.0, which makes the split a versioned contract rather than a convention.

That split costs you the ability to fix a problem in one place. A catalog that resolves to the wrong stream, a library that does not sync, a Continue Watching entry that shows up late: none of that logic lives here, so a bug in any of them sends you to a different repository before it sends you to a line of this app. Casting sits one step further out, because the Chromecast path is described as a feature of this UI while nothing here states what receives the stream.

Three dependencies resolve from GitHub commits, not the registry

package.json mixes published versions with three GitHub dependencies. langs points at github:Stremio/nodejs-langs, spatial-navigation-polyfill is pinned to the commit 64871b1422466f5f45d24ebc8bbd315b2ebab6a6, and stremio-translations also resolves from GitHub. Every install therefore has to reach GitHub over git, not just a registry.

Two consequences follow. A build on an isolated network fails during dependency install, before webpack runs a single module. And the image build pins that behaviour on purpose with pnpm i --frozen-lockfile, so the commits recorded in pnpm-lock.yaml are the ones you get. Moving to a newer translations commit through the Docker path means regenerating the lockfile first, and a fork of any of those three repositories is not something you can point at without touching the lockfile too.

pnpm run lint tolerates 287 warnings by design

The lint script is budgeted, not aspirational. In package.json, lint runs eslint src --max-warnings 287, and the neighbouring scan-translations script runs pnpx jest ./tests/i18nScan.test.js. The number is part of the definition of a passing build.

Read 287 as a fact about the code rather than a style preference. A run can pass while eslint reports every warning it allows, so a contributor who tightens --max-warnings on their branch gets a failure caused by code they never opened. Bringing that ceiling down means either deleting warnings as its own change or raising the number, and the repository does not say which of the two it wants.

Self-hosting through Docker ends at express@4 and port 8080

The image has four stages. A base on node 22-alpine enables corepack and installs git, an app stage copies package.json, pnpm-lock.yaml and pnpm-workspace.yaml before running the frozen-lockfile install and pnpm build, a server stage installs express@4, and the final stage copies http_server.js next to the build output and exposes 8080.

bash
docker build -t stremio-web .
docker run -p 8080:8080 stremio-web

After that the container runs node http_server.js and does nothing else. The repository contains that one server file and no proxy, TLS or rewrite configuration, so putting an installation on the public internet means adding a terminating proxy that you now operate, with nothing here to copy. Nothing documents how unknown paths behave either, and the app routes with react-router-dom 6.30.0, so the fallback rule for a deep link is something you test rather than look up.

package.json is private, so there is nothing to pnpm add

The local path needs Node.js 22+ and pnpm 11+, which the engines block enforces with node >=22 and pnpm >=11, and packageManager fixed at [email protected].

bash
pnpm install
pnpm start

pnpm start runs webpack serve in development mode with hot reload, and the dev server answers at http://localhost:8080. For a bundle, pnpm run build switches webpack to production mode, while pnpm run start-prod serves the development server in production mode when you want that behaviour locally.

The distribution limit comes next. package.json sets private to true, with name stremio and version 5.0.0-beta.43, and the scripts block has no publish target, so there is no registry artifact and pnpm add stremio is not an option. A team that wants a pinned version should notice what a clone actually gives them: the default branch is development and the version string is a beta.

Playback belongs to stremio-video, and the codecs are undocumented

Playback leaves this repository at the first frame. The UI hands it to stremio-video, which picks the right player implementation for the environment, and the dependency list pins @stremio/stremio-video at 0.0.103. Around that sit the features the README claims: a keyboard-first player with full playback control without touching the mouse, subtitles from addons or local files with customizable styling, and casting to Chromecast.

The one number that decides whether your setup works is missing. The README does not state which video or audio codecs the player handles, and nothing addresses protected streams. If you self-host behind a browser with a restrictive media policy, no amount of reading here tells you whether a given stream will play. That question belongs to stremio-video, so treat any codec claim about this app as somebody else's release note.

Translation keys are checked by a jest run, not by the build

Localization is a pinned git commit plus a test. stremio-translations comes from a Stremio GitHub repository, and the UI reads it through i18next and react-i18next, which is how the project reaches 50+ languages through community translation.

The check for missing keys is not part of pnpm run build. It is the jest file ./tests/i18nScan.test.js, reached through the scan-translations script, so a missing key surfaces when you run pnpm test or that script by hand, and a production build walks past it. For anyone adding a language, that is the distance between a broken string found in CI and one found by a viewer, and the fix path is a test run rather than a failed build.

The last push was 2026-10-02, on a beta version line

Activity is current and the line is still beta. The last push was on 2026-11-02, and the three most recent releases are v5.0.0-beta.41 on 2026-10-05, v5.0.0-beta.42 on 2026-10-12 and v5.0.0-beta.43 on 2026-10-20, the last of which matches the version string in package.json.

The repository is not archived, and its root shows what a build of this app depends on: a Dockerfile, eslint.config.mjs, tsconfig.json and webpack.config.js alongside src, tests and assets, plus a workflow directory under .github. The licence is GPL-2.0, copyright 2017-2026 Smart Code OOD. Support lives outside the repository, on the website, a blog, Reddit, X and a Zendesk help centre, so a playback problem raised here lands with people who cannot see your lockfile.

Editorial conclusion

Use it if you want a media center you host and are willing to build from source, since the package is private and the default branch is development. Skip it if you need a supported install or a documented codec matrix; neither exists in this repository. Verify first that the three git-pinned dependencies resolve against pnpm-lock.yaml, then that your browser plays what stremio-video hands it.

Frequently asked questions

Is Stremio available on the web?

Yes. Stremio Web is the official web UI of Stremio, hosted at web.stremio.com and installable as a standalone PWA, and this repository builds it with webpack.

how to install stremio web

Locally you need Node.js 22+ and pnpm 11+, then run pnpm install and pnpm start, which serves the app with hot reload at http://localhost:8080. The other path is the Docker image, built with docker build -t stremio-web . and started with docker run -p 8080:8080 stremio-web.

how to use stremio web

Catalogs of movies, series and channels come from addons, while the state behind the screens is computed by stremio-core, the Rust engine compiled to WebAssembly and run in a Web Worker. The React UI renders that state and playback goes through stremio-video, which selects a player implementation for the environment.

how to setup stremio web

package.json requires node >=22 and pnpm >=11 and fixes the package manager at [email protected]. The production bundle comes from pnpm run build, and the container serves the build output with node http_server.js on port 8080.

how to use stremio web on mac

Nothing in this repository is specific to macOS. It is a browser application installable as a standalone PWA, so you either use the hosted app or run the same Node 22+ and pnpm 11+ requirements, or the Docker image, on your own machine.

Official sources

  1. License: GPL-2.0
  2. Project website
  3. README
  4. Releases
  5. Stremio/stremio-web on GitHub
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/stremio-stremio-web.svg)](https://hysenlabs.com/projects/stremio-stremio-web)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/stremio-stremio-web.svg)](https://hysenlabs.com/projects/stremio-stremio-web)

Was this useful?