Platform support
react-native-gpui targets macOS, Windows and Linux. This page lists what each platform provides, and the known limitations of the current release.
Supported platforms and architectures
| Platform | Architectures | Renderer backend |
|---|---|---|
| macOS | arm64, x64 | Metal |
| Windows | x64, arm64 | DirectX |
| Linux | x64, arm64 | Vulkan, on Wayland and X11 |
Prebuilt copies of React Native's C++ runtime exist for every platform and architecture above, so a first build does not compile the runtime. See Prebuilt runtime. Pull-request CI covers macOS arm64, Windows x64 and Linux x64. The other architectures are built by the release workflows only.
Platform.OS is macos, windows or linux.
Desktop features
Check these at run time with capabilities() instead of assuming them.
| Feature | macOS | Windows | Linux |
|---|---|---|---|
| Application menu | System menu bar | In-window menu bar | In-window menu bar |
| Context menus | Native or custom | Native or custom | Native or custom |
| Keyboard trigger for context menu | No | Menu key, Shift + F10 | Menu key, Shift + F10 |
| Tray | Menu bar, anchored popover | Notification area, popover at the click | Menu only on GNOME; popover elsewhere |
| Title bar | default, transparent, hidden | default, transparent, hidden | Client-side decorations when the compositor allows them |
| Traffic lights position | Yes | No | No |
| Always on top, window position | Check capabilities() | Check capabilities() | Check capabilities(); depends on the compositor |
| Accessibility | VoiceOver | Not yet validated | Not yet validated |
| Packages | .app, .dmg | NSIS installer | .deb, .AppImage |
Known limitations
- IME. Text composition with an input method has not been tested.
- Screen readers. VoiceOver on macOS is the supported path. Accessibility on Windows and Linux has not been validated.
- Offscreen effects. A view with
opacitybelow 1, ablurordropShadowfilter, amixBlendModeorisolationis painted into a picture of its own. The picture is as large as the part of the view that is inside the window, so a blur does not take in content outside it. A scroll view that holds such a view does not cache its content between scroll frames, so it repaints on each one. Native surfaces are not part of the picture. SeefilterandmixBlendMode. - 3D transforms.
perspective,rotateXandrotateYare drawn flat. See Transforms. - Share. On Windows
Shareopens the system share window and resolves when Windows asks for the content. Linux has no system share UI, so a dialog offers Copy and Email. - Scroll momentum. On macOS the momentum of a trackpad flick comes from the system and
decelerationRatehas no effect. On Windows and Linux the scroll view carries a touchpad flick on itself, atdecelerationRate; a mouse wheel has none. - Pull to refresh.
RefreshControlshows progress but has no pull gesture. - Keyboard events. On Windows
Keyboardsends show and hide events for the touch keyboard, which have not been tested on touch hardware. macOS and Linux send none, soKeyboardAvoidingViewlays out as a plainViewthere. - Not implemented. The
fontVariationSettingstext style, which React Native 0.87 does not have. - Accessibility settings. On Windows and Linux
AccessibilityInforeads the screen reader, reduced motion and high contrast settings, but these have not been checked against a real screen reader. - Border rendering. The fidelity of some border styles against React Native on mobile has not been fully compared.
Intl. It needs the operating system's ICU: Windows 10 1903 or later on Windows,libicu64 or later on Linux. Without one it falls back to plain formatting. See JavaScript environment.- WebGPU and WebViews. There is no WebGPU surface and no web view component yet.
- Over-the-air updates. They are not supported.
- Signing. Windows installers are unsigned unless you provide a certificate. See Publishing.
- Engine binaries. The Hermes binaries that the engine package downloads are not checksum-verified.
- Node addons. Only pure Node-API addons that do not need Node built-in modules load. See Node addons.
Compatibility
Every React Native 0.87 component and API is listed. "Supported" means it behaves as the React Native documentation describes; a link goes to this site when desktop adds or changes something, and to the React Native documentation otherwise.
Components
| Name | Status | Notes |
|---|---|---|
| ActivityIndicator | Supported | Drawn in the style of each operating system. |
| Button | Supported | |
| FlatList | Supported | |
| Image | Partial | A few mobile-only props have no effect. |
| ImageBackground | Supported | |
| KeyboardAvoidingView | Partial | Responds to the Windows touch keyboard only. |
| Modal | Supported | Escape and the window close button call onRequestClose. |
| Pressable | Supported | Hover and hitSlop follow the pointer. |
| RefreshControl | Partial | Shows progress; no pull gesture. |
| SafeAreaView | Supported | Insets for a title bar the app draws. |
| ScrollView | Supported | Momentum on Windows and Linux is simulated at decelerationRate. |
| SectionList | Supported | |
| StatusBar | Partial | Desktop windows have no status bar: it renders nothing. |
| Switch | Supported | Drawn in the style of each operating system. |
| Text | Supported | fontVariationSettings is not in React Native 0.87. |
| TextInput | Partial | IME composition is untested. |
| TouchableHighlight | Supported | |
| TouchableOpacity | Supported | |
| TouchableWithoutFeedback | Supported | |
| View | Supported | 3D transforms are drawn flat. |
| VirtualizedList | Supported | |
| VirtualView | Supported | Modes follow the position in the scroll view. |
Props
| Name | Status | Notes |
|---|---|---|
experimental_accessibilityOrder | Not supported | Accepted but not applied; focus order follows the view tree. |
onAccessibilityMagicTap | Not supported | Accepted but never dispatched. |
APIs and hooks
| Name | Status | Notes |
|---|---|---|
| AccessibilityInfo | Partial | Screen reader settings on Windows and Linux are unvalidated. |
| Alert | Supported | A sheet on macOS, a dialog window on Windows and Linux. |
| Animated | Supported | |
| Appearance | Supported | |
| AppRegistry | Supported | |
| AppState | Supported | |
| BackHandler | Supported | Mouse back button and Escape in a modal. |
| DevSettings | Supported | addMenuItem lists items in the Dev Menu. |
| Dimensions | Supported | |
| Easing | Supported | |
| I18nManager | Supported | |
| Keyboard | Partial | Show and hide events on the Windows touch keyboard only. |
| LayoutAnimation | Partial | Not covered by the end-to-end suite. |
| Linking | Supported | Custom URL schemes through the installer. |
| PanResponder | Supported | |
| PixelRatio | Supported | |
| Platform | Supported | Platform.OS is macos, windows or linux. |
| PlatformColor | Supported | |
| ReactNativeVersion | Supported | |
| RootTag | Supported | |
| Settings | Supported | |
| Share | Partial | The system share UI on macOS and Windows; a Copy and Email dialog on Linux. |
| StyleSheet | Supported | |
| Transforms | Partial | perspective, rotateX and rotateY are drawn flat. |
| Vibration | Partial | Taps a Force Touch trackpad on macOS only. |
| useColorScheme | Supported | |
| useWindowDimensions | Supported |
Not part of desktop
React Native APIs for mobile hardware and services have no desktop meaning and are not provided: screen orientation, status bar and navigation bar control, brightness, sensors, NFC, health and wearables platforms, widgets, in-app purchases and background tasks. Gate them at run time with Platform.OS, or with isDesktopAvailable. A tray-resident app takes the place of background tasks.