This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.

Icon

A platform-native icon — SF Symbol on iOS, Material Symbol on Android.

Android
iOS
Included in Expo Go
Recommended version:
~56.0.26

A platform-native icon. On Android, it renders a Material Symbol XML vector drawable (recommended source: @expo/material-symbols). On iOS, it renders an SF Symbol.

Installation

Terminal
- npx expo install @expo/ui
- yarn expo install @expo/ui
- pnpm expo install @expo/ui
- bun expo install @expo/ui

If you are installing this in an existing React Native app, make sure to install expo in your project.

Optionally, install @expo/material-symbols to use the bundled icons on Android. For a different style or custom axes, see Custom styles on the Jetpack Compose Icon page — no install needed.

Terminal
- npx expo install @expo/material-symbols
- yarn expo install @expo/material-symbols
- pnpm expo install @expo/material-symbols
- bun expo install @expo/material-symbols

Usage

Cross-platform icon with Icon.select

Icon.select picks the right asset for the current platform. Pair it with @expo/ui/babel-plugin (auto-loaded by babel-preset-expo) so Metro can tree-shake the unused side per platform.

IconSelectExample.tsx
import { Host, Icon } from '@expo/ui'; export default function IconSelectExample() { return ( <Host matchContents> <Icon name={Icon.select({ ios: 'star.fill', android: import('@expo/material-symbols/star.xml'), })} size={32} color="orange" /> </Host> ); }

Hoisted Icon.select

Hoist the Icon.select call when reusing the same icon across multiple call sites.

HoistedIconExample.tsx
import { Host, Row, Icon } from '@expo/ui'; const STAR = Icon.select({ ios: 'star.fill', android: import('@expo/material-symbols/star.xml'), }); export default function HoistedIconExample() { return ( <Host matchContents> <Row spacing={4}> <Icon name={STAR} size={20} color="gold" /> <Icon name={STAR} size={20} color="gold" /> <Icon name={STAR} size={20} color="gold" /> </Row> </Host> ); }

Platform-specific files

Inside an .android.tsx file, import the XML asset directly. Inside an .ios.tsx file, pass the SF Symbol name as a string.

Icon.android.tsx
import StarIcon from '@expo/material-symbols/star.xml'; import { Host, Icon } from '@expo/ui'; export default function StarRow() { return ( <Host matchContents> <Icon name={StarIcon} size={24} /> </Host> ); }
Icon.ios.tsx
import { Host, Icon } from '@expo/ui'; export default function StarRow() { return ( <Host matchContents> <Icon name="star.fill" size={24} /> </Host> ); }

API

import { Icon } from '@expo/ui';

No API data file found, sorry!