mrkeyoor.com_
Tue 01 Sept 17:45 UTC
Self-Hostedevaluationupdated 27 Aug 2026

jellyfin-web review

Jellyfin Web is the official browser interface for the Jellyfin media server, and its code also supplies much of the interface used by Android and iOS clients. It lets people browse libraries, play media, administer a server, edit metadata, and complete first-time setup without relying on a proprietary media-service frontend.

+11 / 4dstars / 7d
Verdict

Our Jellyfin Web install consumed 1,183 MB and exposed 59 audit findings, although all 162 tests passed in 18 seconds, so adopting it means accepting a large, actively maintained frontend rather than a tidy React starter. Use it as the official client when you operate Jellyfin or need to contribute upstream. For a custom media UI, its legacy layers, TV constraints, GPL terms, and dependency review workload are strong reasons to start smaller.

We ran it

Lab card: what happened when we ran jellyfin-webScreenshot of jellyfin-web (jellyfin.org)
Install✓ · 78s2935 packages · 1183 MB
Buildn/ano build script
Tests✓ · 18s162 passed · 0 failed of 162 (vitest)
Known vulns592 critical · 30 high · 26 moderate · 1 low (npm audit)
Repo1224 files~121,041 lines of source · 16.5 MB · 10 CI workflows

Answers from our run

Does jellyfin-web build from source?

Dependencies installed in 78 seconds (2935 packages), and the project has no separate build step. We cloned commit 4a94651 into a clean Debian container with 3 CPUs and no project-specific setup.

Do jellyfin-web's tests pass?

Yes: 162 of 162 passed when we ran the project's own test command (vitest). Some failures need services or credentials a bare container does not have.

Does jellyfin-web have known vulnerabilities in its dependencies?

npm audit flagged 59 known advisories in the dependency tree, including 2 critical at the time of our run.

Who should not use jellyfin-web?

Anyone seeking a complete media server in this repository: Jellyfin Web is a frontend and needs a compatible Jellyfin server for useful operation.

What are the alternatives to jellyfin-web?

Kodi, Emby, Plex. Our Jellyfin Web install consumed 1,183 MB and exposed 59 audit findings, although all 162 tests passed in 18 seconds, so adopting it means accepting a large, actively maintained frontend rather than a tidy React starter.

Setup2/52,935 packages used 1,183 MB and audit found 59 advisories
Docs4/5Build, architecture, browser, and contribution rules are specific
Community5/5Pushed August 2026 with active issues, PRs, and translation work
Maturity4/5Released client with passing tests, still split across UI generations

Discussed on

  1. hnJellyfin-Web: Open-Source Web Client for Seamless Media Streaming8 points

Who it’s for

Jellyfin server operators who want the project's official browser client and admin dashboard.
Contributors working on playback, library browsing, metadata, setup, or native-wrapper interfaces.
Organizations willing to ship GPL-2.0-or-later frontend code and maintain compatibility with old TV browsers.
React and TypeScript teams prepared to work across both modern and legacy application layers.

Who it’s NOT for

Anyone seeking a complete media server in this repository: Jellyfin Web is a frontend and needs a compatible Jellyfin server for useful operation.
Small teams wanting a light web dependency tree: our install added 2,935 packages, used 1,183 MB, and npm audit reported 59 known vulnerabilities.
Developers planning a modern-only TV interface: the contributing guide says the modern app does not support TV layout and still reuses legacy content.
Products that cannot comply with GPL-2.0-or-later licensing for distributed modifications.
Operators expecting every browser codec path to behave alike: release 10.11.11 disabled a known broken fMP4 HLS container on Firefox 149.

Setup reality

Our sandbox installed 2,935 packages in 78 seconds and used 1,183 MB. The project has no generic build script, so the harness skipped build; the README instead documents build:development, and package scripts also include a production target. Tests finished in 18 seconds with all 162 passing. Npm audit reported 59 known vulnerabilities: 2 critical, 30 high, 26 moderate, and 1 low.

Development needs Node.js 24 or newer and npm 11 or newer at commit 4a94651. Running the interface usefully also needs a Jellyfin server and media library. Translation contributions go through Jellyfin's Weblate instance, while normal API work uses the Jellyfin TypeScript SDK.

The frontend spans modern, legacy, dashboard, and setup applications. Old TV browser engines constrain JavaScript and CSS choices; the modern app lacks TV layout; native wrappers can override client modules. A production build uses an explicit named script rather than npm run build, and deployment must keep web and server compatibility in view.

Jellyfin Web supplies the browser UI and client wrappers

Jellyfin Web is the official frontend for the Jellyfin media server. Desktop browsers use it directly, while Android and iOS clients reuse much of the same interface. The repository includes the user application, administration dashboard, metadata editor, first-run wizard, playback modules, themes, translations, and compatibility code. It solves the client side of a self-hosted media system; it does not scan libraries, manage storage, or transcode video by itself.

That distinction should shape any trial. You can start webpack locally after installing dependencies, but useful browsing and playback require a Jellyfin server with media and user configuration. Contributors are told to use the Jellyfin TypeScript SDK for API calls. Translation changes, except the source English file, go through Weblate rather than ordinary pull requests. This is a coordinated project component, not a standalone gallery template.

