If you upgrade a TV app from react-native-tvos 0.87.1-1 to 0.88.1-0 (published 3 November 2026), retest one thing first: calling focus() on a TextInput on tvOS. In 0.88.1-0 it now goes through the base view’s focus path, which sets the root view’s preferred focused view to the text field and asks the focus engine to update. In 0.87.1-1 it only made the field first responder. Neither release’s notes mention it. On Android TV, the D-pad and media key mapping is unchanged: the only edit to ReactAndroidHWInputDeviceHelper.kt is formatting.
We diffed the two npm tarballs on 13 November 2026 in a Linux container. Nothing here was run on an Apple TV or an Android TV box yet.
Why we did this: BMDB on Android TV and our React Native TV apps move through exactly this hop, and on a TV a focus regression is the bug users notice first.
How we checked
npm pack react-native-tvos@0.87.1-1 react-native-tvos@0.88.1-0
# unpack both, then
diff -ruN 0.87.1-1/package 0.88.1-0/package -x '*.map' -x types_generated > full.diff
The diff is 95,400 lines. Files that differ: 257 under ReactAndroid/, 102 under React/, 591 under ReactCommon/. Most of that is the React Native 0.88 merge itself. To find the TV part we searched every changed line for focus, isTVSelectable, KeyEvent, DPAD, pressesBegan, TARGET_OS_TV and related terms, which left 54 files. After dropping the TypeScript declaration files, the native files that matter are the five below.
We also read the GitHub release notes. 0.88.0-0 (17 October) has no notes beyond a compare link. 0.88.1-0 (3 November) lists layout rounding fixes, a Hermes bump and “fix(apple): Guard iOS 27 status bar appearance code for tvOS”. None of them is about focus or remote input.
What changed for focus and remote input
| Change | Platform | File | In the release notes | What to retest |
|---|---|---|---|---|
TextInput.focus() calls [super focus], and a new viewToFocus returns the backing text field |
tvOS | RCTTextInputComponentView.mm |
no | ref.focus() on a TextInput, and the focus ring after it |
Base focus uses viewToFocus for becomeFirstResponder and for reactPreferredFocusedView |
tvOS | RCTViewComponentView.mm |
no | hasTVPreferredFocus and imperative focus on plain views |
viewToFocus, focus and blur declared in the header under TARGET_OS_TV |
tvOS | RCTViewComponentView.h |
no | native subclasses in your own code |
canBecomeFocused gained an iOS branch inside a TV-only block |
iOS (dead code) | RCTViewComponentView.mm |
no | nothing on TV; see below |
KEY_EVENTS_ACTIONS map reformatted, same 19 key codes |
Android TV | ReactAndroidHWInputDeviceHelper.kt |
no | nothing |
Keyboard requested again after focus via long-press selection, only when isInTouchMode |
Android | ReactEditText.kt |
no | nothing on a D-pad device (TV is not in touch mode) |
TextInput focus on tvOS
This is the change with a visible effect.

The 0.88.1-0 TextInput hands its backing field to the base class, and the base class does the focus-engine work. We only trimmed the code.
The base class focus in 0.88.1-0, as shipped:
- (UIView *)viewToFocus
{
return self;
}
- (void)focus
{
UIView *viewToFocus = [self viewToFocus];
[viewToFocus becomeFirstResponder];
#if TARGET_OS_TV
RCTSurfaceHostingProxyRootView *rootView = [self containingRootView];
// ...
rootView.reactPreferredFocusedView = viewToFocus;
[rootView setNeedsFocusUpdate];
[rootView updateFocusIfNeeded];
#endif
}
In 0.87.1-1 the TextInput overrode focus with a bare [_backedTextInputView becomeFirstResponder] and never reached the block that updates the root view. Reading the code, a search screen that calls inputRef.current?.focus() on mount should now get the focus ring on the field as well as the keyboard. That is our reading of the source; we have not seen it on a device.
If you wrote a native tvOS component that subclasses RCTViewComponentView and redirects focus to an inner view, viewToFocus is now the hook for it instead of overriding focus.
A canBecomeFocused branch that is never compiled
React Native 0.88 added an iOS Full Keyboard Access fix: canBecomeFocused returns YES for views that are interactive accessibility elements. In upstream react-native 0.88.1 the call is RCTViewIsInteractiveAccessibilityElement(self, static_cast<const ViewProps &>(*_props)). In react-native-tvos 0.88.1-0 the merged version landed inside a block that starts with #if TARGET_OS_TV at line 260 and ends at line 738.

The #if !TARGET_OS_TV branch sits inside a TV-only block, so no target ever compiles it.
Two things follow from reading it, neither tested on a build:
- On tvOS nothing changes. The
#elsebranch is the 0.87.1-1 logic: focus guides are not focusable, everything else followsisTVSelectable. - On iPhone and iPad builds made from react-native-tvos,
canBecomeFocusedis not overridden at all, so the upstream keyboard-focus fix is not active there. The static helper above it, which takes two parameters while this call passes one, is unused on iOS. Only apps that build their iOS target from react-native-tvos are affected.
Android TV: no input changes
The whole diff of ReactAndroidHWInputDeviceHelper.kt is the mapOf(...) block re-indented, with the same 19 entries from KEYCODE_DPAD_CENTER to "select" to KEYCODE_CHANNEL_DOWN to "channelDown". ReactViewManager.kt gained deprecated aliases for the experimental background props and lost one ImportantForInteractionHelper call, with nothing about focus. The ReactEditText.kt keyboard change is guarded by isInTouchMode, which a D-pad device is not in.
Other things in this hop
- The hand-written
types/folder is gone andtypes_DEPRECATED/is in its place.package.jsonalready pointedtypesattypes_generated/index.d.tsin 0.87.1-1, so imports fromreact-nativeare unaffected. Deep imports intoreact-native/types/...will fail. - In
types_generated, theTVFocusGuideViewprops type is now written as a list of omitted keys. The props are the same:enabled,destinations,autoFocus, the fourtrapFocus*props,focusable,onFocusEnterandonFocusLeave. - The 0.87.1-0 changes are still the bigger TV items in this range:
nextFocus*destinations set before attach, focus sound when scroll views move focus, andonFocusEnter/onFocusLeaveonTVFocusGuideView. If you are coming from 0.86, retest those too.
Retest list for the upgrade
- tvOS: every screen that calls
focus()on aTextInput. Check where the focus ring is after the call and that the keyboard still appears. - tvOS: screens with
hasTVPreferredFocusandTVFocusGuideViewwithdestinationsorautoFocus, in case you depended on the old TextInput behaviour. - Android TV: a quick D-pad and media-key pass. The source says nothing changed, so this is a smoke test.
- If you ship iOS from the same react-native-tvos package: Full Keyboard Access on iPad with a hardware keyboard.
Not run on an Apple TV, an Android TV box or a simulator yet. Everything above comes from the npm tarballs and the release pages.
Sources
- npm: react-native-tvos versions (0.87.1-1 on 18 September 2026, 0.88.1-0 on 3 November 2026)
- GitHub: react-native-tvos v0.88.1-0 release and v0.88.0-0
- React Native 0.88 release post



