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

FileSizeRule
icon.png1024×1024 PNGiOS: fill the whole square. No rounded corners, no transparent pixels.
adaptive-icon.png (foreground)1024×1024 PNGLogo inside the middle 66/108 (about 61%). Transparent around it.
monochrome-icon.png (optional)Same as the foregroundOne-color version for Android 13+ themed icons
ios-dark.png, ios-tinted.png (optional)1024×1024 PNGDark: transparent background. Tinted: grayscale.

app.json

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"
      }
    }
  }
}
KeyWhat it does
iconDefault icon for every platform. 1024×1024 PNG.
ios.iconA PNG path, an object with light / dark / tinted, or a .icon file from Icon Composer (SDK 54+).
android.adaptiveIcon.foregroundImageThe logo layer on the home screen
android.adaptiveIcon.backgroundColor6-character hex. Defaults to #FFFFFF.
android.adaptiveIcon.backgroundImageOverrides backgroundColor. Same size as the foreground.
android.adaptiveIcon.monochromeImageUsed when the user turns on themed icons (Android 13+)
android.iconFor Android versions without adaptive icons

Using Icon Composer for iOS

app.json
{
  "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

bash
npx expo prebuild --clean
npx expo run:android
npx expo run:ios

Or 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 seeWhyFix
Expo's icon on the home screenThat is the Expo Go app, not yoursMake a development or release build
The old icon after changing app.jsonThe icon is native; JS reloads don't change itnpx expo prebuild --clean, rebuild, reinstall
Adaptive icon cut offLogo reaches outside the safe zoneKeep it in the middle 66/108 of the foreground
White square behind the logo on AndroidbackgroundColor defaults to #FFFFFFSet android.adaptiveIcon.backgroundColor
Rounded corners look doubled on iOSThe PNG already has rounded cornersUse a full square; iOS applies the mask
Dark mode icon ignoredNo dark entry in ios.iconAdd 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.