Mapbox Version
11.18.2 (default)
React Native Version
0.81.4
Platform
Android
@rnmapbox/maps version
10.3.0
Standalone component to reproduce
import React, { useState } from 'react';
import { View, Text, Button, Modal } from 'react-native';
import { MapView, Camera } from '@rnmapbox/maps';
const styles = {
container: { flex: 1, justifyContent: 'center', padding: 24 },
description: { marginBottom: 16, color: '#555' },
modal: { flex: 1, padding: 24 },
mapView: { flex: 1 },
};
export default function BugReportExample() {
const [sheetOpen, setSheetOpen] = useState(false);
return (
<View style={styles.container}>
<Text style={styles.description}>
On affected devices (confirmed: Samsung Galaxy S25, Android 16) opening
this sheet freezes the entire app. The map is mounted inside a Modal —
it is never visible to the user before the freeze occurs.
</Text>
<Button title="Open sheet" onPress={() => setSheetOpen(true)} />
<Modal visible={sheetOpen} onRequestClose={() => setSheetOpen(false)}>
<View style={styles.modal}>
<Button title="Close" onPress={() => setSheetOpen(false)} />
<MapView style={styles.mapView}>
<Camera />
</MapView>
</View>
</Modal>
</View>
);
}
Observed behavior and steps to reproduce
- Run the app on Android 16 (confirmed: Samsung Galaxy S25)
- The app is completely unresponsive immediately on launch — no navigation or interaction is possible
The freeze happens before the user can do anything. The MapView is mounted as part of the initial render (inside a bottom sheet that is closed by default), so the ViewManager failure occurs at startup before the map is ever visible.
Expected behavior
The app launches normally and remains responsive. The map renders without errors when the sheet is opened.
Notes / preliminary analysis
React Native's new architecture requires ViewManagers that use codegen to override getDelegate(). The affected ViewManagers (RNMBXCamera, RNMBXShapeSource, RNMBXCircleLayer) in @rnmapbox/maps@10.3.0 do not implement this method, causing Fabric to fail silently during view creation.
The errors are thrown as SoftException so they don't produce a hard crash, but the result is a completely unresponsive UI. Notably, RNMBXShapeSource and RNMBXCircleLayer appear in the errors despite not being used in our code — confirming that all ViewManagers are registered at startup regardless of usage, and all fail the getDelegate check.
The issue appears device/OS-version dependent — confirmed broken on Android 16, works for some other Android users — but we haven't yet pinned down exactly which configurations are affected.
Additional links and references
The reproduction component uses a Modal since it's a self-contained example with no extra libraries — but in our actual app the map lives in a bottom sheet (react-native-bottom-sheet)
Mapbox Version
11.18.2 (default)
React Native Version
0.81.4
Platform
Android
@rnmapbox/mapsversion10.3.0
Standalone component to reproduce
Observed behavior and steps to reproduce
The freeze happens before the user can do anything. The MapView is mounted as part of the initial render (inside a bottom sheet that is closed by default), so the ViewManager failure occurs at startup before the map is ever visible.
Expected behavior
The app launches normally and remains responsive. The map renders without errors when the sheet is opened.
Notes / preliminary analysis
React Native's new architecture requires ViewManagers that use codegen to override getDelegate(). The affected ViewManagers (RNMBXCamera, RNMBXShapeSource, RNMBXCircleLayer) in @rnmapbox/maps@10.3.0 do not implement this method, causing Fabric to fail silently during view creation.
The errors are thrown as SoftException so they don't produce a hard crash, but the result is a completely unresponsive UI. Notably, RNMBXShapeSource and RNMBXCircleLayer appear in the errors despite not being used in our code — confirming that all ViewManagers are registered at startup regardless of usage, and all fail the getDelegate check.
The issue appears device/OS-version dependent — confirmed broken on Android 16, works for some other Android users — but we haven't yet pinned down exactly which configurations are affected.
Additional links and references
The reproduction component uses a Modal since it's a self-contained example with no extra libraries — but in our actual app the map lives in a bottom sheet (react-native-bottom-sheet)