Stremio - Freedom to Stream
Find a file
AK b7f7a3d2ed fix(fullscreen): consume FullscreenProvider, remove per-instance state
useFullscreen is now a thin useContext consumer of FullscreenProvider,
so all callers share a single fullscreen state owned by the app root.

Why this fixes the desync bug:

stremio-router keeps multiple route layers mounted at once, and each
top-level route (Board, Discover, Library, Calendar, Addons, Settings,
Search) renders its own MainNavBars -> HorizontalNavBar -> useFullscreen.
The previous hook held local useState plus its own listeners, so each
route had an independent boolean. Entering fullscreen, then navigating
to another tab, mounted a fresh hook initialized to false; the icon
flipped back to "enter fullscreen" and clicking it re-requested
fullscreen on top of the existing one, leaving the UI unresponsive
until a route remount happened to coincide with reality.

With one provider above the router, state outlives route remounts and
listeners are attached exactly once. The hook's return tuple shape
([fullscreen, requestFullscreen, exitFullscreen, toggleFullscreen]) is
preserved, so all three call sites (HorizontalNavBar, NavMenuContent,
Player) keep working with no API change.

Also removes the legacy src/common/useFullscreen.ts and routes its
imports through stremio/common/Fullscreen (and the stremio/common
barrel for App.js / Player).

Note: MainNavBars is still rendered per-route. Lifting it to a single
app-level layout above the router is a worthwhile follow-up (eliminates
6+ duplicate mounts) but carries non-trivial CSS / useRouteFocused /
stacked-route risk and is out of scope for this PR; tracking separately.

Made-with: Cursor
2026-04-27 01:52:02 -04:00
.github Merge pull request #1193 from Stremio/dependabot/github_actions/pnpm/action-setup-6 2026-04-14 11:59:19 +03:00
.well-known fix: use wildcard for app site association 2025-04-17 01:15:10 +04:00
assets feat(ui): add font fallback for country flags on Windows 2026-04-01 18:52:22 -03:00
src fix(fullscreen): consume FullscreenProvider, remove per-instance state 2026-04-27 01:52:02 -04:00
tests feat: make translation test fail if hardcoded strings are found 2025-05-28 17:16:08 +03:00
.gitignore fix: move scan translations test to test folder 2025-05-28 12:25:55 +03:00
.nvmrc chore: consistent node version 2024-08-29 22:44:11 +02:00
CODE_OF_CONDUCT.md Merge branch 'development' into chore/typos 2025-10-11 15:02:32 +03:00
Dockerfile build: fix Dockerfile 2025-10-27 16:21:50 +01:00
eslint.config.mjs deps: update stylistic eslint to v5 & stylistic eslint react to v4; change eslint rule name to match actual 2025-09-29 13:59:23 +03:00
http_server.js Increase cache times 2023-06-08 13:01:10 +03:00
LICENSE.md Downgrade to GPL-V2 License 2020-04-07 23:01:27 +03:00
manifest.json chore: remove deprecated webpack-pwa-manifest 2026-01-14 04:15:41 +01:00
package.json bump: release v5.0.0-beta.35 2026-04-23 20:34:56 +02:00
pnpm-lock.yaml bump: stremio-translations to 1.51.0 2026-04-23 19:55:34 +02:00
README.md Update README.md image paths 2026-01-14 22:12:05 +08:00
tsconfig.json feat: add shortcuts modal 2025-10-12 12:06:59 +02:00
webpack.config.js feat(ui): add font fallback for country flags on Windows 2026-04-01 18:52:22 -03:00

Stremio - Freedom to Stream

Build Github Page

Stremio is a modern media center that's a one-stop solution for your video entertainment. You discover, watch and organize video content from easy to install addons.

Build

Prerequisites

  • Node.js 12 or higher
  • pnpm 10 or higher

Install dependencies

pnpm install

Start development server

pnpm start

Production build

pnpm run build

Run with Docker

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

Screenshots

Board

Board

Discover

Discover

Meta Details

Meta Details

License

Stremio is copyright 2017-2023 Smart code and available under GPLv2 license. See the LICENSE file in the project for more information.