Library / SDK
video-react/video-react avatar
video-react/video-react

video-react installation, player structure, and migration limits

Deprecated in favour of Video.js 10; security fixes only. A web video player built for the HTML5 world using React library.

2,723 stars388 forksJavaScriptMIT

At a glance

What is it?
video-react wraps HTML5 video playback in React components, but it is deprecated in favour of Video.js 10 and accepts only security fixes until January 2028. It fits existing React applications that need a temporary maintenance path, not new player development.
Who is it for?
Existing teams should adopt video-react only when migration work is constrained and an immediate change would create unnecessary risk. New applications should start with Video.js 10, while current users should first inspect their React peer dependencies, player configuration, Redux integration, CSS imports, and migration guide before committing to a move.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 13 days 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 October 22, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Why video-react exists inside a React application

video-react addresses the need for browser-native video controls and media playback through a React component interface. Its intended users are developers who want an HTML5 player without building playback controls, source selection, or the surrounding player UI from scratch. The README describes it as "a web video player built from the ground up for an HTML5 world using React library," and the basic example places one or more `<source>` elements inside `<Player>`.

That distinction matters. This is not a server-side transcoding system, streaming platform, or media asset manager. The repository presents a front-end player component, while the actual media URL remains outside the package. The documented example points the player at an MP4 hosted by W3C, but the repository does not state that video-react uploads, stores, transcodes, or protects content.

The project now has a narrower role because its maintainers have deprecated it in favour of Video.js 10. According to the README, Mux, which maintains video-react, now works on Video.js 10 with the teams behind Video.js, Vidstack, Plyr, and Media Chrome. Priority security patches will be merged until January 2028, but no other changes are planned.

That policy makes video-react a maintenance dependency rather than a target for feature expansion. A team adding a new React video experience is committing to a package whose own project description says it is deprecated. A team already using it may still need it temporarily, especially if replacing its player would affect existing components and state management.

video-react component and media data flow

The public API demonstrated in the README is React-first and small. Application code imports `Player` from `video-react`, renders it in the normal component tree, and places HTML5 video sources within it. React receives the component props, while the browser's media element handles loading and playback of a URL. The repository lists `src/`, `lib/`, and `dist/` as relevant implementation and package areas, but the README does not document an internal state model or the full browser event pipeline.

The rendering flow in the documented example is therefore direct:

js
import React from 'react';
import { Player } from 'video-react';

export default props => {
  return (
    <Player>
      <source src="https://media.w3.org/2010/05/sintel/trailer_hd.mp4" />
    </Player>
  );
};

The component tree does not contain an authentication token, media identifier, or upload instruction. It contains a media URL. Applications remain responsible for obtaining playable media and for any access policy enforced by the server that hosts it.

Styling is separate from component logic. The package manifest names `dist/video-react.css` as the package style entry, while the README offers compiled CSS, SCSS source, and a hosted stylesheet as alternatives. This separation means application authors must preserve the stylesheet when upgrading, bundling, or migrating, otherwise their component tree can remain mounted while the visible controls lose their expected appearance.

The package entry point in `package.json` is `lib/index.js`, and the documented build command uses Rollup with `-c --bundleConfigAsCjs`. Source processing uses Babel to emit `lib/`, excluding `src/__tests__/`. These details describe a conventional JavaScript package build, but they do not establish that the runtime itself uses Redux or any other particular state manager.

Installing video-react and rendering the first player

The README instructs users to install `video-react` together with its React peer dependencies. Run this command in the application that already uses npm:

bash
npm install --save video-react react react-dom

The command records the packages with `--save`. The README identifies React and React DOM as peer dependencies rather than optional conveniences, so their versions and compatibility with the rest of the application must be checked before installation.

Next, import one of the distributed stylesheets. The compiled CSS import shown by the README is:

js
import '~video-react/dist/video-react.css';

The `~` prefix belongs to the webpack-style module resolution shown in the documentation. It will work only when the application's CSS processing supports that resolution convention. Projects using a different bundler should verify how `dist/video-react.css` is resolved rather than copying the example unchanged.

For SCSS-enabled projects, the README provides this alternative:

scss
@import '~video-react/styles/scss/video-react';

A project can instead load the published CSS through a page-level link:

html
<link
  rel="stylesheet"
  href="https://video-react.github.io/assets/video-react.css"
/>

The plus signs shown above are not part of the README example and should not be copied. The actual HTML contains a stylesheet link with `rel="stylesheet"` and the `https://video-react.github.io/assets/video-react.css` URL. The component must also be rendered with at least one source, as shown in the first-use example earlier. At that point, the expected visible result is an HTML5 video player associated with the supplied media URL, subject to browser codec support and network availability.

