Expo · SDK 58
How to Set the App Icon in Expo (SDK 58)
Short answer
Put a 1024×1024 PNG at assets/images/icon.png and set "icon" in app.json. For Android, add android.adaptiveIcon with a foreground image and a background color. The icon is part of the native build, so rebuild to see it. Expo Go never shows your icon on the home screen.
Checked against Expo: Splash screen and app icon and Expo app config reference in October 2026.
Files you need
| File | Size | Rule |
|---|---|---|
icon.png | 1024×1024 PNG | iOS: fill the whole square. No rounded corners, no transparent pixels. |
adaptive-icon.png (foreground) | 1024×1024 PNG | Logo inside the middle 66/108 (about 61%). Transparent around it. |
monochrome-icon.png (optional) | Same as the foreground | One-color version for Android 13+ themed icons |
ios-dark.png, ios-tinted.png (optional) | 1024×1024 PNG | Dark: transparent background. Tinted: grayscale. |
app.json
{
"expo": {
"icon": "./assets/images/icon.png",
"ios": {
"icon": {
"light": "./assets/images/icon.png",
"dark": "./assets/images/ios-dark.png",
"tinted": "./assets/images/ios-tinted.png"
}
},
"android": {
"adaptiveIcon": {
"foregroundImage": "./assets/images/adaptive-icon.png",
"monochromeImage": "./assets/images/monochrome-icon.png",
"backgroundColor": "#1E40AF"
}
}
}
}| Key | What it does |
|---|---|
icon | Default icon for every platform. 1024×1024 PNG. |
ios.icon | A PNG path, an object with light / dark / tinted, or a .icon file from Icon Composer (SDK 54+). |
android.adaptiveIcon.foregroundImage | The logo layer on the home screen |
android.adaptiveIcon.backgroundColor | 6-character hex. Defaults to #FFFFFF. |
android.adaptiveIcon.backgroundImage | Overrides backgroundColor. Same size as the foreground. |
android.adaptiveIcon.monochromeImage | Used when the user turns on themed icons (Android 13+) |
android.icon | For Android versions without adaptive icons |
Using Icon Composer for iOS
{
"expo": {
"ios": { "icon": "./assets/app.icon" }
}
}Icon Composer's .icon file carries the dark and tinted looks itself, so you don't add separate variants.
Rebuild
npx expo prebuild --clean
npx expo run:android
npx expo run:iosOr make a new EAS build. Without Prebuild or EAS Build, changes to the icon in app.json have no effect.
Expo app icon not updating: fixes
| You see | Why | Fix |
|---|---|---|
| Expo's icon on the home screen | That is the Expo Go app, not yours | Make a development or release build |
| The old icon after changing app.json | The icon is native; JS reloads don't change it | npx expo prebuild --clean, rebuild, reinstall |
| Adaptive icon cut off | Logo reaches outside the safe zone | Keep it in the middle 66/108 of the foreground |
| White square behind the logo on Android | backgroundColor defaults to #FFFFFF | Set android.adaptiveIcon.backgroundColor |
| Rounded corners look doubled on iOS | The PNG already has rounded corners | Use a full square; iOS applies the mask |
| Dark mode icon ignored | No dark entry in ios.icon | Add ios.icon.dark, or use a .icon file |
FAQ
What size is the Expo app icon?
1024×1024 PNG. Expo makes the smaller sizes at build time.
Why doesn't Expo Go show my app icon?
Expo Go is its own app with its own icon. Your icon shows only inside Expo Go's project list and in your own builds.
Do I need a separate Android adaptive icon?
Recommended. Without android.adaptiveIcon, Android draws your square icon inside its own mask and may crop it.
Can the iOS icon have a transparent background?
No. The light icon must fill the whole square. Only the dark variant uses transparency.
How do I support iOS dark and tinted icons?
Give ios.icon an object with light, dark and tinted paths, or point it at a .icon file.