This is documentation for the next SDK version. For up-to-date documentation, see the latest version (SDK 56).
Image
A SwiftUI Image component for displaying SF Symbols.
For the complete documentation index, see llms.txt. Use this file to discover all available pages.
For cross-platform usage, see the universalIcon— it renders the appropriate native component per platform.
Expo UI Image displays SF Symbols using the SwiftUI Image API. SF Symbols are a library of configurable symbols provided by Apple.

Installation
- npx expo install @expo/uiIf you are installing this in an existing React Native app, make sure to install expo in your project.
Usage
Basic SF Symbol
import { Host, Image } from '@expo/ui/swift-ui'; export default function BasicImageExample() { return ( <Host matchContents> <Image systemName="star.fill" /> </Host> ); }
With size and color
import { Host, HStack, Image } from '@expo/ui/swift-ui'; export default function ImageSizeColorExample() { return ( <Host matchContents> <HStack spacing={16}> <Image systemName="heart.fill" size={24} color="red" /> <Image systemName="star.fill" size={32} color="orange" /> <Image systemName="bell.fill" size={40} color="blue" /> </HStack> </Host> ); }
With variable value
Some SF Symbols alter their appearance based on a variable value. Use the variableValue prop with a value between 0.0 and 1.0 to control the rendered symbol. Requires iOS 16.0+ and SF Symbols 4.0+.
import { Host, HStack, Image } from '@expo/ui/swift-ui'; export default function ImageVariableExample() { return ( <Host matchContents> <HStack spacing={16}> <Image systemName="chart.bar.fill" size={32} variableValue={0.3} /> <Image systemName="chart.bar.fill" size={32} variableValue={0.6} /> <Image systemName="chart.bar.fill" size={32} variableValue={1.0} /> </HStack> </Host> ); }
With symbol effect
Apply an SF Symbol effect to animate the symbol by passing a symbolEffect modifier from @expo/ui/swift-ui/modifiers. This effect runs continuously by default. You can also pass value for a discrete trigger that fires once per change, or isActive for a boolean toggle that runs the effect while true. Requires iOS 17.0 and later.
import { Host, Image } from '@expo/ui/swift-ui'; import { symbolEffect } from '@expo/ui/swift-ui/modifiers'; export default function ImageSymbolEffectExample() { return ( <Host matchContents> <Image systemName="wifi" size={48} color="blue" modifiers={[ symbolEffect({ effect: 'variableColor', fillStyle: 'iterative', playbackStyle: 'reversing', }), ]} /> </Host> ); }
The following example uses value to play bounce on each button press. Write to state.value from a worklet (or via scheduleOnUI) to trigger the effect.
import { Button, Host, Image, useNativeState, VStack } from '@expo/ui/swift-ui'; import { symbolEffect } from '@expo/ui/swift-ui/modifiers'; import { scheduleOnUI } from 'react-native-worklets'; export default function ImageSymbolEffectValueExample() { const trigger = useNativeState(0); return ( <Host matchContents> <VStack spacing={16}> <Image systemName="bell.fill" size={48} color="orange" modifiers={[symbolEffect({ effect: 'bounce', direction: 'up' }, { value: trigger })]} /> <Button label="Bounce" onPress={() => scheduleOnUI(() => { 'worklet'; trigger.value = trigger.value + 1; }) } /> </VStack> </Host> ); }
The following example uses isActive to toggle a continuous breathe animation.
import { Host, Image, SyncToggle, useNativeState, VStack } from '@expo/ui/swift-ui'; import { symbolEffect } from '@expo/ui/swift-ui/modifiers'; export default function ImageSymbolEffectIsActiveExample() { const isActive = useNativeState(true); return ( <Host matchContents> <VStack spacing={16}> <Image systemName="cloud.fill" size={48} color="cyan" modifiers={[symbolEffect({ effect: 'breathe' }, { isActive })]} /> <SyncToggle label="Breathe" isOn={isActive} /> </VStack> </Host> ); }
API
import { Image } from '@expo/ui/swift-ui';
Component
Type: React.Element<ImageProps>
ColorValueThe color of the system image. Can be a color name like '#ff00ff', 'red', 'blue', etc.
SFSymbols7_0The name of the system image (SF Symbol). For example: 'photo', 'heart.fill', 'star.circle'
stringThe URI of the local image file to display. For example: 'file:///path/to/image.jpg' Performs a synchronous read operation that blocks the main thread.
numberThe variable value that alters the symbol's appearance. A number between 0.0 and 1.0. Only works with SF Symbols that support variable values (SF Symbols 4.0+).