React Native compatibility

This package builds React Native compatibility from React Native Web, then adds a TV compatibility layer inspired by React Native tvOS for browser-based TV platforms.

Best used with React Native >= 0.68.

Visit the React Native Directory to find React Native packages with known web support.

How to read this page

  • The Components and APIs tables below are the React Native compatibility baseline inherited from React Native Web.
  • The TV additions section describes the additional React Native tvOS-style compatibility implemented on top, adapted for web TV runtimes.
  • API shape compatibility with React Native tvOS does not always mean full behavior parity on browser-based TV platforms.

TV additions

This package extends the React Native Web baseline with TV-oriented modules and focus behavior inspired by React Native tvOS, adapted for browser-based TV platforms.

AreaStatusNotes
TVFocusGuideViewImplemented for web TV focus containers, including destinations, autofocus, and trap-focus behavior in the spatial navigation layer.
TVEventHandlerImplemented listener API for remote/hardware key events when key events are delivered by the target environment.
useTVEventHandlerImplemented hook wrapper around TVEventHandler.
TVTextScrollViewImplemented for remote-driven paging in content-heavy scroll layouts.
TVEventControl(✓)API shape is present for compatibility, but methods are currently stubs on web and log warnings.
TV focus props on core components(✓)Support is implemented for key props used by this package (for example focusable, hasTVPreferredFocus, isTVSelectable, tvFocusable), but parity is not complete across all components and scenarios.
nextFocus* style parityNot implemented yet in runtime behavior. Definitions currently exist at the type/API-shape level only.

For detailed TV behavior and known limitations, see TV Navigation, TVFocusGuideView, TVEventHandler, and TVEventControl.

TV parity comparison

The table below compares:

Areareact-native-web-tvreact-native-tvos
Core TV exports (TVFocusGuideView, TVEventHandler, TVEventControl, TVTextScrollView, useTVEventHandler)Implemented for TV integration.Present.
Platform.isTV behaviorSet to true for TV integration behavior. No intention of adding environment-based detection in future work.True on TV runtimes.
View TV focus methods/props (hasTVPreferredFocus, requestTVFocus, container hints)Implemented for web TV focus integration.Implemented with native focus engines.
Pressable / Touchable* TV focusability (focusable, isTVSelectable)Implemented for tab-index and LRUD focus integration.Implemented with native TV focus and event semantics.
TextInput TV focus behavior (hasTVPreferredFocus, isTVSelectable, focusability)Implemented for web TV focus integration.Implemented with platform-native behavior and constraints.
ScrollView / VirtualizedList TV focus-flow supportImplemented, including TV focus-guide wrapping and trap-focus integration for list flows.Implemented with native TV focus handling.
Directional nextFocus* props (nextFocusUp/Down/Left/Right/Forward)Not implemented yet in runtime (types only).Implemented and used in native TV component behavior.
TVFocusGuideView destinations/autoFocus/trapFocusImplemented via LRUD container attributes and spatial manager integration.Implemented via native UIFocusGuide/Android TV behavior.
TVEventHandler / useTVEventHandlerImplemented when remote key events are delivered to runtime.Implemented.
TVEventControlAPI shape is present; methods are currently stubs on web and log warnings.Implemented with native toggles.
BackHandler TV back integrationImplemented conditionally via configured web TV key map (window.appConfig.keyMap.Back).Implemented against native remote back/menu behavior.

Note: tests are in place for the current implementation. If you find a gap, please open an issue. Help improving the existing implementation is welcome.

Components

NameStatusNotes
ActivityIndicator
Button
CheckBox
FlatList
ImageMissing multiple sources (#515) and HTTP headers (#1019).
ImageBackground
KeyboardAvoidingView(✓)Mock. No equivalent web APIs.
Modal
Picker
Pressable
RefreshControlNot started (#1027).
SafeAreaView
ScrollViewMissing momentum scroll events (#1021).
SectionList
StatusBar(✓)Mock. No equivalent web APIs.
Switch
TextNo onLongPress (#1011).
TextInputMissing rich text features (#1023), and auto-expanding behaviour (#795).
TouchableIncludes additional support for mouse and keyboard interactions.
TouchableHighlight
TouchableNativeFeedbackNot started (#1024).
TouchableOpacity
TouchableWithoutFeedback
View
VirtualizedList
YellowBox(✓)Mock. No YellowBox functionality.

APIs

NameStatusNotes
AccessibilityInfo(✓)Mock. No equivalent web APIs.
AlertNot started (#1026).
AnimatedMissing useNativeDriver support.
Appearance
AppRegistryIncludes additional support for server rendering with getApplication.
AppState
BackHandler(✓)Browser-native parity is limited; in this package it can also handle TV-style back events when remote key events are available.
Clipboard
DeviceInfo(✓)Limited information.
Dimensions
Easing
Geolocation
I18nManager(✓)Mock. See localization for preferred approach.
InteractionManager(✓)
Keyboard(✓)Mock.
LayoutAnimation(✓)Missing translation to web animations.
Linking
NativeEventEmitter
NativeMethodsMixin
NativeModules(✓)Mocked. Missing ability to load native modules.
PanResponder
PixelRatio
PlatformIn this package, Platform.isTV is currently forced true for TV behavior compatibility.
SettingsNo equivalent web APIs.
ShareOnly available over HTTPS. Read about the Web Share API.
StyleSheet
UIManager
Vibration
useColorScheme
useWindowDimensions

Compatibility guidance for TV apps

  • Treat this page as baseline + package extension guidance, not a full parity guarantee with native TV platforms.
  • Validate critical focus and remote-control behavior on each target TV runtime.
  • Expect additional integration work when app flows depend on third-party libraries or native-only modules.
Updated
React Native Web for TVPortions Copyright © Nicolas Gallagher, Meta Platforms, Inc., Facebook, Inc. and affiliates, and other contributors as noted in file headers and THIRD_PARTY_NOTICES.md. Modifications and TV extensions Copyright © Harpreet Singh and contributors.