This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.
Image A SwiftUI Image component for displaying SF Symbols.
Recommended version:
~56.0.26
For cross-platform usage, see the universal Icon — 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/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.
Usage
Basic SF Symbol
import { Host , Image } from '@expo/ui/swift-ui' ;
export default function BasicImageExample ( ) {
return (
< Host matchContents >
< Image systemName = " star.fill" />
</ Host >
) ;
}
Custom SF Symbol
Use the assetName prop to display a custom SF Symbol imported into the app asset catalog as a symbol set.
import { Host , Image } from '@expo/ui/swift-ui' ;
export default function CustomImageExample ( ) {
return (
< Host matchContents >
< Image assetName = " acme.mark" />
</ Host >
) ;
}
With size and color
ImageSizeColorExample.tsx 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.
ImageSymbolEffectExample.tsx 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.
ImageSymbolEffectValueExample.tsx 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.
ImageSymbolEffectIsActiveExample.tsx 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' ;
No API data file found, sorry!