Show HN: I took back Video.js after 16 years and we rewrote it to be 88% smaller

589 points - yesterday at 6:03 PM


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.

Source

Comments

rendaw today at 4:19 AM
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?

mc007 today at 8:21 PM
Why does the bundle size matters when playing 3MB+ videos anyway? Curious how I could integrate one of these players without polluting my bundle with duplicates :)
rezmason today at 5:24 AM
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

bl4kers today at 4:13 AM
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

BatteryMountain today at 6:52 AM
I'm not familiar with video hosting but have played with html5 video player but I have this question: on the servers side, do I have to host a specific endpoint that serves chunks of video? Lets say I take 720p video @ 800mb and I chunk it into 2mb pieces with ffmpeg. So I have a folder somewhere (webserver, cdn, blob storage) with the original 4K video, then generate downscaled versions for 1440p, 1080p, 720p, so I end up with 4 large files, and then for each of those, I chunk them into reasonable sizes that aligns with bitrates / key frames. And then some thumbnail generation. Any advise on what the "best" way would be to chunk/host video files so that videojs runs the best and smoothest? I feel that I should build a very lean/fast chunk & thumbnail server, just one or two endpoints. Or is it best to let the webserver do the lifting? Or off-the-shelf media servers (like in the self-hosting community)?
BatteryMountain today at 6:14 AM
Just want to say, thanks for the comprehensive blog post and not treating the reader like children. You did a great job explaining the differences & changes. I wish more product/project releases were done this well.
jjcm today at 12:23 AM
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 today at 12:26 AM
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.

M4v3R today at 10:10 AM
Sibling comment didn't elaborate, but I think they might be onto something.

It happened to me personally - LLMs and agentic coding tools enabled me to pick up old side projects and actually finish them. Some of these projects were in the drawer for years, and when Sonnet 4 released I gave them another try and got up to speed really quickly. I suspect this happened to many developers.

01jonny01 today at 6:44 PM
It would be good if videoJS had youtube embed api and documentation like Plyr has
dylan604 today at 4:10 PM
I see you promoting that the looks are consistent across browsers. I've seen several other video players that are browser dependent because of particular JS features used. Are future features going to remain browser agnostic?
rcakebread yesterday at 11:14 PM
I just happened to try v10 yesterday for HLS and it's looking great so far.
tuukkah today at 11:17 AM
Has the WebVTT story changed? I once tried to customize the subtitle rendering but it seemed too difficult.
lexro_ai today at 10:43 AM
Genuinely didn't expect 88% — what was the biggest win? Guessing it was the plugin system since that thing was a mess. Also curious if you broke any of the major integrations during the rewrite or managed to keep them intact.
ronak_parmar today at 3:30 PM
Great Work, Loved the approach.
nchmy today at 1:15 AM
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!
progx today at 7:43 AM
Awesome! And thank you all for your projects and your hard work!

I hope the plugin directory get an overhaul too and a prominent place an the webpage. The plugin ecosystem was for me a huge benefit for Video.js

Even though some of them are outdated, they were a good source of inspiration.

naseemali925 today at 3:40 AM
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.
jacobgkau today at 6:49 PM
As someone who uses VideoJS on a website with a large video library, and has generally been dismayed at the state of the plugin ecosystem every time I consider doing a major version upgrade of VideoJS, this kind of thing is great to hear.
michaelsalim yesterday at 10:58 PM
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.
swaminarayan today at 9:48 AM
What were the biggest architectural changes in the rewrite, and what tradeoffs did you make compared to the old Video.js design?
thedanbob yesterday at 10:55 PM
Very nice! I switched off video.js some time ago because it kept giving me trouble. Looking forward to trying this new version.
EdgeNRoots today at 9:26 AM
88% reduction is wild. Did most of that come from eliminating dependencies or rewriting core components from scratch?
gnulinux996 today at 1:50 AM
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.

sam_goody yesterday at 10:40 PM
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?

nakodari yesterday at 10:23 PM
Absolutely love what you and your friends have built. Great work! Will give it a spin.
esprehn today at 1:55 AM
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?
taosx today at 1:43 AM
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?
grzes yesterday at 11:14 PM
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
gorbiesRedScar today at 12:46 AM
this is lovely work
efilife today at 4:51 AM
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

EGreg today at 1:21 AM
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?

rsmtjohn today at 8:28 AM
[flagged]
leontloveless today at 4:02 PM
[dead]
Serhii-Set today at 3:02 PM
[dead]
wei03288 today at 1:40 PM
[dead]
maniacsudip today at 7:41 AM
[dead]
suoer today at 6:24 AM
[dead]
devnotes77 today at 12:32 AM
[dead]
federicodeponte today at 10:29 AM
[dead]
maniacsudip today at 7:17 AM
[dead]
leontloveless today at 12:02 AM
[dead]
moci today at 3:38 PM
[dead]
hikaru_ai today at 7:09 AM
[dead]
mitul005 today at 8:07 AM
[dead]
openclaw01 today at 1:38 AM
[dead]
unit149 today at 6:19 AM
[dead]
moi2388 today at 4:13 PM
Cool. The video tag with ads. Thats what we need /s
nulltrace today at 1:07 AM
[flagged]
rdevilla today at 10:30 AM
[flagged]