The install used 1,183 MB before media playback

Our commit 4a94651 checkout installed 2,935 npm packages in 78 seconds and occupied 1,183 MB. The repository itself had 1,224 files, about 121,041 lines of source, and used 16.5 MB. Most of the local cost arrived with development and runtime dependencies, before a browser connected to a server or loaded one item of media.

The package requires Node.js 24 or newer and npm 11 or newer. Its scripts name separate development, production, analysis, type-check, compatibility-check, lint, style, and test jobs. There is no generic build target, which is why our harness skipped that step. The README's documented command is npm run build:development; production users need the explicitly named production script rather than assuming the common npm convention.

What happened when we ran it

Our sandbox completed installation in 78 seconds with 3 CPUs and 8 GB of RAM. The test command then finished in 18 seconds, and Vitest reported 162 passed with 0 failed out of 162. That is a clean result for the supplied test target at commit 4a94651. We did not run a build because the harness found no standard build script or target.

Npm audit reported 59 known vulnerabilities in the installed tree: 2 critical, 30 high, 26 moderate, and 1 low. The number is an inventory, not proof that all 59 are reachable through a production Jellyfin deployment. It is still too large to wave away. A maintainer should map each advisory to the locked package, determine whether it ships to browsers or stays in tooling, and record why any accepted item is not exploitable.

Our repository scan found 10 CI workflow files, no Dockerfile, and no directory literally named tests. Tests can live beside source files, so the missing directory name does not conflict with the 162 passing Vitest cases. The visible CI definitions are a useful contrast with the audit result: automation exists, but dependency risk still needs product-specific triage rather than assuming a green test run covers it.

Four application layers are moving at different speeds

The contributing guide divides the code into modern, legacy, dashboard, and wizard apps. New pages must use React, and new files must be TypeScript. The dashboard is almost entirely on MUI, while the modern user interface is still being rewritten and reuses legacy content for feature parity. The legacy app remains the main TV-capable interface because the modern layout does not support televisions.

The older layer is more than leftover naming. The guide lists jQuery, the old app router, a view manager, Emby WebComponents, and a deprecated API client alongside their intended replacements. It also labels one scripts directory a serious mess. Teams proposing broad refactors must preserve playback and navigation across browsers that include Chrome 27 and other old engines in the package's support list. New syntax must be compiled or polyfilled when those engines cannot run it.

This coexistence explains why a 162-test pass is encouraging but incomplete. The project itself says some legacy component and view code is considered untestable. Native wrappers may override dynamically loaded client modules, and all media-player implementations live in a directory named plugins that is unrelated to Jellyfin server plugins. A browser-only change can therefore behave differently inside a mobile wrapper or on a television.

Playback compatibility is a release-level concern

Release 10.11.11 arrived on June 6, 2026 with 2 listed changes. One fixed a branding-page loader crash. The other disabled a known broken fMP4 HLS container on Firefox 149. That small release is a useful reminder that playback depends on browser behavior, container formats, codecs, server decisions, and client capability detection, not only React rendering.

Issue 8394, opened on August 27, reports that external changelog links in Android can open inside the app without a route back, forcing a restart. Issue 8355 discusses a remote HLS source being transcoded when the reporter expected direct handling. Neither report proves a general failure across all clients. Both show why browser, wrapper, server, and media-source combinations need targeted acceptance tests.

August activity is strong, and the queue is large

GitHub showed 3,798 stars, 487 combined issues and pull requests, and a last push on August 27, 2026. Current activity included subtitle synchronization, dependency updates, remote-source handling, and playback-interface bugs. The open count combines code proposals with issue reports, so it should not be read as 487 defects. The same-day push and updates show an active project with a substantial maintenance surface.

Jellyfin Web is the right client for Jellyfin because it carries the server's concepts, compatibility work, translations, and wrapper hooks in one upstream project. It is much harder to justify as a base for an unrelated media product. The 1,183 MB install, 59 advisories, dual UI generations, and old-browser obligations would all come along. Jellyfin operators should use it, pin web and server versions together, and treat audit review plus device playback checks as release requirements.

Alternatives

ProjectWhat it isPick it when
KodiA full media-center application designed for direct playback on dedicated devices.pick this instead when the client device should be the media center and a browser-administered server is unnecessary.
EmbyA server and client media platform with commercial features and official apps.pick this instead when paid support and Emby's client ecosystem matter more than a fully open Jellyfin stack.
PlexA hosted-account media platform with polished clients and a proprietary server ecosystem.pick this instead when broad appliance support is worth depending on a vendor account and closed components.
OwncastA self-hosted live video and chat server focused on broadcasting rather than personal libraries.pick this instead when the job is running a live channel, not browsing an on-demand media collection.

What people are saying

  1. [github-trending] jellyfin/jellyfin-web

Sources

  1. Jellyfin Web repository
  2. Jellyfin Web README
  3. Jellyfin Web contributing guide
  4. Jellyfin Web 10.11.11 release
  5. Android external-link issue 8394
  6. Remote media-source issue 8355

More self-hosted reviews

v2 · OpenShell · wigolo · Mindwtr · club-3090 · reclip · the whole board →