Releases: jwplayer/jwplayer-react-native
v1.6.0
What's Changed
✨ Highlights
- New advertising prop:
liftsVMAPLevelExtensions— lifts a VMAP-level<vmap:Extensions>block down into each<vmap:AdBreak>(e.g. for skippable extensions). VMAP-inline-only; ignored for remote VMAP URLs.- iOS: works on both modern and legacy config (wired in
RNJWPlayerAds.configureVAST). - Android: works via the modern (default) config path; not available with
forceLegacyConfig(the Android SDK exposes the setter only onVmapAdvertisingConfig).
- iOS: works on both modern and legacy config (wired in
- iOS JWPlayerKit → 4.26.2 and Android SDK → 4.25.2 (native fixes detailed below).
📦 Native SDK upgrades
iOS — JWPlayerKit 4.26.1 → 4.26.2 (#238)
- IMA viewability fixes — friendly obstructions, fullscreen refresh, and redirect cap
- Hardened end-of-media stall safety net
- Swift-side VMAP-level skippable extension injector (backs
liftsVMAPLevelExtensions)
Android — JW SDK 4.25.1 → 4.25.2 (#239)
- Fix side-loaded captions not rendering on track switch
- Fix postroll
adPositionincorrectly reporting asPRE - Refresh background-audio notification on metadata change
- Android-side VMAP-level skippable extension injector (backs
liftsVMAPLevelExtensions)
🔧 Bridge fixes
- fix(android): catch
IllegalViewOperationExceptioningetPlayerViewby @Jmilham21 in #237 - fix(ios): present JWPlayerKit menus over host tab bar (#93) by @Jmilham21 in #236
🧱 Dependency & release
- chore: bump JWPlayerKit to 4.26.2 (iOS) by @Jmilham21 in #238
- chore: bump Android SDK to 4.25.2 + expose
liftsVMAPLevelExtensionsby @Jmilham21 in #239 - Release v1.6.0 by @Jmilham21 in #240
Full Changelog: v1.5.1...v1.6.0
v1.5.1
Highlights
This is a patch release that pulls in upstream native SDK bug fixes — no bridge API changes, so it's a drop-in upgrade from 1.5.0.
Native SDK Upgrades
iOS — JWPlayerKit 4.26.0 → 4.26.1 (changelog)
- Fixed intermittent AVPlayer crash when starting a Chromecast session
- Fixed Chromecast playlist progression breaking after the first item
- Fixed stuck "Playing on AirPlay" overlay after media swap
- Captions now always reload
AVPlayerItemon content load (correct sideloaded captions on sequential playlist items) - Fixed lock-screen artwork distortion for non-square posters
- Headless player JS upgraded to
8.48.1
Android — JW Player SDK 4.25.0 → 4.25.1 (changelog)
- Fixed Chromecast caption disable and on-screen icon state sync
- Fixed DAI "Learn More" click-through pause/resume in Picture-in-Picture
- Headless player JS upgraded to
8.48.1
Bridge / Packaging
- Added
android/libsandios/frameworksto.npmignoreto keep local-dev binaries out of the published tarball (#231, corrected casing in #235)
What's Changed
- chore: bump JWPlayerKit to 4.26.1 (iOS) and JW SDK to 4.25.1 (Android) by @Jmilham21 in #234
- chore: add android/libs and ios/Frameworks to .npmignore by @Jmilham21 in #231
- Release v1.5.1 by @Jmilham21 in #235
Full Changelog: v1.5.0...v1.5.1
v1.5.0
Highlights
New playback API
setPlaylistItemMetadata({ title, description, image })updates the currently playing item's metadata without a reload, with a matchingonPlaylistItemMetadataChangedevent. Android also exposes arefreshNotificationflag that cycles the foreground MediaService so the background-audio notification rebuilds with the new title/description. See #228.
Native SDK upgrades (#227)
-
iOS: JWPlayerKit
4.25.2→4.26.0— iOS changelog- Quality menu: filter out audio-only sources, label HLS as Auto, preserve captions after a quality switch
jwplayerIsReadynow dispatched on the main queue- Fix accessibility label when player-item title/description are empty
- Fix toolbar transparency on the error screen when
UIDesignRequiresCompatibilityis true - New
bufferHealthonJWTimeDatafor live-stream buffer metrics - New public
JWJSONParser.playlistItems(from:)API deviceId/deviceModelrenamed to camelCase⚠️ Minimum iOS deployment target raised to 15.6
-
Android: JW Player SDK
4.24.2→4.25.0— Android changelog- Fix user-interaction crash during player teardown
- Fix
ForegroundServiceStartNotAllowedExceptioncrash on API 31+ - Fix oversized captions when the player view is taller than the video
- Fix VAST progress-bar freeze after an ad error
- Fix live audio stream showing an infinite spinner with missing controls
- Fix IMA preroll playing simultaneously with content on replay
bufferedPositionexposed onBufferChangeEventfor live-stream buffer health- Ad-tag macro replacement for IMA ads
Bridge fixes
- Cast-aware reconfigure preserves the active Chromecast session across config changes (#221)
- Normalize event payloads across iOS and Android (#226)
- Normalize iOS seek event properties to match Android and TS types (#224)
- iOS
onBeforeNextPlaylistItemno longer fires on the initial playlist load (#220) - Android:
onPlaylistnow fires (previously a no-op),onPlaylistItem.playlistItemJSON uses readable keys instead of ProGuarded field names, andonAdEventemits atypeon AdLoaded / AdLoadedXml / AdBreakIgnored (landed in the release branch, #229)
What's Changed
- Fix IOS running onBeforeNextPlaylistItem callback on initial video load by @normtronics in #220
- fix: normalize iOS seek event properties to match Android and TS types by @Jmilham21 in #224
- Upgrade native SDKs — iOS 4.26.0 / Android 4.25.0 by @Jmilham21 in #227
- Add setPlaylistItemMetadata for live-stream metadata updates by @Jmilham21 in #228
- fix: cast-aware reconfigure to preserve Chromecast session by @Jmilham21 in #221
- fix: normalize event payloads across iOS and Android by @Jmilham21 in #226
- Release v1.5.0 by @Jmilham21 in #229
Full Changelog: v1.4.1...v1.5.0
v1.4.1
What's Changed
- Bump JW Android SDK from 4.24.1 to 4.24.2
- Release v1.4.1 by @Jmilham21 in #219
Full Changelog: v1.4.0...v1.4.1
v1.4.0
v1.4.0
Native SDK Upgrades
- iOS: JWPlayerKit 4.25.1 → 4.25.2
- Android: JW Player SDK 4.24.0 → 4.24.1
Bug Fixes
- fix(ios): replace force-unwrap with safe cast in resolveNextPlaylistItem by @Jmilham21 in #215
- fix: resolve onBeforeNextPlaylistItem crash and ad issues (#211) by @Jmilham21 in #214
Native SDK Changes (included via version bump)
iOS 4.25.2
- Improved threading safety for event callbacks
- Fixed ad container layout in scrollable contexts
- Fixed caption track selection for DRM content
- Player controls now remain visible while paused
Android 4.24.1
- Fixed ad prerolls not playing on subsequent playlist items when using async playlist callbacks
onTimeevents now fire while a DVR stream is paused- Improved null safety for ad API calls
- Fixed Chromecast caption visibility and restoration
Maintenance
- Reduced npm package size from 151 kB to 91 kB
- Added build-info hooks to the Example app
What's Changed
- fix(ios): replace force-unwrap with safe cast in resolveNextPlaylistItem by @Jmilham21 in #215
- fix: resolve onBeforeNextPlaylistItem crash and ad issues (#211) by @Jmilham21 in #214
- Release v1.4.0 by @Jmilham21 in #217
Full Changelog: v1.3.4...v1.4.0
v1.3.4
What's Changed
Bug Fixes
- fix: Ensure player cleanup runs on main thread to prevent crash on unmount (#206)
- fix: Prevent race conditions during player destruction and enhance error handling (#205)
Dependencies
- Upgrade iOS SDK to JWPlayerKit 4.25.1 (#209)
- See iOS 4.25.1 changelog for native SDK changes
Maintenance
- Exclude AI configuration files from npm package
Full Changelog: v1.3.2...v1.3.4
Note: v1.3.3 was skipped due to a packaging issue.
v1.3.2
Release Notes - v1.3.2
🐛 Bug Fixes
Android: Remove Accidental Command Paste in ImaHelper
Problem: An accidental terminal command was left in the ImaHelper.java source code from v1.3.1, causing compilation errors for projects using Google IMA.
Solution: Removed the errant command line text from the ImaHelper class.
Impact: Android builds with IMA enabled now compile successfully without syntax errors.
📦 Installation
npm install @jwplayer/jwplayer-react-native@1.3.2
# or
yarn add @jwplayer/jwplayer-react-native@1.3.2What's Changed
- Fix bad copy and paste command by @Jmilham21 in a594796
Full Changelog: v1.3.1...v1.3.2
v1.3.1
Release Notes - v1.3.1
🐛 Bug Fixes
Android: Make IMA Dependency Optional (#201)
Problem: After v1.3.0, developers not using Google IMA ads encountered Android build failures requiring core library desugaring even when IMA wasn't being used.
Solution: Implemented Gradle source sets to make the jwplayer-ima dependency truly optional:
- IMA dependencies only included when
RNJWPlayerUseGoogleIMA = true - No desugaring required for non-IMA users
- Graceful degradation: player loads without ads instead of crashing
- Clear warnings when IMA is configured but not enabled
Impact: VAST-only users can now build without IMA dependencies or desugaring requirements.
🔧 Technical Changes
- Split IMA code into separate source sets (
src/ima/andsrc/noima/) - Added support for both
"client"and"adClient"property names in advertising configs - Improved null-safety and validation in advertising configuration
- Enhanced developer experience with clear warning messages
📦 Installation
npm install @jwplayer/jwplayer-react-native@1.3.1
# or
yarn add @jwplayer/jwplayer-react-native@1.3.1⚙️ Configuration
For IMA users (no change):
// app/build.gradle
buildscript {
ext {
RNJWPlayerUseGoogleIMA = true
}
}For VAST-only users (now works without desugaring):
// app/build.gradle
buildscript {
ext {
RNJWPlayerUseGoogleIMA = false // or omit entirely
}
}What's Changed
- Fix Android build failure for non-IMA users (#201) by @Jmilham21 in #203
- [Release] 1.3.1 by @Jmilham21 in #204
Full Changelog: v1.3.0...v1.3.1
v1.3.0
Release 1.3.0
🎉 What's New
Native SDK Upgrades
iOS SDK 4.25.0
- Chromecast Improvements: Fixed embedded captions not displaying on Chromecast devices
- Playback Fixes:
- Fixed video not completing after post-roll ad
- Fixed video pausing after scrubbing during playback
- UI Improvements:
- Fixed Next Up card showing wrong video
- Fixed toolbar transparency issue with
UIDesignRequiresCompatibilityon iOS 26 - Fixed iOS 26 black screen in
JWPlayerViewafter ad break
- Stability: Prevented
AVPlayerItemcrash when adding outputs that are already attached
See full details: iOS 4.25.0 Changelog
Android SDK 4.24.0
- Ad SDK Upgrade: Upgraded Google IMA SDK to version 3.37.0
⚠️ Important: Core library desugaring must be enabled when adding Google IMA client dependencies⚠️ Breaking: Requires setting compiling and target SDK versions when adding the SDK
- Chromecast Improvements: Improved support for embedded captions in HLS streams when casting to Chromecast
- Stability: Fixed Picture-in-Picture (PiP) crash that could occur when PiP was triggered multiple times in quick succession
See full details: Android 4.24.0 Changelog
React Native Wrapper Improvements
- Fixed: License key handling in TypeScript example (#199)
- Fixed: Player recreation with configuration updates (#194 - fixes issues #192, #188)
- Enhanced: Player item handling in YouTube example component (#191)
- Improved: Added bottom padding for Android navigation (#190)
- Documentation: Updated JSON parsed configs documentation (#187)
- Documentation: Updated README with rebranding and latest information (#196)
- Native SDK: Implemented Android 4.24.0 (#197)
- Native SDK: Implemented iOS 4.25.0 (#198)
📦 Installation
npm install @jwplayer/jwplayer-react-native@1.3.0or
yarn add @jwplayer/jwplayer-react-native@1.3.0⚠️ Breaking Changes
Android
When upgrading to Android SDK 4.24.0, you must:
- Set the compiling and target SDK versions in your app configuration
- Enable core library desugaring if using Google IMA client dependencies
🐛 Bug Fixes
- Fixed license key not being properly passed in TypeScript example
- Fixed player recreation issues when updating configurations dynamically
- Fixed multiple Chromecast-related playback issues (via native SDK updates)
- Fixed PiP stability issues on Android (via native SDK update)
- Fixed various iOS 26 compatibility issues (via native SDK update)
📚 Documentation
- Enhanced documentation for JSON configuration parsing
- Updated README with current setup instructions
- Improved example app implementations
🙏 Contributors
Thank you to all contributors who helped make this release possible!
What's Changed
- Upgrade Example to 1.2.0 by @Jmilham21 in #185
- feat: add bottom padding for Android navigation by @Jmilham21 in #190
- Fix for issue 192 and 188 recreate with configs by @Jmilham21 in #194
- feat: enhance player item handling in YoutubeExample component by @Jmilham21 in #191
- Upgrade Documentation about JSON parsed configs by @Jmilham21 in #187
- Update README.md (rebranding) by @kcorneli201 in #196
- Implement Android 4.24.0 by @Jmilham21 in #197
- Implement iOS 4.25.0 by @Jmilham21 in #198
- fix: Send proper license key in typescript example by @Jmilham21 in #199
- [Release] 1.3.0 by @Jmilham21 in #200
Full Changelog: v1.2.0...v1.3.0
v1.2.0
What's Changed
- Release 1.1.3 by @Jmilham21 in #178
- Upgrade Android 4.21.1 by @Jmilham21 in #182
- Upgrade iOS 4.23.2 by @Jmilham21 in #181
- feat: add recreatePlayerWithConfig method for dynamic player configuration on iOS by @Jmilham21 in #180
- Release 1.2.0 by @Jmilham21 in #184
Full Changelog: v1.1.3...v1.2.0