/install expo-native-ui
Expo Native UI
Build production-quality native mobile apps with Expo Router following Apple Human Interface Guidelines and modern React Native patterns.
Installation
OpenClaw / Moltbot / Clawbot
npx clawhub@latest install expo-native-ui
WHAT This Skill Does
Guides implementation of native mobile apps using Expo Router with:
- File-based routing with native navigation stacks
- Native tab bars (NativeTabs) and iOS 26 features
- SF Symbols integration via expo-symbols
- Blur effects (expo-blur) and liquid glass (expo-glass-effect)
- Reanimated animations and gesture handling
- Native controls: Switch, Slider, SegmentedControl, DateTimePicker
WHEN To Use
- Building a new Expo Router app
- Adding native tab navigation
- Implementing iOS-style blur or liquid glass effects
- Creating smooth animations with entering/exiting transitions
- Integrating SF Symbols for icons
- Setting up route structure with groups and dynamic routes
KEYWORDS
expo router, react native, native tabs, sf symbols, expo blur, liquid glass, reanimated, ios, android, mobile app, navigation stack, form sheet, modal, context menu, link preview
References
Consult these resources for detailed implementation:
| Reference | Purpose |
|---|---|
references/route-structure.md |
Route conventions, dynamic routes, groups, query params |
references/tabs.md |
NativeTabs, migration from JS tabs, iOS 26 features |
references/icons.md |
SF Symbols with expo-symbols, animations, weights |
references/controls.md |
Native iOS controls: Switch, Slider, DateTimePicker, Picker |
references/visual-effects.md |
Blur effects and liquid glass |
references/animations.md |
Reanimated: entering, exiting, layout, scroll-driven |
references/search.md |
Search bar integration, useSearch hook, filtering |
references/gradients.md |
CSS gradients via experimental_backgroundImage |
references/media.md |
Camera, audio, video, file saving |
references/storage.md |
SQLite, AsyncStorage, SecureStore |
references/webgpu-three.md |
WebGPU, Three.js for 3D graphics |
references/toolbar-and-headers.md |
Stack headers, toolbar customization (iOS) |
Core Principles
Running the App
Try Expo Go first before creating custom builds:
npx expo start # Scan QR with Expo Go
Custom builds (npx expo run:ios) only needed for:
- Local Expo modules (custom native code in
modules/) - Apple targets (widgets, app clips via
@bacons/apple-targets) - Third-party native modules not in Expo Go
Code Style
- Kebab-case file names:
comment-card.tsx - Path aliases in tsconfig over relative imports
- Never co-locate components/utilities in
app/directory - Always ensure a route matches "/" (may be in a group)
- Escape nested backticks carefully in strings
Library Preferences
| Use | Instead Of |
|---|---|
expo-audio |
expo-av |
expo-video |
expo-av |
expo-symbols |
@expo/vector-icons |
react-native-safe-area-context |
RN SafeAreaView |
process.env.EXPO_OS |
Platform.OS |
React.use |
React.useContext |
expo-image |
intrinsic img element |
expo-glass-effect |
custom blur views |
Responsiveness
// Always wrap root in ScrollView with automatic insets
\x3CScrollView contentInsetAdjustmentBehavior="automatic">
{children}
\x3C/ScrollView>
// Use useWindowDimensions, not Dimensions.get()
const { width, height } = useWindowDimensions();
// Flexbox over Dimensions API
\x3CView style={{ flex: 1, flexDirection: 'row', gap: 16 }} />
Navigation Patterns
Link with Preview and Context Menu
import { Link } from 'expo-router';
\x3CLink href="/settings">
\x3CLink.Trigger>
\x3CPressable>\x3CCard />\x3C/Pressable>
\x3C/Link.Trigger>
\x3CLink.Preview />
\x3CLink.Menu>
\x3CLink.MenuAction title="Share" icon="square.and.arrow.up" onPress={handleShare} />
\x3CLink.MenuAction title="Delete" icon="trash" destructive onPress={handleDelete} />
\x3C/Link.Menu>
\x3C/Link>
Form Sheet Modal
// In _layout.tsx
\x3CStack.Screen
name="sheet"
options={{
presentation: "formSheet",
sheetGrabberVisible: true,
sheetAllowedDetents: [0.5, 1.0],
contentStyle: { backgroundColor: "transparent" }, // Liquid glass on iOS 26+
}}
/>
Native Tabs Structure
app/
_layout.tsx — \x3CNativeTabs />
(index,search)/
_layout.tsx — \x3CStack />
index.tsx
search.tsx
// app/_layout.tsx
import { NativeTabs, Icon, Label } from "expo-router/unstable-native-tabs";
export default function Layout() {
return (
\x3CNativeTabs>
\x3CNativeTabs.Trigger name="(index)">
\x3CIcon sf="list.dash" />
\x3CLabel>Items\x3C/Label>
\x3C/NativeTabs.Trigger>
\x3CNativeTabs.Trigger name="(search)" role="search" />
\x3C/NativeTabs>
);
}
Styling Guidelines
- Flex gap over margin/padding where possible
borderCurve: 'continuous'for rounded corners (not capsules)boxShadowstyle prop, never legacy RN shadow/elevation- Stack title instead of custom text elements for page headers
- Inline styles, not
StyleSheet.createunless reusing fontVariant: 'tabular-nums'for numeric countersselectableprop on Text displaying copiable data
// Shadow example
\x3CView style={{ boxShadow: "0 1px 2px rgba(0, 0, 0, 0.05)" }} />
// Continuous border curve
\x3CView style={{ borderRadius: 12, borderCurve: 'continuous' }} />
Behavior Patterns
- Haptics: Use
expo-hapticsconditionally on iOS - Search bar: Prefer
headerSearchBarOptionsin Stack.Screen - Selectable text: Add
selectableprop to important data - Format large numbers: 1.4M, 38k instead of 1,400,000
- Never use intrinsic elements (
img,div) outside DOM components
NEVER Do
- NEVER use legacy modules: Picker, WebView, SafeAreaView from react-native, AsyncStorage (old), expo-permissions
- NEVER use
Dimensions.get()— alwaysuseWindowDimensions - NEVER co-locate components in the
app/directory - NEVER use
Platform.OS— useprocess.env.EXPO_OS - NEVER use legacy shadow styles — use CSS
boxShadow - NEVER start with custom builds — try Expo Go first
- NEVER use StyleSheet.create for one-time styles
- NEVER use
@expo/vector-icons— useexpo-symbols
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install expo-native-ui - 安装完成后,直接呼叫该 Skill 的名称或使用
/expo-native-ui触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
Expor Native UI 是什么?
Build beautiful native iOS/Android apps with Expo Router. Covers route structure, native tabs, animations, blur effects, liquid glass, SF Symbols, and platform patterns. 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 1470 次。
如何安装 Expor Native UI?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install expo-native-ui」即可一键安装,无需额外配置。
Expor Native UI 是免费的吗?
是的,Expor Native UI 完全免费(开源免费),可自由下载、安装和使用。
Expor Native UI 支持哪些平台?
Expor Native UI 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。
谁开发了 Expor Native UI?
由 wpank(@wpank)开发并维护,当前版本 v1.0.0。