Skillshub Expo UI Jetpack Compose
`@expo/ui/jetpack-compose` package lets you use Jetpack Compose Views and modifiers in your app.
install
source · Clone the upstream repo
git clone https://github.com/ComeOnOliver/skillshub
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ComeOnOliver/skillshub "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/expo/skills/expo-ui-jetpack-compose" ~/.claude/skills/comeonoliver-skillshub-expo-ui-jetpack-compose && rm -rf "$T"
manifest:
skills/expo/skills/expo-ui-jetpack-compose/SKILL.mdsource content
The instructions in this skill apply to SDK 55 only. For other SDK versions, refer to the Expo UI Jetpack Compose docs for that version for the most accurate information.
Installation
npx expo install @expo/ui
A native rebuild is required after installation (
npx expo run:android).
Instructions
- Expo UI's API mirrors Jetpack Compose's API. Use Jetpack Compose and Material Design 3 knowledge to decide which components or modifiers to use. If you need deeper Jetpack Compose or Material 3 guidance (e.g. which component to pick, layout patterns, theming), spawn a subagent to research Jetpack Compose and Material Design 3 best practices.
- Components are imported from
, modifiers from@expo/ui/jetpack-compose
.@expo/ui/jetpack-compose/modifiers - Always read the
type files to confirm the exact API before using a component or modifier. Run.d.ts
to locate the package, then read the relevantnode -e "console.log(path.dirname(require.resolve('@expo/ui/jetpack-compose')))"
files. This is the most reliable source of truth.{ComponentName}/index.d.ts - When about to use a component, fetch its docs to confirm the API - https://docs.expo.dev/versions/v55.0.0/sdk/ui/jetpack-compose/{component-name}/index.md
- When unsure about a modifier's API, refer to the docs - https://docs.expo.dev/versions/v55.0.0/sdk/ui/jetpack-compose/modifiers/index.md
- Every Jetpack Compose tree must be wrapped in
. UseHost
for intrinsic sizing, or<Host matchContents>
when you need explicit size (e.g. as a parent of<Host style={{ flex: 1 }}>
). Example:LazyColumn
import { Host, Column, Button, Text } from "@expo/ui/jetpack-compose"; import { fillMaxWidth, paddingAll } from "@expo/ui/jetpack-compose/modifiers"; <Host matchContents> <Column verticalArrangement={{ spacedBy: 8 }} modifiers={[fillMaxWidth(), paddingAll(16)]}> <Text style={{ typography: "titleLarge" }}>Hello</Text> <Button onPress={() => alert("Pressed!")}>Press me</Button> </Column> </Host>;
Key Components
- LazyColumn — Use instead of react-native
/ScrollView
for scrollable lists. Wrap inFlatList
.<Host style={{ flex: 1 }}> - Icon — Use
with Android XML vector drawables. To get icons: go to Material Symbols, select an icon, choose the Android platform, and download the XML vector drawable. Save these as<Icon source={require('./icon.xml')} size={24} />
files in your project's.xml
directory (e.g.assets/
). Metro bundlesassets/icons/wifi.xml
assets automatically — no metro config changes needed..xml