Bug Description
1. Summary
On Vega SDK 0.24 / React Native 0.83 / Kepler 4, remote Select (and Enter) never invokes onPress on the focused pressable. We originally used TouchableOpacity but I also tried Pressable and View with no luck. D-pad focus works. The same Select event does arrive on useTVEventHandler as eventType: 'select' | 'enter'.
This blocks our RN 0.72 → 0.83 migration: users cannot activate CTAs (sign-in, roadblock, tiles) unless we bypass native onPress.
App Name: Paramount+
App Link on Amazon Appstore (found through Developer Console → Actions column in App List → View on Amazon.com): com.cbs.ott (internal 0.83 QA build, not the store binary)
Bug Severity
Select one that applies
- Impacts operation of app
- Blocks current development
- Improvement suggestion
- Issue with documentation (If selected, please share the doc link and describe the issue)
- Other
2. Steps to Reproduce
- Build a Kepler 4 / RN 0.83 app with SDK 0.24 and install it on Vega Virtual Device OS 1.2 (aarch64).
- Render a focused pressable that logs in
onPress(KeplerPressable,View+isPressable, orTouchableOpacityfromreact-native). - Move focus onto that control with the D-pad (focus ring /
onFocusfires). - Press Select (VVD:
inputd-cli button_press KEY_ENTER). - Optionally also subscribe with
useTVEventHandlerand logevent.eventType/event.eventKeyAction.
Component / APIs: onPress on Pressable / TouchableOpacity / pressable View; useTVEventHandler from @amazon-devices/react-native-kepler.
3. Observed Behavior
- Focus works (
onFocus/onBlur, D-pad navigation). - Select does not call
onPresson any of:- Kepler
Pressable ViewwithisPressableTouchableOpacityremapped fromreact-native(activeOpacity={1}, including a fully visible control)
- Kepler
useTVEventHandlerdoes receive the key:eventTypeis'select'or'enter',eventKeyAction === 0(key down).- Not a crash.
console.log/console.warnare often dropped on this OS;console.errorshows as[KeplerScript-JavaScript].
4. Expected Behavior
Select on the focused pressable should fire onPress, as on Kepler 2 / RN 0.72.
4.a Possible Root Cause & Temporary Workaround
Possible cause: RN 0.83 / Fabric / bridgeless event-name normalization (0.24 notes mention media dual-dispatch). Select may be delivered to the TV event path but not mapped onto the focused component’s onPress.
Workaround (VirtualNav only):
import { HWEvent, useTVEventHandler } from '@amazon-devices/react-native-kepler';
const handleTVEvent = useCallback((event: HWEvent) => {
if (!navHasFocus.current) return;
if (
(event.eventType !== 'select' && event.eventType !== 'enter') ||
event.eventKeyAction !== 0
) {
return;
}
handleCenterOnPressRef.current();
}, []);
useTVEventHandler(handleTVEvent);
Callback identity must be stable — Kepler re-subscribes if handleEvent changes. We still pass onPress={handleCenterOnPress} on the center TouchableOpacity; it never fires today. If native onPress is restored, this will double-fire.
This does not fix other pressables in our app (e.g. Show/Hide password).
5. Logs or crash report
Not a crash. No ACR. com.cbs.ott.main stayed in the foreground.
- excerpt-select-presses.txt (116.2 KB) — start here (KEY_ENTER at 19:28:46 / 19:28:48 / 19:28:50)
- README.txt (1.9 KB) — capture commands and timestamps
Native layer consumes the key (Consumed key:Return). No onPress / Pressable callback follows. JS console.log/warn are often dropped on this OS; we would still expect a CTA navigation side-effect, which did not happen.
6. Environment
SDK Version: 0.24.9914 (vega --version; Vega CLI 1.3.2)
React Native Version: RN 0.83 (@amazon-devices/react-native-kepler 4.0.0)
App State: Foreground
OS Information (cat /etc/os-release on VVD):
NAME="OS"
OE_VERSION="4.0.0"
OS_MAJOR_VERSION="1"
OS_MINOR_VERSION="2"
RELEASE_ID="21"
OS_VERSION="1.2"
BRANCH_CODE="TV Ship"
BUILD_DESC="OS 1.2 (TV Ship/101520710)"
BUILD_FINGERPRINT="1.0.152071.0(9a1d8dfa7da5d600)/101520710N:user/dev-keys"
BUILD_VARIANT="user"
BUILD_TAGS="dev-keys"
BUILD_DATE="Wed Jul 15 22:17:13 UTC 2026"
BUILD_TIMESTAMP="1784153833"
VERSION_NUMBER="2111172071030"
Device: Vega Virtual Device, tv, aarch64. I also previously reproduced the same issue on a physical device with the following details:
BRANCH_CODE=RN83 3P Alpha Release
BUILD_DESC=OS 1.1 (RN83 3P Alpha Release/301)
BUILD_FINGERPRINT=4.0.358278.0(3072cab629675a74)/301N:user/release-keys
VERSION_NUMBER=2101010030120
7. Example Code Snippet / Screenshots / Screengrabs
Fails (focus works, Select does nothing):
import { TouchableOpacity as RNPressable, Text } from 'react-native';
<RNPressable
onFocus={handleCenterFocus}
onBlur={handleCenterBlur}
onPress={handleCenterOnPress} // never called on Select
activeOpacity={1}
hasTVPreferredFocus={false}
>
<Text>Press</Text>
</RNPressable>
Same failure with Kepler Pressable and View + isPressable + onPress, including a fully visible CTA.
Playback Issues
N/A
Additional Context
- Repro is a Kepler 4 process on public OS 1.2. Mixing Kepler 2 native modules in that process SIGSEGVs (separate issue; we stub those).
- Fabric / bridgeless are on by default in 0.83.
- Docs: Migrate Apps to React Native 0.83 | Design and Develop Vega Apps