Show HN: I took back Video.js after 16 years and we rewrote it to be 88% smaller
What do you do when private equity buys your old company and fires the maintainers of the popular open source project you started over a decade ago? You reboot it, and bring along some new friends to do it. Video.js is used by billions of people every month, on sites like Amazon.com, Linkedin, and Dropbox, and yet it wasn’t in great shape. A skeleton crew of maintainers were doing their best with a dated architecture, but it needed more. So Sam from Plyr, Rahim from Vidstack, and Wes and Christain from Media Chrome jumped in to help me rebuild it better, faster, and smaller. It’s in beta now. Please give it a try and tell us what breaks.
Discussion Highlights (20 comments)
nakodari
Absolutely love what you and your friends have built. Great work! Will give it a spin.
sam_goody
Very nice. Good Luck! Did the private equity buy the domain videojs.org (did it take control of the project and you somehow regained control after selling) or was this domain (and the project) always under your control?
thedanbob
Very nice! I switched off video.js some time ago because it kept giving me trouble. Looking forward to trying this new version.
michaelsalim
Looking great. I'll give it a try later on once things stabilize a bit. In the meantime, does anyone know what's going on in this space? Seems to me like a lot is changing over the past year. Eg: react-player new version, taken over by Mux. And also I did realize Video.js is sponsored by Mux. And also seemingly different companies working together.
grzes
can anyone recommend me good, battle-tested "slider" solution for playing videos as well as displaying images from single gallery? ideally capable of handling huge galleries (hundreds of items) with lazy loading
rcakebread
I just happened to try v10 yesterday for HLS and it's looking great so far.
jjcm
Out of curiousity, why not distribute this as a webcomponent? It's a perfect use case for it - a semantic object that has built in controls / chrome.
zacharyozer
Congrats Steve! I haven't touched video since I was at JW Player a million years ago, but I always inspired by the simplicity of video.js (especially the theming). Hope this new iteration is exceptionally successful.
gorbiesRedScar
this is lovely work
nulltrace
The feature-array approach to createPlayer is smart. We did something similar splitting a monolith into per-feature packages and the hardest part wasn't the split itself, it was figuring out where the boundaries go. Two features look independent until you realize they share some piece of state that neither wants to own. Curious how they handle cross-feature state deps here.
nchmy
I was just lamenting the other day about the size of video.js, which is used in my legacy web app, and looking for a way to improve that. Very keen to explore how we could migrate to v10!
EGreg
Serious question. We currently have this tool in our framework, that we use to play videos from youtube, vimeo, and a whole lot of other sites: https://github.com/Qbix/Platform/blob/main/platform/plugins/... We currently already use video.js, and our framework us used all over the place, so we’d be the perfect use case for you guys. How would we use video.js 10 instead, and for what? We would like to load a small video player, for videos, but which ones? Only mp4 files or can we somehow stream chunks via HTTP without setting up ridiculous streaming servers like Wowsa or Red5 in 2026?
taosx
Are there any plans to support other frontend frameworks? If I wanted to use it today in something like svelte how should I go about it?
gnulinux996
I am curious, why would anyone pick HLS over Dash in these days? Granted, my knowledge on the matter is rather limited, but I had some long running streams (weeks) and with HLS the playlist became quite large while with dash, the mpd was as small as it gets.
esprehn
This is very cool, but I'm confused why the React player is smaller than the HTML player. What's actually in the size comparison there?
naseemali925
This is amazing. We also kind of created a Player context provider and was using it to maintain/mutate player state globally. If its possible to also share any examples related to player events and new way to register plugins in V10, that would also help better understand the overall picture.
bl4kers
Probably not base case but a quick test to replace my audio player (currently using Plyr) turned up the following gaps for me, at least with the out-of-the-box code. 1. No playback rates under 1 2. No volume rocker on mobile 3. Would appreciate having seek buttons on mobile too 4. No (easily apparent) way to add an accent color, stuck with boring monochrome 5. Docs lacked clear example/demo/playground so I wasn't sure what it would look like until implemented
rendaw
I've never used video.js, and the site/advertising seems to be fairly oriented towards people who have used it or are familiar with it. I had one question I couldn't answer reading the site: what makes this different from the native html video element? AFAICT just the transport controls?
efilife
Seeking on the main https://videojs.org/ page doesn't work for me on chromium. Throws Uncaught (in promise) TypeError: AbortSignal.any is not a function on volume-slider-data-attrs.BOpj3NK1.js
rezmason
In case anyone's wondering, this website's syntax highlighting color scheme is called "gruvbox", which I quite like but took an embarrassingly long time to track down https://github.com/morhetz/gruvbox