Replace the imperative `#loop()` with a single chained promise: each cycle's `.then` returns the next cycle's `schedule(clone())`, so the recurrence is the method calling itself. The slot is released just before re-scheduling the same-id clone so the call advances rather than dedup-returning; ownership is tracked by `#active === task`. Error handling moves downstream — the runner no longer invents a retry policy: - A genuine run/reschedule failure rejects schedule()'s promise (propagates to the caller); no swallowing. - The runner's own cancellation (abort/supersede/destroy) is not a failure, so an aborted recurrence settles quietly — callers don't `.catch` routine teardown. Consequences: - `reschedule` is now required; `runOnce` expresses run-exactly-once explicitly (a missing reschedule is a bug, not a silent run-once). - Reschedule-driven retry-on-transient-error is dropped (a rejected run is terminal). The retry logic in delayedReschedule / mediaPlaylistReloadDelay is now vestigial — to be cleaned up or relocated to the fetch layer next. - `resolve-track` catches schedule()'s promise (abort settles quietly; genuine resolve failures end the recurrence, TODO surface to state). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Video.js v10
Modern, modular, and composable media player framework for Web and React.
🚧 Beta - close to stable. Experimental adoption in real projects. 🚧
Video.js v10 is close to stable. Try it out in real projects and share your feedback 🙏.
- Read our design documents.
- Read the v10 discussion topic.
- Watch Heff's recent presentation.
Timeline
- Technical Preview (Complete): Initial showcase for Demuxed.
- Alpha (Complete): See milestone
- Beta (Complete): See milestone
- GA (Mid 2026): See milestone ← WIP
- Video.js (End of 2026): Video.js core/contrib parity and supported plugins migrated.
Documentation
If you'd like to get started and learn more, you can find our documentation on our website:
Community
If you need help with anything related to Video.js 10, or if you'd like to casually chat with other members:
Contributing
We'd love for you to join our community channels above and give us feedback! Feedback on any of the following would help us:
- Player skin designs
- Component structures and APIs
- Package structure and exports
- Repo, workspace, contributor guides
Please see our contributing guide for getting set up locally and making code or docs changes.
Code of Conduct
Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.