Skip to content
CAI
Software that uses CAICheck a score

TheWidlarzGroup/react-native-video

52.9

Adequate · 25 September 2026

16.4k

lines of production code

TypeScript

with Swift, Kotlin

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a React Native video player library that has been re-architected to support the New Architecture via Nitro Modules and a monorepo structure. It provides cross-platform video playback capabilities for iOS, Android, and web, featuring robust support for HLS, external subtitles, and Picture-in-Picture modes. The system also includes a dedicated DRM plugin for handling protected content through Widevine and FairPlay, along with comprehensive tooling for testing and release management.

How it got here

2015–2025 — v7 Nitro architecture migration

38 changes.

The project underwent a major architectural overhaul, migrating from the legacy Objective-C RCTVideo implementation to a new v7 architecture powered by Nitro Modules and the React Native New Architecture. This transition involved restructuring the codebase into a Bun-managed monorepo, rewriting native Android and iOS layers using Media3 and Swift, and introducing a plugin system for extensibility. Key features added during this period include comprehensive Picture-in-Picture support, background audio, and a dedicated DRM plugin for Widevine and FairPlay.

2026 — Web support and E2E testing infrastructure

4 changes.

This period focused on enabling web platform support for the video player through platform-specific event handling and a dedicated browser example. It also established a robust end-to-end testing infrastructure using Maestro for deterministic CI validation across multiple React Native versions, complemented by new unit tests for core hooks and error parsing logic.

Features

Add DRM plugin for Widevine and FairPlay support

Introduces the @react-native-video/drm plugin, enabling protected content playback via Widevine on Android and FairPlay on iOS/visionOS. Users can now enable the plugin at startup and pass DRM parameters (such as license URLs, certificates, and headers) to the video player to handle secure streaming.

packages/drm-plugin · high confidence

Add DRM plugin interface for enabling/disabling features

The \packages/drm-plugin/src\ directory now exposes a new plugin interface that allows users to enable or disable DRM functionality via \enable()\, \disable()\, and \isEnabled\ exports. This interface is backed by native implementations (Swift for iOS, Kotlin for Android) through \react-native-nitro-modules\, providing a unified JavaScript API to control the DRM state.

packages/drm-plugin/src · high confidence

Add Expo config plugin for Android and iOS video features

This location introduces the Expo config plugin that automatically configures native project files for react-native-video. It adds support for Android notification controls, Picture-in-Picture mode, and configurable ExoPlayer extensions (Dash/HLS) via gradle properties, as well as background audio support on iOS via Info.plist modifications. The plugin also handles Podfile variable injection for react-native-test-app compatibility.

packages/react-native-video/src/expo-plugins · high confidence

Added DRM support and time formatting utilities to the example app

The example application now includes utilities to support Digital Rights Management (DRM) for video playback. A new \videoSource.ts\ utility provides platform-specific configurations for FairPlay (iOS) and Widevine (Android) DRM, handling license acquisition and certificate validation, while also managing the enabling and disabling of the DRM plugin based on the requested video type. Additionally, a \time.ts\ utility was added to format video duration in a standard MM:SS display format.

example/src/utils · high confidence

Added FairPlay DRM support and text track management UI

The iOS DRM plugin now implements FairPlay Streaming support via a new DRMManager that handles content key requests, license acquisition, and certificate fetching, while explicitly rejecting persistable key requests. In the example app, a new TextTrackManager component allows users to view, select, and disable available text tracks (subtitles) with live event logging, supported by new reusable UI controls.

example/src/components, packages/drm-plugin/ios · high confidence

Android DRM plugin implementation added

The Android native module for the DRM plugin has been added, introducing the core Kotlin classes (DRMManager, DRMPlugin, PluginManager) and C++ adapter required to handle Digital Rights Management. This implementation integrates with the Media3 library to manage DRM session configurations, license requests, and fallback logic, and registers the plugin within the existing video player architecture via the PluginsRegistry.

packages/drm-plugin/android · high confidence

Android video player core re-architected with Nitro and Media3

