Newsletter
Join the Community
Subscribe to our newsletter for the latest news and updates
A JavaScript-based custom HTML5 video player with fullscreen, picture-in-picture, and custom controls.

Deploy your own Notion-powered website in minutes with Next.js and Vercel.

Feature-packed, zero-setup Next.js boilerplate with edge-ready deployment, TypeScript, Tailwind, tRPC, and testing tools.

A Jekyll theme inspired by classic 8bit games, styled with NES.css and ready for GitHub Pages.

A proof-of-concept showing Module Federation across three Next.js 13 apps using Chakra UI, with shared components from Chakra Templates.

A Nuxt UI boilerplate that builds a changelog site from GitHub release notes.
Custom HTML5 Video is a JavaScript starter project for building your own video player on top of the native HTML5 video element, with custom controls, fullscreen, and picture-in-picture support.
This project is a working implementation of a custom video player built with JavaScript and the HTML5 video API. It replaces the default browser controls with a custom control bar that you can style and extend, and it adds native fullscreen and Picture-in-Picture functionality through browser APIs. The source code is available on GitHub (with 151 stars at the time of writing) and includes a live demo at http://custom-html5-video.surge.sh/. It accompanies a detailed tutorial on Freshman.tech that walks through each piece of the player. To run it locally, you need Node.js and npm; the repository was tested with Node v12.6.0 and npm v6.9.0.
Clone the repository from GitHub, run npm install to fetch dependencies, and then npm start to launch the development server. The player uses the HTML5 media element's native methods and events — such as play, pause, and timeupdate — to sync the custom controls with video state. The companion tutorial on Freshman.tech explains each part of the code in detail.
Yes, you can try the player live at http://custom-html5-video.surge.sh/.
You need Node.js and npm installed. This project was built against Node v12.6.0 and npm v6.9.0.
The player relies on the HTML5 video element, the Fullscreen API, and the Picture-in-Picture API. It works in modern browsers that implement these APIs; Picture-in-Picture is not supported in every browser.
The step-by-step tutorial is published at https://freshman.tech/custom-html5-video/.