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 Jetpack Compose Icon component for displaying icons.

Android
Included in Expo Go
Recommended version:
~56.0.26

An icon component for rendering Material Symbol XML vector drawables in Jetpack Compose. The recommended source is @expo/material-symbols — it ships Google's Material Symbols as individual asset subpaths, so Metro only bundles the icons you actually import. For other styles (rounded, sharp, filled) or custom axes, the package's CLI downloads any variant directly into your project.

Wifi, bluetooth, mail, and person icons rendered with the Material 3 Icon componentWifi, bluetooth, mail, and person icons rendered with the Material 3 Icon component

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. For a different style or custom axes, see Custom styles — 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

Basic icon

Import any icon directly from its own subpath of @expo/material-symbols — each icon resolves to a Metro asset that Icon can render natively. For local XML files you add to your project, use require() instead (see Custom styles below).

BasicIcon.tsx
import { Host, Icon } from '@expo/ui/jetpack-compose'; import Home from '@expo/material-symbols/home.xml'; export default function BasicIcon() { return ( <Host matchContents> <Icon source={Home} contentDescription="Home" /> </Host> ); }

Icon with tint color

Use the tint prop to apply a color overlay to the icon.

TintedIcon.tsx
import { Host, Icon } from '@expo/ui/jetpack-compose'; import Favorite from '@expo/material-symbols/favorite.xml'; export default function TintedIcon() { return ( <Host matchContents> <Icon source={Favorite} tint="#6200ee" contentDescription="Favorite" /> </Host> ); }

Icon with size

Specify a custom size in dp using the size prop.

SizedIcon.tsx
import { Host, Icon } from '@expo/ui/jetpack-compose'; import Settings from '@expo/material-symbols/settings.xml'; export default function SizedIcon() { return ( <Host matchContents> <Icon source={Settings} size={48} contentDescription="Settings" /> </Host> ); }

Custom styles via @expo/material-symbols CLI

@expo/material-symbols ships the outlined style with default axes. When you need a different style (rounded, sharp), a filled variant, or custom weight, grade, or optical size, use its CLI to fetch specific drawables straight from Google Fonts into your project.

Terminal
# Download icons by name (defaults: outlined, weight 400, 24px)
- npx @expo/material-symbols star home

# Rounded style
- npx @expo/material-symbols --style rounded star home

# Sharp + filled
- npx @expo/material-symbols --style sharp --fill favorite

# Paste a URL from fonts.google.com/icons to preserve the axes you picked there
- npx @expo/material-symbols "https://fonts.google.com/icons?selected=Material+Symbols+Outlined:check_box:FILL@1;wght@300;GRAD@0;opsz@24"
OptionDescriptionDefault
-o, --output <dir>Output directory./assets
-s, --style <style>Icon style: outlined, rounded, sharpoutlined
-f, --fillUse the filled variant
-w, --weight <wght>Weight: 100–700400
-g, --grade <grad>Grade: -25, 0, 2000
--opsz <size>Optical size: 20, 24, 40, 4824

The CLI writes ready-to-use XML vector drawables into your project. Load them with require() and pass them to Icon.

CustomIcon.tsx
import { Host, Icon } from '@expo/ui/jetpack-compose'; export default function CustomIcon() { return ( <Host matchContents> <Icon source={require('./assets/star-rounded.xml')} size={32} contentDescription="Star" /> </Host> ); }

API

import { Icon } from '@expo/ui/jetpack-compose';

No API data file found, sorry!