Five years ago, we lost a potential customer to a competitor's video platform. The reason? They had a built-in player. The twist? That player was just using Video.js — the open source project I'd created back in 2010.
That moment crystallized something we'd been feeling for a while: infrastructure alone wasn't enough. Developers wanted to get started quickly and know they'd be supported when any video problem came up, including client-side. So we set out to build Mux Player for web, determined to create a modern video player that made working with Mux Video effortless while looking beautiful out of the box.
After five years of Mux Player, we’re combining our efforts and learnings with Video.js to create something even better in Video.js v10.
What made Mux Player special
When we started building Mux Player in 2021, we made a strategic decision: it would only work with Mux Video. This wasn't a limitation — it was a superpower. By tying the player directly to Mux's infrastructure, we could make features like thumbnail previews, captions, and signed URLs dead simple. Drop in a playback ID and everything just worked, compared with hours of wrestling plugins, configuration, and UI components.
We worked with early design partners to refine the experience. Patreon needed video profiles that could ship fast. Bandcamp wanted beautiful audio/video players that matched their aesthetic without custom styling work. A learning platform partner required secure educational content without developers needing to understand DRM implementation details. The tight coupling let us solve all of this.
Most importantly, Mux Player helped customers choose Mux Video and stick around longer. We could ship improvements to captions, security features, and performance without customers needing to change a single line of code. The tight integration we'd built was paying off just as we'd hoped.
The lessons we learned
We also learned some hard truths along the way.
Ecosystem was too complex. We'd built an incredible foundation with Media Chrome (our web component UI toolkit), Media Elements (framework-agnostic playback engines), and player.style (themed examples), with Mux Player then wrapping them all up. Each served a purpose, but together they created mental overhead. Explaining the relationships between these projects became a barrier to adoption, even as each individual piece was well-liked. Video.js v10 consolidates these concepts into a single project that’s very intentional in how you start simple and then dive deeper gradually without navigating across multiple project boundaries.
Customization cliff. Mux Player gave you sensible defaults and some styling options, but when you wanted to go deeper, we'd point you to Media Chrome and Web Components. For React developers especially, this felt like being dropped into unfamiliar territory. We'd gotten 90% of the way to an idiomatic experience in React using Web Components underneath, but that last 10% proved elusive. Video.js v10 introduces you immediately to the decoupled concepts — media state, media UI, media renderer — built from the ground up in your framework of choice — so it will be genuinely idiomatic in React and in any other JS framework you choose.
Tight coupling paid off. Making Mux Player work only with Mux Video enabled real magic — automatic thumbnail previews, captions, and signed URLs without configuration. Video.js v10 preserves this experience through Mux-specific plugins rather than baking it into the core.
Limited Community contribution. Despite being open source, Mux Player saw minimal external contributions. The Mux branding and tight coupling made it feel like a corporate product rather than a community project. Meanwhile, Video.js had built up 500+ plugins over its lifetime, solving problems we'd never have time to address ourselves. By building on Video.js, we benefit from that established ecosystem and community trust.
Monolithic bundles work until they don't. Mux Player's 900KB minified bundle was justified by the tight integration and comprehensive feature set. But not every implementation needs every feature. We watched customers ship hundreds of kilobytes for simple use cases like background video. Video.js v10's modular, tree-shakeable architecture means a background video implementation ships 9KB, not 900KB.
Every support conversation, every feature request, every bug report with real customers taught us something that pure theory never could.
We're not leaving behind what we learned from building Mux Player. We're applying every lesson to create a player that's smaller, more flexible, more customizable, and still just as simple to get started with. Those five years of production insights are now shaping a player that can serve both Mux customers and the broader web video ecosystem.
What this means for you
If you're using Mux Player today (or starting to use it), nothing changes immediately. Mux Player continues to work exactly as it does, with full support for security patches and bug fixes.
When Video.js v10 reaches general availability in mid-2026 with full Mux Player feature parity, we'll provide clear migration paths. But there's no urgency — migrate when it makes sense for your roadmap, not ours.
Using the Mux Player iframe? You'll automatically benefit from v10's improvements without any code changes. The iframe will continue to work seamlessly, updated under the hood as v10 matures.
The same engineers who built Mux Player are building Video.js v10, applying five years of production learnings to create something smaller, more flexible, and more customizable, while keeping the same "drop in a playback ID and everything works" experience you rely on today.
That's what Mux Player gave us: not just code, but clarity about what developers actually need. And now we're building it.
Using Mux Player iOS/Android? This evolution is web-specific so no related changes for you, but stay tuned for exciting improvements of those SDKs this year as well.



