expo-ui

Build native iOS and Android UI in React using @expo/ui SwiftUI and Jetpack Compose components.

1|Updated Jul 4, 2026
One-click install
npx skills add https://github.com/trungenglish/SHOPWISE --skill expo-ui-trungenglish
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: expo-ui
Source: https://github.com/trungenglish/SHOPWISE/tree/main/.agents/skills/expo-ui
Command: npx skills add https://github.com/trungenglish/SHOPWISE --skill expo-ui-trungenglish

SYSTEM DOCUMENTATION & REQUIREMENTS

💡 This Skill requires @expo/ui, react-native-worklets, and includes references (resource) components.

What problem does it solve? Standard React Native components often fall short when you need truly native-feeling UI such as lists with swipe actions, settings forms with toggles, menus, sheets, pickers, and sliders. This Skill guides you through @expo/ui, which renders real SwiftUI on iOS and Jetpack Compose on Android directly from React, so you get platform-native UI without writing native code. ## Core Features & Use Cases - Universal components: One component tree (Host, Column, Row, Button, Text, List, and more) runs unmodified on iOS, Android, and web with a native look and feel, requiring Expo SDK 56+. - Platform-specific layers: Drop down to @expo/ui/swift-ui or @expo/ui/jetpack-compose with modifiers, RNHostView embedding, and useNativeState for synchronous UI-thread state updates when the universal layer is missing something. - Drop-in replacements: Migrate off React Native community libraries like @gorhom/bottom-sheet, datetimepicker, slider, and picker using API-compatible equivalents under @expo/ui/community. - Use Case: You are building a settings screen in an Expo app and want native toggles, grouped lists, and a bottom sheet. Use universal @expo/ui components wrapped in Host, and only split into .ios.tsx/.android.tsx files if you need a platform-specific modifier. ## Quick Start Ask the assistant to build a native-feeling settings screen in your Expo app using @expo/ui universal components wrapped in a Host.

Frequently Asked Questions about expo-ui

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I build native UI in an Expo app with @expo/ui?▼

Install @expo/ui with npx expo install @expo/ui, then import universal components like Host, Column, Button, and Text from the package root. Every tree must be wrapped in Host, and on SDK 56 it runs directly in Expo Go without a custom build.

What is the difference between universal @expo/ui components and the SwiftUI or Jetpack Compose layers?▼

Universal components from the @expo/ui root run one tree on iOS, Android, and web with no platform file splits. The @expo/ui/swift-ui and @expo/ui/jetpack-compose layers expose platform-specific components and modifiers but require separate .ios.tsx and .android.tsx files.

Can @expo/ui replace React Native community libraries like bottom-sheet or datetimepicker?▼

Yes, @expo/ui ships API-compatible drop-in replacements under @expo/ui/community for libraries including @gorhom/bottom-sheet, datetimepicker, slider, picker, segmented-control, pager-view, masked-view, and menu. The swap is usually just changing the import path.

Does @expo/ui work in Expo Go?▼

On Expo SDK 56, @expo/ui works in Expo Go, so npx expo start runs it directly with no custom build. On older SDKs you must build a development client first with npx expo run:ios or npx expo run:android.

Why is @expo/ui TextInput flickering or not updating synchronously?▼

The universal TextInput uses useNativeState with worklets for synchronous UI-thread updates, which requires react-native-worklets. Without that package installed, updates go through the React render cycle and flickering remains.

When should I not use @expo/ui List or LazyColumn for large datasets?▼

List and LazyColumn are not suitable for large lists because each item is a JSX node processed on the JS thread, causing noticeable slowdowns at scale. For large datasets, use a different list approach rather than @expo/ui collections.