expo-ui-jetpack-compose — Claude skill: Jetpack Compose in Expo
A skill that tells the agent how to build native Android UI with @expo/ui/jetpack-compose inside an Expo app.
npx skills add openai/plugins --skill expo-ui-jetpack-compose -a codexWhat expo-ui-jetpack-compose does
The skill covers the @expo/ui/jetpack-compose package: components come from @expo/ui/jetpack-compose, modifiers from @expo/ui/jetpack-compose/modifiers. The API mirrors Jetpack Compose, so the agent leans on Compose and Material Design 3 knowledge when picking a component or modifier. Every Compose tree is wrapped in Host: <Host matchContents> sizes to content, <Host style={{ flex: 1 }}> is for explicit sizing, such as a parent of LazyColumn.
The instructions apply to SDK 55 only. On other versions the skill points to the Expo UI Jetpack Compose docs for that version. Before using a component, the agent reads the package .d.ts files to confirm the API: locate the package with node -e "console.log(path.dirname(require.resolve('@expo/ui/jetpack-compose')))", then open the relevant {ComponentName}/index.d.ts. Fetching the component or modifier docs before implementing is part of the routine too.
Install the package with npx expo install @expo/ui, then rebuild natively with npx expo run:android. For scrollable lists the skill swaps react-native ScrollView and FlatList for LazyColumn, and icons use <Icon source={require('./icon.xml')} size={24} /> with Android XML vector drawables kept in assets/; Metro bundles .xml without config changes. If your project sits on a different SDK version, these instructions won't match — check the docs for your version instead.
What it helps with
- build a screen from Jetpack Compose components inside an Expo app
- choose between
LazyColumnandFlatListfor a scrollable list - wire an Android XML vector drawable in as an icon
- confirm the exact signature of a component or modifier from
.d.ts - size a Compose tree through
Host
Example prompts for the agent
- Build a settings screen with components from
@expo/ui/jetpack-composeandHost matchContents - Replace
FlatListwithLazyColumnwrapped in<Host style={{ flex: 1 }}> - Add the icon at
assets/icons/wifi.xmlusing theIconcomponent
How to install expo-ui-jetpack-compose
1Skills CLI (Vercel)
npx skills add openai/plugins --skill expo-ui-jetpack-compose -a codex2Manually: put the files in place
.agents/skills/expo-ui-jetpack-compose/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add openai/plugins --skill expo-ui-jetpack-compose -a claude-code2Manually: put the files in place
~/.claude/skills/expo-ui-jetpack-compose/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/expo-ui-jetpack-compose/
Manually: put the files in place
.cursor/skills/expo-ui-jetpack-compose/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install openai/plugins expo-ui-jetpack-compose2Manually: put the files in place
.github/skills/expo-ui-jetpack-compose/SKILL.mdPlatform CLI
gemini skills install https://github.com/openai/plugins --path plugins/expo/skills/expo-ui-jetpack-composeManually: put the files in place
.devin/skills/expo-ui-jetpack-compose/SKILL.mdThe legacy .windsurf/skills/ path still works
Claude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: Codex skills: how to install, where they live, how to call them
Questions about expo-ui-jetpack-compose
How do I install expo-ui-jetpack-compose in Claude?
Run npx skills add openai/plugins --skill expo-ui-jetpack-compose, then npx skills add openai/plugins --skill expo-ui-jetpack-compose -a codex. The skill then lives at .agents/skills/expo-ui-jetpack-compose/SKILL.md.
What does expo-ui-jetpack-compose do?
It tells the agent how to use Jetpack Compose Views and modifiers in an Expo app through the @expo/ui/jetpack-compose package, including the Host wrapper and reading type files before calling an API.
Which SDK version does this skill target?
The instructions are written for SDK 55. For other versions the skill directs you to the Expo UI Jetpack Compose docs for that version.
Source text
SKILL.md · MIT
---
name: expo-ui-jetpack-compose
description: "`@expo/ui/jetpack-compose` package lets you use Jetpack Compose Views and modifiers in your app."
---
> 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
```bash
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), consult current Jetpack Compose and Material Design 3 documentation before implementing.
- Components are imported from `@expo/ui/jetpack-compose`, modifiers from `@expo/ui/jetpack-compose/modifiers`.
- **Always read the `.d.ts` type files** to confirm the exact API before using a component or modifier. Run `node -e "console.log(path.dirname(require.resolve('@expo/ui/jetpack-compose')))"` to locate the package, then read the relevant `{ComponentName}/index.d.ts` files. This is the most reliable source of truth.
- 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 `Host`. Use `<Host matchContents>` for intrinsic sizing, or `<Host style={{ flex: 1 }}>` when you need explicit size (e.g. as a parent of `LazyColumn`). Example:
```jsx
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`/`FlatList` for scrollable lists. Wrap in `<Host style={{ flex: 1 }}>`.
- **Icon** — Use `<Icon source={require('./icon.xml')} size={24} />` with Android XML vector drawables. To get icons: go to [Material Symbols](https://fonts.google.com/icons), select an icon, choose the Android platform, and download the XML vector drawable. Save these as `.xml` files in your project's `assets/` directory (e.g. `assets/icons/wifi.xml`). Metro bundles `.xml` assets automatically — no metro config changes needed.
© Expo Team · MIT · openai/plugins