App icon generator — iOS, Android and Expo icon sizes in one zip

Turn one 1024px image into every iOS, Android and Expo app icon — an Xcode appiconset, mipmap launcher PNGs and an adaptive icon, zipped in your browser.

Free · no sign-up · runs in your browser

Square PNG or SVG, 1024px. Never leaves your browser.

Fills transparent areas and goes into the adaptive icon config.

Space around the artwork on every icon.

The set

Add an image to draw every size. The file list and config below are ready either way.

iOS · Xcode

  • 1024px · App Store

    AppIcon.appiconset/icon-1024.png

Android

  • 48px · launcher

    mipmap-mdpi/ic_launcher.png

  • 48px · round launcher

    mipmap-mdpi/ic_launcher_round.png

  • 72px · launcher

    mipmap-hdpi/ic_launcher.png

  • 72px · round launcher

    mipmap-hdpi/ic_launcher_round.png

  • 96px · launcher

    mipmap-xhdpi/ic_launcher.png

  • 96px · round launcher

    mipmap-xhdpi/ic_launcher_round.png

  • 144px · launcher

    mipmap-xxhdpi/ic_launcher.png

  • 144px · round launcher

    mipmap-xxhdpi/ic_launcher_round.png

  • 192px · launcher

    mipmap-xxxhdpi/ic_launcher.png

  • 192px · round launcher

    mipmap-xxxhdpi/ic_launcher_round.png

  • 512px · Play Store

    playstore-icon.png

Expo · React Native

  • 1024px · icon

    icon.png

  • 1024px · adaptive foreground

    adaptive-icon.png

The dashed circle on the adaptive preview is the 66dp safe zone — anything outside it may be cut off by a launcher's mask.

Everything here runs in your browser. No image is uploaded, and the zip is assembled in the page.

Config files

AppIcon.appiconset/Contents.json

{
  "images": [
    {
      "filename": "icon-1024.png",
      "idiom": "universal",
      "platform": "ios",
      "size": "1024x1024"
    }
  ],
  "info": {
    "author": "xcode",
    "version": 1
  }
}

app.json

{
  "expo": {
    "icon": "./assets/icon.png",
    "android": {
      "adaptiveIcon": {
        "foregroundImage": "./assets/adaptive-icon.png",
        "backgroundColor": "#ffffff"
      }
    }
  }
}

Shipping a mobile app means feeding the same artwork to three toolchains that each want it in a different shape: Xcode wants an asset catalog with a Contents.json, Android wants five mipmap folders with square and round launchers, and Expo wants a 1024 icon plus a separate adaptive foreground. This takes one square image and writes all of it, in the folder layout each one expects, as a single zip. The image is drawn to canvases in this page and never uploaded.

How it works

  1. 01Add a square PNG or SVG, ideally 1024 pixels. An SVG rasterises cleanly at every size; a smaller PNG works but is upscaled for the 1024 outputs, and the page tells you when that happens.
  2. 02For iOS it writes the single-size asset catalog Xcode 14 and later use: one 1024 universal image and the Contents.json that describes it. Xcode renders every device size from that file at build time.
  3. 03The App Store rejects a 1024 icon with an alpha channel, so transparent areas are filled with the background colour you pick. If your source has transparency you get a warning first, so the flattening is never a surprise.
  4. 04For Android it draws the legacy launcher at all five densities — 48, 72, 96, 144 and 192 pixels — as ic_launcher.png and a circle-clipped ic_launcher_round.png, plus the 512 pixel Play Store listing icon.
  5. 05For Expo it writes icon.png and adaptive-icon.png. The adaptive foreground keeps its transparency and is shrunk into the central 66dp of the 108dp layer, the circle every launcher mask is guaranteed to show; the background colour goes into app.json instead.
  6. 06Corners stay square. iOS, Android and Google Play all apply their own mask, so an icon you round yourself gets rounded twice.
  7. 07Download one file or the whole set. The zip is assembled byte by byte in JavaScript in this page, with no server involved.

Use cases

  • Preparing icons for a first App Store and Play Store submission without exporting fifteen files by hand.
  • Replacing the placeholder icon in a new Expo or React Native project and getting the app.json keys right.
  • Regenerating Android mipmap folders after a logo change.
  • Checking how a design holds up at 48 pixels on a launcher before committing to it.
  • Fixing an App Store Connect rejection caused by transparency in the marketing icon.
  • Making icons from unreleased artwork you would rather not upload to a third-party site.

Frequently asked questions

What size should an iOS app icon be in 2026?

One 1024 by 1024 PNG. Since Xcode 14 an asset catalog can hold a single universal icon, and Xcode generates the 60, 76, 83.5 and every other point size from it when it builds. You only need the long list of sizes if you deliberately choose the legacy all-sizes layout, which almost nobody has a reason to do now.

Why does App Store Connect reject my app icon for transparency?

The 1024 marketing icon must not contain an alpha channel at all — a PNG saved as RGBA can be rejected even when every pixel looks opaque. Flatten it onto a solid colour and save it as RGB. This generator fills transparent areas with your background colour for the iOS and Expo icons, writes them without an alpha channel where the browser allows it, and warns you when the source had transparent pixels.

What are the Android launcher icon sizes for each density?

The launcher icon is 48dp, which is 48 pixels at mdpi, 72 at hdpi, 96 at xhdpi, 144 at xxhdpi and 192 at xxxhdpi. Each goes in its own mipmap folder as ic_launcher.png, with ic_launcher_round.png beside it for launchers that ask for a round icon. Google Play wants a separate 512 pixel icon for the store listing.

What is the safe zone for an Android adaptive icon?

Adaptive icon layers are 108dp square, but the launcher only shows a masked area inside that, and the shape varies by device. The part guaranteed to be visible under every mask is a centred circle 66dp across — roughly the middle 61 percent of the layer. Keep the important part of your logo inside it; the dashed circle on the adaptive preview here marks it.

How do I set the app icon in Expo app.json?

Set expo.icon to a 1024 pixel PNG, and for Android set expo.android.adaptiveIcon.foregroundImage to a transparent 1024 foreground plus adaptiveIcon.backgroundColor to a hex colour. The snippet on this page fills in those keys with the paths and colour you chose; copy the expo folder from the zip into your assets folder and rebuild.

Should I round the corners of my app icon?

No. iOS applies its own rounded mask, Android launchers apply whatever shape the device uses, and Google Play rounds the store icon too. A pre-rounded icon gets masked again and usually shows a thin sliver of background at the corners. Supply a full square and let each platform shape it.

Is my icon uploaded to a server?

No. The image is read with FileReader, drawn to canvases and encoded to PNG inside your browser, and the zip is built in the page. Nothing is sent anywhere, so it is safe to use with artwork that has not been announced yet.

Related reading

  • Developer Tools13 Free Developer Tools, No Sign-Up RequiredThirteen free online developer tools that run in your browser with no account and no upload: color, SEO, conversion, and formatting utilities that just work.

More tools