Browser support limits the safe deployment target

video-react cannot override the codecs and media formats accepted by the user's browser. The README's browser table reflects that boundary. It marks Chrome as supported across Windows, Mac, Linux, and Android, with native behavior on iOS. Firefox is marked supported on Windows, Mac, and Linux, but its Android entry is "untested." Safari is supported on Mac and iOS in the table, while several other Safari combinations are unmarked. IE 11 is labeled untested.

The support statement is narrower than the table may initially suggest. The README says that only the latest stable version is tested and supported. Older releases may work and may receive pull requests, but they are not frequently tested or actively supported. That distinction rules out treating historical browser compatibility as a maintained guarantee.

The listed browsers also do not imply uniform playback of a given MP4 file. Browser support depends on the media served, while the table only describes the player project. The documentation does not document adaptive streaming manifests, DRM, subtitles, analytics, CMAF packaging, or a broad codec matrix, so none should be presented as built-in capabilities.

For an existing service, the first compatibility check should use a real media asset through the same browser and device classes in the support table. For a new service, the sparse documentation is a reason to choose a player whose current media requirements can be evaluated before implementation, rather than a reason to assume that installing video-react resolves every playback case.

Security-only maintenance constrains upgrades and new work

The maintenance boundary is explicit: video-react will merge priority security patches until January 2028 and nothing else. The repository is not archived, and its last push was on 2026-10-09, but those facts do not change the stated feature policy. A recent release can contain security work without indicating renewed feature development.

The package version in `package.json` is `0.16.1`, matching the listed `v0.16.1` release. The package description repeats both the Video.js 10 deprecation and the January 2028 security-fix boundary. This consistency reduces the chance of interpreting the README as stale positioning, but it also means an adoption decision must account for the package's end state.

The available scripts cover testing, watching tests, coverage, local development, documentation builds, Rollup builds, linting, and formatting. The documented test command is:

bash
npm test

It expands to `BABEL_ENV=test jest` according to `package.json`. This is a repository development command, not an application API. It should be used by maintainers or contributors working against the source tree, rather than presented as the runtime command for consuming applications.

The project uses the MIT license. That permits use and modification under the license terms, but it does not promise continued security response beyond the published maintenance boundary or future compatibility with Video.js 10. License compliance and migration planning are separate from product support.

Video.js 10 migration changes the React contract

Video.js 10 is the documented successor path, and the distinction is architectural as well as administrative. The README says the migration guide maps `Player` props, control bar children, the player ref, and Redux state to `@videojs/react`. Existing applications may therefore need to translate more than an import statement. Custom controls, imperative ref access, and application state can all sit on opposite sides of that boundary.

The alternative approach is to use Video.js 10 with its React integration instead of adding more application code to a deprecated player. Video.js 10 is the destination named by the maintainers. Vidstack, Plyr, and Media Chrome are named as organizations working around Video.js 10, but the README does not provide enough implementation detail to compare those projects as substitutes.

The repository also says that the migration guide includes an AI Quickstart prompt and points questions to `videojs/v10` discussions. Those links indicate that migration has a defined process, not that every application can be converted mechanically. A player with custom control children or Redux-connected state should identify those pieces before replacing the package, because the README explicitly identifies them as migration concerns.

Keeping video-react temporarily can avoid an immediate migration for an existing product. It is the wrong choice for a new product because the maintainers have already selected the successor and will accept only security changes. Security-only maintenance can reduce the expected feature and compatibility work available from this package, so an upgrade path matters before the January 2028 boundary rather than after it.

Editorial conclusion

Existing teams should adopt video-react only when migration work is constrained and an immediate change would create unnecessary risk. New applications should start with Video.js 10, while current users should first inspect their React peer dependencies, player configuration, Redux integration, CSS imports, and migration guide before committing to a move.

Frequently asked questions

How do I install video-react in a React application?

The README instructs users to run `npm install --save video-react react react-dom`. The player also needs one of the documented CSS imports or the hosted stylesheet.

How do I render a video with video-react?

Import `Player` from `video-react`, render `<Player>`, and place a `<source>` element containing the media URL inside it. The README provides an MP4 example hosted by W3C.

Is video-react still receiving feature updates?

No. The README says the project is in security-only maintenance and will merge priority security patches until January 2028, with no other changes.

Official sources

  1. License: MIT
  2. Project website
  3. README
  4. Releases
  5. video-react/video-react 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/video-react-video-react.svg)](https://hysenlabs.com/projects/video-react-video-react)

Was this useful?