Skip to main content
This page walks you through forking the repository, installing dependencies, and running the development server.

Prerequisites

Before you start, make sure you have the following installed:
ToolVersionNotes
Node.js20See .nvmrc. Use nvm to switch versions automatically.
pnpm10 or higherThe project uses pnpm as its package manager.
GitAny recent versionRequired to clone the repo and compute the commit hash used in the build output.
Run node -v and pnpm -v to verify your versions before proceeding.

Setup

1

Fork and clone the repository

Fork stremio/stremio-web on GitHub, then clone your fork:
git clone https://github.com/<your-username>/stremio-web.git
cd stremio-web
2

Use the correct Node.js version

The repository includes an .nvmrc file pinned to Node.js 20. If you use nvm:
nvm use
3

Install dependencies

pnpm install
This installs all runtime and development dependencies declared in package.json.
4

Start the development server

pnpm start
This runs webpack serve --mode development. The dev server starts on https://0.0.0.0 with HTTPS enabled. Open the printed local address in your browser.
The dev server uses a self-signed certificate. You may need to accept a browser warning on first visit.

Available scripts

All scripts are defined in package.json and run with pnpm run <script>.
Starts the Webpack dev server in development mode with source maps and live rebuilds.
pnpm start
Starts the Webpack dev server in production mode. Useful for testing the optimized build locally.
pnpm run start-prod
Compiles and bundles the application to the build/ directory. Output filenames include the current Git commit hash.
pnpm run build
Runs the Jest test suite.
pnpm test
Lints all files under src/ using the ESLint configuration in eslint.config.mjs.
pnpm run lint
The linter enforces:
  • typescript-eslint recommended and stylistic rules
  • React plugin rules
  • @stylistic/eslint-plugin formatting rules (4-space indent, single quotes, semicolons)
  • No console.log (only console.warn and console.error are allowed)
  • Strict equality (===)
Scans the source tree for translation keys and reports any that are missing from the translation files. Runs the test at tests/i18nScan.test.js via Jest.
pnpm run scan-translations

TypeScript compilation

The project uses a mixed JavaScript/TypeScript codebase. TypeScript is configured in tsconfig.json:
{
  "compilerOptions": {
    "lib": ["ESNext", "DOM", "DOM.Iterable"],
    "jsx": "react",
    "baseUrl": "./src",
    "outDir": "./dist",
    "moduleResolution": "node",
    "paths": {
      "stremio/*": ["*"]
    },
    "resolveJsonModule": true,
    "esModuleInterop": true,
    "allowJs": true,
    "checkJs": false,
    "strict": true
  },
  "include": ["src/"]
}
Key points:
  • strict: true is enabled — all new TypeScript code must be strictly typed.
  • allowJs: true allows importing existing JavaScript files from TypeScript.
  • The stremio/* path alias maps to src/*, so you can import with import Foo from 'stremio/components/Foo'.
  • TypeScript is compiled by ts-loader during the Webpack build, not by tsc directly.

Running with Docker

You can also run a production build inside Docker:
docker build -t stremio-web .
docker run -p 8080:8080 stremio-web
This is useful for a clean environment test before submitting a pull request.

Build docs developers (and LLMs) love