Image

Atom
Displays a local or remote image. Set the source ({ uri }) and a size, then choose how it fills its box with a fit prop: cover (the default) fills the box and crops the overflow, while contain fits the whole image inside and letterboxes the spare space.

Playground

Every control sets a real prop of ImageProps. The JSX below updates as you go.
Props
Fit
pick one
radius
one of
alt
string
JSX · ImageProps
<Image cover radius="md" alt="Portrait of Ada Lovelace" />

Variants

2 examples from src/atoms/image/image.md, each rendered live from its own JSX.
Contain
<Image source={{ uri: "/liang-bao.jpg" }} alt="Portrait of Liang Bao" contain width={160} height={120} radius="xl" />
Cover
<Image source={{ uri: "/ada-lovelace.jpg" }} alt="Portrait of Ada Lovelace" cover width={240} height={96} radius="xl" />

Anatomy

1
Frame
2
Image
Dimmed parts appear only in some states or variants.

Props

76 props on ImageProps, grouped as they are declared in source. Required props are marked *.
Prop
Type
Default
Description
Props
63 props
source
ImageSourcePropType
–
The image to display: a remote { uri }, or a bundled asset from require(...).
accessible
boolean
false
When true, indicates that the view is an accessibility element. By default, all the touchable elements are accessible.
accessibilityActions
ReadonlyArray<AccessibilityActionInfo>
–
Provides an array of custom actions available for accessibility.
aria-label
string
–
Alias for accessibilityLabel https://reactnative.dev/docs/view#accessibilitylabel https://github.com/facebook/react-native/issues/34424
blurRadius
number
–
blurRadius: the blur radius of the blur filter added to the image
accessibilityRole
AccessibilityRole
–
Accessibility Role tells a person using either VoiceOver on iOS or TalkBack on Android the type of element that is focused on.
capInsets
Insets
–
When the image is resized, the corners of the size specified by capInsets will stay a fixed size, but the center content and borders of the image will be stretched. This is useful for creating resizable rounded buttons, shadows, and other resizable assets. More info on Apple documentation
accessibilityState
AccessibilityState
–
Accessibility State tells a person using either VoiceOver on iOS or TalkBack on Android the state of the element currently focused on.
onProgress
((event: ImageProgressEventIOS) => void)
–
Invoked on download progress with {nativeEvent: {loaded, total}}
aria-busy
boolean
false
alias for accessibilityState see https://reactnative.dev/docs/accessibility#accessibilitystate
aria-checked
boolean | 'mixed'
–
aria-disabled
boolean
false
aria-expanded
boolean
false
aria-selected
boolean
false
onPartialLoad
(() => void)
–
Invoked when a partial load of the image is complete. The definition of what constitutes a "partial load" is loader specific though this is meant for progressive JPEG loads.
accessibilityHint
string
–
An accessibility hint helps users understand what will happen when they perform an action on the accessibility element when that result is not obvious from the accessibility label.
accessibilityValue
AccessibilityValue
–
Represents the current value of a component. It can be a textual description of a component's value, or for range-based components, such as sliders and progress bars, it contains range information (minimum, current, and maximum).
aria-valuemax
AccessibilityValue['max']
–
aria-valuemin
AccessibilityValue['min']
–
aria-valuenow
AccessibilityValue['now']
–
aria-valuetext
AccessibilityValue['text']
–
onAccessibilityAction
((event: AccessibilityActionEvent) => void)
–
When accessible is true, the system will try to invoke this function when the user performs an accessibility custom action.
importantForAccessibility
('auto' | 'yes' | 'no' | 'no-hide-descendants')
–
[Android] Controlling if a view fires accessibility events and if it is reported to accessibility services.
resizeMethod
'auto' | 'resize' | 'scale' | 'none'
–
The mechanism that should be used to resize the image when the image's dimensions differ from the image view's dimensions. Defaults to auto. - auto: Use heuristics to pick between resize and scale. - resize: A software operation which changes the encoded image in memory before it gets decoded. This should be used instead of scale when the image is much larger than the view. - scale: The image gets drawn downscaled or upscaled. Compared to resize, scale is faster (usually hardware accelerated) and produces higher quality images. This should be used if the image is smaller than the view. It should also be used if the image is slightly bigger than the view. - none: No sampling is performed and the image is displayed in its full resolution. This should only be used in rare circumstances because it is considered unsafe as Android will throw a runtime exception when trying to render images that consume too much memory. More details about resize and scale can be found at http://frescolib.org/docs/resizing-rotating.html.
aria-hidden
boolean
false
A value indicating whether the accessibility elements contained within this accessibility element are hidden.
aria-modal
boolean
false
fadeDuration
number
–
Duration of fade in animation in ms. Defaults to 300
role
Role
–
Indicates to accessibility services to treat UI component like a specific role.

Accessibility and keyboard

Keyboard
Not focusable. It has no interaction of its own and takes the semantics of what it wraps.
Semantics
Roles
img
ARIA on web
aria-hidden
aria-label
From the docs
stretch, center, repeat, and none cover the rarer fits. repeat tiles a bundled asset (or a { uri, width, height } source) at its point size on every platform, drawing the density variant that matches the screen (grain@2x.png on a 2x screen) into each tile; a box with no size of its own is one tile. A remote image with no stated size keeps React Native's own repeat. Remote images load over the network; bundle local assets with require. Name an image that carries content with alt, and it is announce

Platform skins

The playground's props on each platform: same tree, native shapes, type and touch sizes.
Web
control 10 · field 10 · card 16 · Instrument Sans
iOS
capsule controls · field 8 · card 12 · SF Pro · 44 pt
Android
Material 3 stadium · field 4 · card 12 · Roboto · 48 dp

Usage

<Image source={{ uri: "/kira-tanaka.jpg" }} alt="Portrait of Kira Tanaka" width={120} height={120} radius="xl" />
stretch, center, repeat, and none cover the rarer fits. repeat tiles a bundled asset (or a { uri, width, height } source) at its point size on every platform, drawing the density variant that matches the screen (grain@2x.png on a 2x screen) into each tile; a box with no size of its own is one tile. A remote image with no stated size keeps React Native's own repeat. Remote images load over the network; bundle local assets with require. Name an image that carries content with alt, and it is announced as an image with that name on every platform; an image with no name is decorative, and assistive tech skips it. The v4 hand-off rounds a standalone photo at 12 (radius="xl"); Image draws no corner of its own, so a photo inside a Card or a Video keeps its host's corner. For a circular identity photo with an initials fallback, reach for <Avatar src="…" name="…" /> rather than rounding a bare Image.

Tokens

Read from the playground render. Values follow the scheme and the ion hue.
--fd
--ft
--ln
--sf3

Related components