5.0.0 June 21, 2026
Features
- Can be installed and bundled as an NPM package with a new ES module entry point
ableplayer.esm.js. Tested with Vue and Vite, should also be compatible with other stacks with webpack, React, etc. - No longer exposes anything on
window, except the UMD bundles when used as an IIFE, which only addAblePlayer. UMD bundles tested to work properly with RequireJS. - Code cleaned up to run in "strict" mode, which is required for ES modules.
- Can be dynamically created and disposed indefinitely without memory leaks or event handling issues. Use
new AblePlayer(media)andinstance.dispose(). - TypeScript type definitions for
ableplayer.esm.js. - Source maps for all bundles.
- Support for Spoken Captions. New options in Captions settings menu to enable automatic voicing of captions.
Design
- Default CSS now limits the max width of the
videoelement loading Able Player to 100%. - Added new class
.ableplayer-clear, used only in legacy display options. - Separator between elapsed time and total duration is now a separate
span class="able-timer-separator".
Non-breaking changes
- Audited translation files and removed 38 translatable strings that were unused or duplicated by other strings.
- Removed all inline scripts and styles from Able Player core.
- Removed unused parameters from the AccessibleSlider component.
Breaking changes
data-root-pathno longer supported (or needed, in most cases). Translations are now bundled, and icons are always hard-coded SVGs. For most users this is an improvement, since translations and icons no longer need to be hosted separately, and translations are no longerfetched in a loop. Once you migrate, you can deletebutton-iconsandtranslationsfrom your application. However, to add custom translations, you will need to build your own bundle, and custom icons are no longer possible.- Relatedly,
data-icon-typeno longer supported, since the icons are now always hard-coded SVGs. - There are plans for a future release to allow configuration in
new AblePlayerto add custom translations and icons.
- Relatedly,
- Various things Able Player added to
windoware moved or no longer exposed.window.AblePlayerInstances->AblePlayer.ablePlayerInstances. Previously, dynamically creating an Able Player required applications to manually add the new instance towindow.AblePlayerInstances. Code doing this will no longer work. To migrate, just callnew AblePlayerand it will automatically add itself toAblePlayer.ablePlayerInstances. Don't forget to calldispose()to dynamically remove instances from this list. This list is now aSetrather than an array, but most applications won't need to access it directly anymore.- UMD bundles that include DOMPurify no longer expose it on
window. If you need DOMPurify onwindow, migrate to theseparate-dompurifybundle, and include DOMPurify in a separate<script>tag. - Able Player internals are no longer exposed on
window.window.AccessibleDialogwindow.AccessibleSliderwindow.validate
- Able Player is now built expecting browsers to support ES 2022. 95% of browsers support ES 2022, compared to 96% for ES 2015. Use Babel or similar to transpile to older ES versions, if you're sure you need one. Able Player 4.8.0 was already using
Object.hasOwnwhich is part of ES 2022, but those will now be more widespread, so new breakage is possible.
Bug fixes
- Region-specific language tags are supposed to have the region capitalized. The affected translations are
pt-BRandzh-TW. Able Player was lowercasing them before. - Various issues with Vimeo error handling. The
catchblocks were referencing nonexistent variables. - Fix prev/next item navigation in playlists.
- Display volume value as a percentage in all cases.
- Update seekbar width to be expressed in percentages.
- Fix handling of
data-langattribute so language is detected more consistently.
Code cleanup
- Able Player now passes
eslint's "recommended" rule set. In the process, we fixed some values that were alwaysundefinedbefore, for example:this.lang, and thelangvalues ingetSampleDescriptionText. This shouldn't break anything, but, worth mentioning just in case someone was relying on these values beingundefined.
Documentation
- Added documentation about Able Player's Content Security Policy requirements.
Internationalization
- Added Slovak translation (props @rraddatch - Radoslav Ďurač)
- Updated Catalan translation (props @ralcarazm)
- Updated Dutch translation (props @rianrietveld)
Full Changelog: v4.8.0...v5.0.0