expo-image

expo-image: A Faster Image Component

expo-image 6,418 (github.com/expo/expo (https://github.com/expo/expo/tree/main/packages/expo-image 52,467 ), MIT) uses Glide 35,023 on Android and SDWebImage 25,628 on iOS. Add version 57.0.5 with npx expo install expo-image and rebuild, since it is a native module.

The core Image compared with expo-image (Expo SDK 57 6,418 )
Feature React Native 36,878 Image expo-image
Cache control iOS source.cache only cachePolicy: none, disk, memory, memory-disk
Clearing the cache Not possible Image.clearDiskCache(), Image.clearMemoryCache()
Placeholder defaultSource, ignored in Android debug builds Any image, or a blurhash or thumbhash string
Formats Extra Fresco 17,155 modules for animated GIF and WebP AVIF, HEIC, SVG, APNG built in
Recycled list rows Previous image can linger recyclingKey resets the view

Sizing uses contentFit and contentPosition, after CSS; resizeMode still works, except repeat. The listing draws each cover over a blurhash placeholder and logs which cache, if any, supplied it.

src/ExpoCovers.tsx: expo-image with a placeholder and a memory-and-disk cacheTSX
<Image key={b.id} source={coverUrl(b.id)} style={styles.cover}
  placeholder={{ blurhash: blurhash(b.id) }} contentFit="cover" transition={300}
  cachePolicy="memory-disk"
  onLoad={(e) => console.log(`cover ${b.id} from ${e.cacheType}`)} />

On the first launch all six covers logged from none, meaning the network supplied them; after a cold restart all six logged from disk, Glide's disk cache.