Installation
Install Video.js and build your first player with streaming support and accessible controls
Video.js is a React video player component library: composable primitives, hooks, and TypeScript types for building accessible, customizable players with minimal bundle sizes, advanced features, and consistency across browsers.
Video.js is an HTML video player built on custom elements: lightweight, framework-free components for building accessible, customizable players with minimal bundle sizes, advanced features, and consistency across browsers.
This guide has interactive examples tailored to the selected framework, preset, skin, and media implementation. Ask the user for those choices, then use the matching package imports shown below. If they need to own and edit the Skin source, configure the @videojs Shadcn namespace and install the matching Skin block.
If your user’s requirements can’t be met by a packaged preset or skin, install its editable source. As you develop with Video.js, rely heavily on llms.txt to make sure you always have the latest information.
If your user’s requirements can’t be met by a packaged preset or skin, install its editable source. As you develop with Video.js, rely heavily on llms.txt to make sure you always have the latest information.
If you’re working with an agent, consider providing it this guide in Markdown:
Otherwise, answer the questions below to get started quickly with your first embed code.
Choose your JS framework
Video.js aims to provide idiomatic development experiences in React components or HTML custom elements.
Complete the installation steps below, then visit the guide for your framework for more detailed integration information. These guides use the HTML custom elements until we add first-party Vue and Svelte packages.
Choose your use case
The default presets work well for general website playback. The live presets suit streams: they add a Live button and drop the duration and current-time displays that on-demand playback relies on. More pre-built players to come.
Choose skin
Choose how your player looks.
Choose your media source type
Video.js supports a wide range of file types and hosting services. It’s easy to switch between them.
Select your source
Or upload your media for free to Mux
Install Video.js
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/html@10.0.0-beta.32/cdn/video.js"></script>npm install @videojs/htmlpnpm add @videojs/htmlyarn add @videojs/htmlbun add @videojs/htmlnpm install @videojs/reactpnpm add @videojs/reactyarn add @videojs/reactbun add @videojs/reactUse your player
<!--
The player element owns and shares state between the UI
components and Media. Put layout on the skin or container.
-->
<video-player>
<!--
Skins contain the entire player UI and are easily swappable.
They can each be "ejected" for full control and customization
of UI components.
-->
<video-skin>
<!--
Media are players without UIs, handling networking
and display of the media. They are easily swappable
to handle different sources.
-->
<video src="https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/highest.mp4" playsinline></video>
</video-skin>
</video-player>Create your player
Add it to your components folder in a new file.
import '@videojs/react/video/skin.css';
import { VideoPlayer, VideoSkin, Video } from '@videojs/react/video';
interface MyPlayerProps {
src: string;
}
export const MyPlayer = ({ src }: MyPlayerProps) => {
return (
<VideoPlayer>
<VideoSkin>
<Video src={src} playsInline />
</VideoSkin>
</VideoPlayer>
);
};Use your player
import { MyPlayer } from '../components/player';
export const HomePage = () => {
return (
<div>
<h1>Welcome to My App</h1>
<MyPlayer src="https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/highest.mp4" />
</div>
);
};That’s it! You now have a working Video.js player.
Own the skin source
Packaged skins are the recommended starting point. When you need to rearrange controls, change component markup, or own every style, install the corresponding source with the standard Shadcn CLI. The command below follows the framework, preset, skin, media, and styling choices above.
Configure the @videojs namespace once, then install the selected skin. The Player and media remain package imports.
{
"registries": {
"@videojs": "https://shadcn.videojs.org/r/react/{name}.json"
}
}pnpm dlx shadcn@latest add @videojs/video{
"registries": {
"@videojs": "https://shadcn.videojs.org/r/react/css/{name}.json"
}
}pnpm dlx shadcn@latest add @videojs/video{
"registries": {
"@videojs": "https://shadcn.videojs.org/r/react/{name}.json"
}
}pnpm dlx shadcn@latest add @videojs/video{
"registries": {
"@videojs": "https://shadcn.videojs.org/r/react/css/{name}.json"
}
}pnpm dlx shadcn@latest add @videojs/videoChoose what to do next
Prepare for production
Something not quite right? You can submit an issue and ask for help, or explore other support options.