The Android implementation for react-native-video has been completely rewritten to use the Nitro bridge and Google's Media3 library. This change introduces a new plugin system (PluginsRegistry) allowing extensions to intercept and modify sources, DRM, and media factories. It adds robust Picture-in-Picture support via a dedicated helper fragment, improved audio focus management to handle ducking and interruptions, and a new C++ adapter for native initialization. Users benefit from more stable playback, better background handling, and extensibility for custom DRM or data sources.

packages/react-native-video/android · high confidence

Generated Nitrogen bindings for the DRM PluginManager

The \packages/drm-plugin/nitrogen\ directory now contains the generated native bridge code for the \HybridPluginManagerSpec\. This includes C++ headers and implementations, Android Kotlin and CMake autolinking files, and iOS Swift, Objective-C++, and Ruby autolinking files. These generated files expose the \PluginManager\ hybrid object to the JavaScript layer, providing an \isEnabled\ property and \enable\/\disable\ methods across both Android and iOS platforms.

packages/drm-plugin/nitrogen · high confidence

Introduce deterministic Maestro E2E test harness with CI matrix and local fixtures

This change adds a new end-to-end testing infrastructure using Maestro YAML flows, replacing ad-hoc testing with a structured, deterministic suite. It includes a comprehensive CI matrix design supporting React Native versions 0.77, 0.82, and 0.87 across Android and iOS, with specific handling for platform differences and version-specific build fixes (e.g., ReactNativeVideo podspec adjustments for RN 0.87). The suite relies on local, deterministic media fixtures (MP4, HLS, broken manifests) served by a custom Node.js HTTP server, ensuring tests are independent of external networks. Key flows cover happy paths, error handling (404, broken manifests), HLS seeking, looping, and volume controls. The implementation also includes robust transport-level retries for iOS deep links and tap events to handle simulator-specific timing issues, while enforcing a 'zero retries' policy for actual test assertions to prevent false positives. Documentation (CONTEXT.md, CI\_MATRIX\_DESIGN.md, README.md) details the design decisions, runner constraints, and local development workflow.

e2e, scripts/e2e · high confidence

Introduces native iOS view manager for React Native Video hybrid components

This change adds the \HybridVideoViewManager\ and its factory on iOS, bridging React Native properties like \keepScreenAwake\, \pictureInPicture\, \autoEnterPictureInPicture\, and \resizeMode\ to the underlying native video view. It also exposes methods to control fullscreen and Picture-in-Picture modes, establishing the native-side infrastructure required for these hybrid video features to function on iOS devices.

packages/react-native-video/ios/hybrids/VideoViewViewManager · high confidence

Introduces new VideoView component with web support and native enhancements

The library now includes a new \VideoView\ component that serves as the primary UI element for displaying video. This component introduces a new \keepScreenAwake\ prop (defaulting to true) to control device sleep, and a \surfaceType\ prop for Android to choose between \SurfaceView\ and \TextureView\. It also adds support for Picture-in-Picture mode via \pictureInPicture\ and \autoEnterPictureInPicture\ props, along with corresponding events and imperative methods. Additionally, the component now supports web platforms, leveraging \@videojs/react\ for playback and implementing the Media Session API for system-level media controls and metadata display.

packages/react-native-video/src/core/video-view · high confidence

Introduction of a plugin architecture for iOS video player extensibility

The iOS core now includes a plugin system that allows external modules to extend the video player's behavior. This change introduces a \PluginsRegistry\ and a \ReactNativeVideoPluginSpec\ protocol, enabling plugins to intercept player lifecycle events (creation/destruction), modify video sources before playback, and provide custom DRM managers. This provides a structured way to add features like custom encryption or analytics without modifying the core library code.

packages/react-native-video/ios/core/Plugins · high confidence

Introduction of core VideoPlayer implementation for native and web platforms

