First-class expo-webview module
Sultanmyrza Kasymbekov
DESCRIPTION:
react-native-webview is widely used, but maintenance feels stale. Critical issues like https://github.com/react-native-webview/react-native-webview/issues/3776 and https://github.com/react-native-webview/react-native-webview/issues/3825 have been open for a long time.
Expo already ships @expo/dom-webview for DOM components (https://www.npmjs.com/package/@expo/dom-webview), but it does not have full feature parity with react-native-webview and is scoped to DOM components.
Proposal: ship a first-class expo-webview at the same quality bar as expo-file-system, expo-location, and expo-notifications.
Use case
I had not used WebViews much until I needed to embed an existing e-commerce site in Expo and communicate over postMessage. Many teams cannot afford to rewrite their web storefront in React Native. WebViews are not only useful for privacy-policy screens — they are a practical way to ship existing web apps inside Expo while adding native capabilities (Apple Pay, etc.) via postMessage. I am not alone: others in the Expo community are running into the same class of problems. This Discord thread describes an Expo Router app that wraps an existing mobile-friendly website with tabbed WebViews — the first tab loads fine, but others often hang mid-load or fail to load images; on iOS, incognito={true} fixes loading but breaks shared login state across tabs: https://discord.com/channels/695411232856997968/1360649231576338542
If you are doing something similar — loading a WebView, communicating with postMessage, and exposing native features to a web app that will not be rewritten soon — please comment and upvote.
Baseline expectations
- postMessage(string) — apps define their own message shape; I typically use { type: 'web/feature/action', payload: any } and receive { type: 'native/feature/actionSuccess|Failure' }
- Pull to refresh
- Back navigation
- Overall stability comparable to what native developers get from platform WebViews
Suggested architecture see attachements
On iOS, WWDC 2025 introduced a native SwiftUI WebView via WebKit for SwiftUI (iOS 26.0+), reducing the need for custom UIViewRepresentable wrappers around WKWebView.
Prior art / references
- NativeScript WebView: https://github.com/NativeScript/NativeScript/tree/b699794db88bb92e1e2a739ea0ad4fe19df58625/packages/core/ui/web-view
- react-native-webview issues: https://github.com/react-native-webview/react-native-webview/issues
- Flutter webview_flutter: https://pub.dev/packages/webview_flutter
- Flutter flutter_inappwebview: https://pub.dev/packages/flutter_inappwebview
- KMP compose-webview discussion: https://slack-chats.kotlinlang.org/t/32852048/hi-everyone-wave-excited-to-share-compose-webview-a-feature-
- kmp-webview: https://github.com/HarlonWang/kmp-webview
- compose-webview: https://github.com/parkwoocheol/compose-webview
- compose-webview-multiplatform: https://github.com/KevinnZou/compose-webview-multiplatform
Others
- https://expo.canny.io/feature-requests/p/react-native-webview-support
- https://expo.canny.io/feature-requests/p/update-react-native-webview
- https://expo.canny.io/feature-requests/p/reduce-os-memory-reclaim-for-webview-heavy-apps-fix-new-architecture-default-on
- https://expo.canny.io/feature-requests/p/expo-increase-react-native-webview-expected-version-range-for-expo-sdk33-to-be-7
Photo Viewer
View photos in a modal