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.
| 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.
<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.