The \packages/react-native-video/src/core\ directory now contains the foundational \VideoPlayer\ class and its web-specific counterpart (\VideoPlayer.web.ts\). This change introduces the central engine responsible for managing video playback state (such as volume, current time, and status), handling source loading, and emitting events. The native implementation utilizes \react-native-nitro-modules\ for bridging, while the web implementation provides a detached HTML5 video player with support for external subtitles, media session handlers, and track selection, establishing the core API surface for the library's playback capabilities.

packages/react-native-video/src/core · high confidence

A dedicated test application (RNVideoE2E) has been added to the \test-app\ directory to host end-to-end video scenarios via deep links (e.g., \rnvtest://scenario/\<name\>\). The app uses a config plugin (\rnv-e2e-plugin.mjs\) to register the \rnvtest\ URL scheme on iOS and Android, and includes a patch for \react-native-test-app\ to ensure deep links are correctly forwarded to the React Native root on Android. It features a \ScenarioScreen\ that mounts a fresh video player for each scenario, an \EventLogPanel\ that exposes player state as text markers for test assertions, and a suite of Bun unit tests for the deep-link parsing and event logging logic.

test-app · high confidence

New React Native Video component library exports

The package now exposes a comprehensive set of React hooks and components for video playback, including \useEvent\ and \useVideoPlayer\ for state management, along with the \VideoPlayer\ and \VideoView\ components. It also exports detailed type definitions for events, player status, video/audio/text tracks, and various error types, as well as a utility function \setAudioSessionManagementDisabled\ to control audio session behavior.

packages/react-native-video/src · high confidence

New core type definitions for the video player architecture

This change introduces a comprehensive set of TypeScript interfaces and types in the core types directory, establishing the foundation for the video player's API. It defines the \VideoPlayerBase\ interface with properties for playback control (volume, rate, muted, loop), status, and methods for seeking and source replacement. It also introduces \VideoConfig\ for source and DRM parameters, \BufferConfig\ for platform-specific buffering settings, \DrmParams\ for license handling, and detailed event interfaces (\VideoPlayerEvents\, \VideoViewEvents\) covering playback states, metadata, and UI changes like fullscreen and Picture-in-Picture. Additionally, it adds types for audio/video/text tracks, error handling (\VideoError\), and a \WebVideoPlayer\ interface for web-specific track selection, effectively standardizing the type contract for the player's functionality.

packages/react-native-video/src/core/types · high confidence

New iOS utility modules for subtitles, HLS, and PhotoKit support

This change introduces several new Swift utility files in the iOS core Utils directory to enhance video playback capabilities. ExternalSubtitlesUtils now handles the composition and injection of external VTT subtitles into video assets, including correct language code assignment. HLSManifestParser provides logic to download, parse, and resolve relative URLs in M3U8 manifests. PhotoLibraryAssetLoader enables playback of videos from the iOS Photos library using ph:// URIs via the Photos framework. Additionally, ListenerStore and Weak provide thread-safe collection and reference management utilities, while RunOnMainThread simplifies UI-thread execution.

packages/react-native-video/ios/core/Utils · high confidence

New iOS video capabilities: buffering, metadata, subtitles, and PiP

This update adds several new capabilities to the iOS video player. Users can now configure playback buffering (forward buffer duration, peak bit rates, and resolutions) and access the currently buffered duration. The player provides detailed asset metadata, including bitrate, dimensions, duration, file size, HDR status, live stream detection, and orientation. External subtitles are now supported for both local files and HLS streams. Additionally, the player supports fullscreen mode and Picture-in-Picture playback.

packages/react-native-video/ios/core/Extensions · high confidence

New release script for React Native Video

A new \scripts/release.sh\ script has been added to automate the release process for the React Native Video project. This script orchestrates the publishing of the main \react-native-video\ package and the new \drm-plugin\ package, as well as the creation of a GitHub release. It supports a \--skip\ flag to selectively bypass any of these steps (e.g., \--skip drm-plugin\), allowing for more flexible and granular release workflows.

scripts · high confidence

New video player example app with comprehensive controls and settings

The example application in \example/src\ has been rewritten to provide a comprehensive demo of the video player library. The new \App.tsx\ component integrates \VideoView\ with custom UI controls for playback, seeking, and volume, while exposing detailed event logging for states like buffering, progress, and fullscreen changes. It supports advanced features including Picture-in-Picture, HLS playback, and DRM configurations via a centralized \VideoSettings\ type, allowing users to toggle options such as background playback, notification controls, and audio mixing modes directly within the demo interface.

example/src · high confidence

Web platform support for video event handling

The library now supports running on the web by introducing platform-specific event handling implementations. A new \VideoPlayerEvents.web.ts\ file routes all events through a \WebEventEmitter\, while the existing native implementation remains in \VideoPlayerEvents.native.ts\. This is supported by a new webpack configuration and HTML entry point in the \example/web\ directory, enabling developers to run the video player example directly in a browser environment.

example/web, packages/react-native-video/src/core/events · high confidence

iOS example app scaffolded with modern React Native and privacy compliance

The iOS example project has been restructured to use the new React Native architecture, featuring a Swift-based AppDelegate and a bridging header for Objective-C interoperability. The app now includes a dedicated unit test target (VideoExampleTests) that verifies the welcome screen renders correctly, and it ships with a PrivacyInfo.xcprivacy manifest to declare API usage for file timestamps, user defaults, and system boot time, ensuring compliance with modern App Store requirements.

example/ios · high confidence

Removals

Removal of legacy RCTVideo Xcode project file

The \RCTVideo.xcodeproj/project.pbxproj\ file has been deleted, removing the legacy Xcode project configuration for the RCTVideo library. This change eliminates the static library build target (\libRCTVideo.a\) and its associated source files (\RCTVideo.m\, \RCTVideoManager.m\) from the project structure, indicating a shift away from this specific build configuration.

RCTVideo.xcodeproj · high confidence

Architecture

Project restructured as a Bun-managed monorepo with v7 architecture

The repository has been reorganized into a monorepo using Bun workspaces, introducing a new build and development workflow. The legacy Objective-C implementation (RCTVideo) and its associated JavaScript bridge files have been removed, marking the transition to the v7 architecture which relies on Nitro Modules. The project now includes dedicated packages for the core library, a DRM plugin, documentation, and example apps, alongside new infrastructure files such as a Code of Conduct, Lefthook pre-commit hooks, and a Bun lockfile.

(repo-wide) · high confidence

Behavioural changes

Android app package namespace updated to twg

The Android application's Java package has been moved from the previous \com.videoexample\ namespace to \com.twg.videoexample\. This change reflects the reorganization of the project structure into a monorepo and aligns the app with the new \twg\ organizational namespace, ensuring the application code is correctly located within the updated directory hierarchy.

app · high confidence

Android example app updated to support background audio and Picture-in-Picture

The Android example application has been restructured to support background audio playback and Picture-in-Picture (PiP) modes. This includes adding the necessary Android permissions (FOREGROUND\_SERVICE\_MEDIA\_PLAYBACK), configuring the main activity to support PiP, and registering a new VideoPlaybackService for media playback. The app also now uses the DefaultReactActivityDelegate to enable React Native's New Architecture (Fabric) and updates the Gradle wrapper to version 8.10.2.

example/android · high confidence

Android native layer regenerated with Nitrogen for React Native 0.76+ compatibility

The Android native bindings in the nitrogen generated folder have been regenerated to support React Native 0.76. The autolinking CMake script now conditionally links against the new \ReactAndroid::reactnative\ umbrella prefab for RN 0.76+, while retaining the legacy \react\_nativemodule\_core\ link for earlier versions. This update also refreshes the JNI bridge structs and callback wrappers (e.g., \JBandwidthData\, \JBufferConfig\, \JFunc\void\\*\) to align with the latest Nitro modules specification.

packages/react-native-video/nitrogen · high confidence

Android video library restructured with Nitrogen bindings and new error handling

The Android implementation has been reorganized under the \com.twg.video\ namespace and integrated with Nitrogen to generate Kotlin bindings for cross-platform data structures. This change introduces a structured error hierarchy (\VideoError\) with specific codes for library, player, source, and view issues, replacing previous generic error handling. It also adds generated data classes for video configuration, DRM parameters, buffer settings, and event data (such as volume changes including a new \muted\ flag), enabling more precise control and feedback for video playback features like background audio, external subtitles, and DRM.

android · high confidence

Example app scaffolded with React Native web support and monorepo structure

The example application has been restructured to support both native and web platforms, introducing an \index.web.js\ entry point for web bundling and a \metro.config.js\ that configures Metro to resolve modules from the monorepo root. The setup includes a new \tsconfig.json\ extending React Native's TypeScript configuration, an ESLint config inheriting from the project root, and standard React Native tooling files (Babel, app.json, .gitignore) to ensure the example runs correctly within the new monorepo environment.

example · high confidence

Introduces Swift-based HybridVideoPlayer implementation for iOS

The iOS video player backend has been replaced with a new Swift implementation (HybridVideoPlayer) that manages playback, buffering, and state via a dedicated event emitter. This change introduces support for native iOS features including Picture-in-Picture, background audio playback, and lock-screen/NowPlaying controls, while also adding new JavaScript events such as onPlaybackRateChange, onBandwidthUpdate, onTimedMetadata, and onTextTrackDataChanged to provide richer feedback to the React Native layer.

packages/react-native-video/ios/hybrids/VideoPlayer · high confidence

Introduction of new core React hooks for video player management

This change introduces three new internal hooks in the \packages/react-native-video/src/core/hooks\ directory to streamline video player lifecycle and event handling. \useVideoPlayer\ creates and manages the \VideoPlayer\ instance, handling source configuration and optional setup callbacks while ensuring the setup is called at the appropriate time. \useManagedInstance\ provides a generic mechanism to manage native instance lifecycles, intelligently recreating instances when dependencies change while preserving them during fast refreshes. \useEvent\ simplifies attaching and cleaning up event listeners on the player instance, automatically removing subscriptions when the component unmounts or dependencies change.

packages/react-native-video/src/core/hooks · high confidence

New hybrid source loading architecture for iOS

The iOS video player now uses a new \HybridVideoPlayerSource\ implementation that introduces a dedicated \SourceLoader\ to manage asset initialization. This change adds support for DRM via a plugin registry, allows loading from PhotoKit (\ph://\) sources, and ensures thread-safe, cancellable loading of video assets to prevent race conditions during rapid source changes.

packages/react-native-video/ios/hybrids/VideoPlayerSource · high confidence

New iOS core infrastructure for HLS subtitles, Now Playing controls, and error handling

The iOS core module has been refactored to introduce dedicated components for enhanced media capabilities and stability. A new \HLSSubtitleInjector\ enables side-loading external subtitles into HLS streams by modifying the manifest and registering a custom resource loader. \NowPlayingInfoCenterManager\ provides stable lock screen and Control Center integration, handling remote commands (play, pause, skip) and updating playback metadata. A comprehensive \VideoError\ system standardizes error reporting with specific codes for library, player, source, and view issues, while \VideoFileHelper\ adds utilities for validating file permissions and retrieving file sizes. \VideoManager\ centralizes player and view registration, audio session management, and background state preservation, and \VideoPlayerObserver\ improves the reliability of playback state and buffering event callbacks.

packages/react-native-video/ios/core · high confidence

New iOS video view implementation with Picture-in-Picture and fullscreen support

The iOS video view component has been replaced with a new implementation that adds Picture-in-Picture (PiP) and fullscreen capabilities. Users can now enable PiP playback via the \allowsPictureInPicturePlayback\ and \autoEnterPictureInPicture\ props, and control playback visibility with the \controls\ prop. The view also supports the \keepScreenAwake\ prop to prevent device sleep during playback, and exposes an \onNitroIdChange\ event for view identification. The implementation includes fixes for fullscreen transition cancellations and restores inline UI after PiP stops to prevent black screens.

packages/react-native-video/ios/view · high confidence

New native video player factory and source handling utilities

This change introduces new utility modules in the core utils directory to support the new Nitro-based native video player architecture. Specifically, it adds \playerFactory.ts\ (and its web no-op counterpart) which provides \setAudioSessionManagementDisabled\ to allow other libraries to manage iOS audio sessions, and \createPlayer\ to instantiate native video players. It also adds \sourceFactory.ts\ and \sourceUtils.ts\ to handle the creation of \VideoPlayerSource\ instances from various input types (URIs, configs, assets), including logic for parsing external subtitles, resolving asset sources, and applying platform-specific DRM defaults (Widevine for Android, FairPlay for iOS).

packages/react-native-video/src/core/utils · high confidence

React Native Video package restructured for monorepo and web support

The react-native-video package has been reorganized within a monorepo structure, introducing configuration files that enable web platform support (via tsconfig.web.json and exclusion of web sources in the main build) and an Expo plugin (app.plugin.js). The package now uses Nitro for native code generation and autolinking, with specific factory mappings for iOS and Android, and updates its React Native configuration to reflect the new namespace (com.twg.video.react).

packages/react-native-video · medium confidence

Standardized development environment configuration

The repository now includes a centralized \config\ directory that enforces consistent coding styles and build settings across the project. This change introduces an \.editorconfig\ for uniform indentation and line endings, a shared ESLint configuration extending React Native and Prettier rules, a strict TypeScript configuration (\tsconfig.json\) for the monorepo, and minimal TypeScript declarations for Bun's test runner to ensure type safety during testing.

config · high confidence

Test coverage

Added Fabric native component spec for VideoView; Added Nitro module type specifications for the video player architecture; Added Swift protocol specifications for video player components; Added unit tests for video error parsing and managed instance hook.

Dependencies

Add Nitro-based DRM plugin and update example/test apps to React Native 0.77

This change introduces the \@react-native-video/drm\ package, a new DRM plugin built with Nitrogen and \react-native-nitro-modules\ (v0.35.0) for Android and iOS, alongside a \fix-prefab.gradle\ script to resolve native library packaging issues. The example and test applications are upgraded to React Native 0.77, enabling the New Architecture (Fabric/TurboModules) by default, and the documentation site is added using Docusaurus 3 with React 19.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 31 → 53 (+22.3)
  • Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 69 → 72 (+2.6)
  • Architecture 97 → 86 (-10.6)
  • Maturity 58 → 70 (+12.5)
  • Readiness 14 → 47 (+33.1)
  • Security 22 → 44 (+22.0)

Resolved (68)

  • Change coupling: VideoPlayer.ts ↔ sourceFactory.ts (packages/react-native-video/src/core/VideoPlayer.ts)
  • Critical CVE: [GHSA redacted] (bun.lock)
  • Critical CVE: [GHSA redacted] (bun.lock)
  • Critical CVE: [GHSA redacted] (bun.lock)
  • Dimension evaluation failed
  • High CVE: [GHSA redacted] (bun.lock)
  • High CVE: [GHSA redacted] (bun.lock)
  • High CVE: [GHSA redacted] (bun.lock)
  • High CVE: [GHSA redacted] (bun.lock)
  • High CVE: [GHSA redacted] (bun.lock)
  • High CVE: [GHSA redacted] (bun.lock)
  • High CVE: [GHSA redacted] (bun.lock)
  • High CVE: [GHSA redacted] (bun.lock)
  • High CVE: [GHSA redacted] (bun.lock)
  • High CVE: [GHSA redacted] (bun.lock)
  • High CVE: [GHSA redacted] (bun.lock)
  • High CVE: [GHSA redacted] (bun.lock)
  • High CVE: [GHSA redacted] (bun.lock)
  • High CVE: [GHSA redacted] (bun.lock)
  • High CVE: [GHSA redacted] (bun.lock)
  • …and 48 more

New (138)

  • AVAsset.estimatedMemoryUsage (cognitive 23) (packages/react-native-video/ios/core/Extensions/AVAsset+estimatedMemoryUsage.swift)
  • AVAsset.estimatedMemoryUsage (cyclomatic 16) (packages/react-native-video/ios/core/Extensions/AVAsset+estimatedMemoryUsage.swift)
  • AVAsset.getAssetInformation (cognitive 20) (packages/react-native-video/ios/core/Extensions/AVAsset+estimatedMemoryUsage.swift)
  • ClassTooLong: HybridVideoPlayer (packages/react-native-video/ios/hybrids/VideoPlayer/HybridVideoPlayer.swift)
  • Critical CVE: [GHSA redacted] (bun.lock)
  • Critical CVE: [GHSA redacted] (bun.lock)
  • Critical CVE: [GHSA redacted] (bun.lock)
  • Duplicated block (10 lines × 2) (packages/react-native-video/ios/core/HLSSubtitleInjector.swift)
  • Duplicated block (13 lines × 2) (packages/react-native-video/ios/hybrids/VideoPlayerEmitter/HybridVideoPlayerEventEmitter.swift)
  • Duplicated block (24 lines × 2) (packages/react-native-video/ios/hybrids/VideoPlayer/HybridVideoPlayer.swift)
  • Duplicated block (8 lines × 2) (packages/react-native-video/ios/view/VideoComponentViewObserver.swift)
  • FunctionTooLong: V7ProPlugins.V7ProPlugins (docs/src/components/Intro/V7ProPlugins/V7ProPlugins.tsx)
  • Further sole-owners (lower concentration)
  • HLSSubtitleInjector.handleMainManifest (cognitive 23) (packages/react-native-video/ios/core/HLSSubtitleInjector.swift)
  • HLSSubtitleInjector.handleSubtitleM3U8 (cognitive 17) (packages/react-native-video/ios/core/HLSSubtitleInjector.swift)
  • HLSSubtitleInjector.modifyM3U8Content (cognitive 37) (packages/react-native-video/ios/core/HLSSubtitleInjector.swift)
  • HLSSubtitleInjector.modifyM3U8Content (cyclomatic 22) (packages/react-native-video/ios/core/HLSSubtitleInjector.swift)
  • High CVE: [CVE redacted] (bun.lock)
  • High CVE: [GHSA redacted] (bun.lock)
  • High CVE: [GHSA redacted] (bun.lock)
  • …and 118 more

Changes since last survey

  • 13 commits — 4 feature/other, 9 fixes

By area

  • packages/react-native-video — 6 commits
  • (root) — 1 commit
  • .github/workflows — 1 commit
  • docs/versioned_docs — 1 commit
  • e2e/fixtures — 1 commit
  • e2e/flows — 1 commit
  • example/ios — 1 commit
  • scripts/e2e — 1 commit

Notable commits

  • fix: fix(android): make PiP helper fragment restorable (#5039)
  • fix: fix(android): pause playback when rate is zero (#5037)
  • fix: fix(android): stop SmallVideoPlayerOptimizer from driving an endless layout loop (#5036)
  • fix: fix(e2e): harden nightly legs against transport-level failures (#5129)
  • fix: fix(e2e): make nightly results trustworthy and unblock iOS on RN 0.82 (#5113)
  • fix: fix(ios): build fmt pod as C++17 in example app to fix Xcode 26 build (#5080)
  • fix: fix(ios): support PhotoKit ph:// video sources (#5040)
  • fix: fix: guard shared player and view registries against concurrent access (#5034)
  • fix: fix: rebind VideoView manager when native view is recreated (#5038)
  • change: chore(deps): bump the github-actions group across 1 directory with 5 updates (#5103)
  • change: chore: release 7.0.0-beta.11
  • change: docs: add missing hideLiveBadge prop (#5125)
  • change: feat(e2e): Maestro E2E harness, RN version CI matrix and iOS build on RN 0.87 (#5096)

Architecture

  • Containers 0 added · 0 removed · contexts 2 added · 0 removed · edges 0 added · 0 removed

Added bounded contexts (2)

  • android
  • app

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

TheWidlarzGroup/react-native-video was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 25 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 6dd359f8a4ef034e8e9cf2389d9242aa5bb4d992 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-dd72cc24c749.