Expo UI with SwiftUI and Jetpack Compose in practice
Expo UI with SwiftUI and Jetpack Compose in practice
Exploring Expo UI with SwiftUI and Jetpack Compose, including setup challenges, architecture tradeoffs, and real-world developer insights.
Expo UI with SwiftUI and Jetpack Compose in practice
Working with Expo UI in real projects
Expo UI introduces a new layer for building interfaces using SwiftUI on iOS and Jetpack Compose on Android. Instead of relying solely on shared React Native components, developers can now tap directly into platform-native UI systems.
In practice, this means wrapping native UI inside a host component and composing views using platform-specific primitives. SwiftUI relies on constructs like VStack and modifiers, while Jetpack Compose introduces its own layout and styling patterns. The result is a more native feel, but also a shift in how components are structured and maintained.
Setup friction and current limitations
Getting started isn’t entirely frictionless. Running Expo UI requires a development build instead of Expo Go, along with proper prebuild steps and native configuration. Even small misconfigurations can block builds or cause linking issues.
There are also inconsistencies between platforms. Some components available in SwiftUI don’t yet have equivalents in Jetpack Compose, which creates gaps when aiming for feature parity. This becomes visible when experimenting with components like color pickers or advanced UI elements.
Rethinking component architecture
Expo UI changes assumptions around shared components. Instead of a single implementation across platforms, developers may need to maintain separate UI logic for iOS and Android while keeping a shared interface at a higher level.
This introduces tradeoffs. On one hand, it allows deeper integration with platform design systems. On the other, it increases complexity in code organization and consistency. The approach shifts from “write once” toward selective platform specialization where it matters.
Native capabilities vs custom implementations
Access to native components brings immediate benefits. Platform-provided UI elements are performant, well-tested, and familiar to users. They remove the need to build and maintain complex components in JavaScript.
At the same time, fully custom cross-platform components still have value. They ensure consistency and reduce duplication, especially when parity between platforms is required. Choosing between native and shared implementations becomes a strategic decision rather than a default.
What this means for React Native development
Expo UI highlights a broader direction: closer alignment with native platforms while keeping React Native as the orchestration layer. It encourages developers to understand SwiftUI and Jetpack Compose concepts, even when working primarily in JavaScript.
This also raises the bar for platform awareness. Differences in behavior, styling, and capabilities become more explicit, pushing teams to make more deliberate decisions about UX and architecture.
Watch the full stream and explore the discussion in detail.
Expo UI with SwiftUI and Jetpack Compose in practice
Exploring Expo UI with SwiftUI and Jetpack Compose, including setup challenges, architecture tradeoffs, and real-world developer insights.

Learn more about Expo
Here's everything we published recently on this topic.
React Native Performance Optimization
Improve React Native apps speed and efficiency through targeted performance enhancements.
C++ Library Integration for React Native
Wrap existing C-compatible libraries for React Native with type-safe JavaScript APIs.
Shared Native Core for Cross-Platform Apps
Implement business logic once in C++ or Rust and run it across mobile, web, desktop, and TV.
Custom High-Performance Renderers
Build custom-rendered screens with WebGPU, Skia, or Filament for 60fps, 3D, and pixel-perfect UX.



















