The icon is designed, generated and approved — now the question that ends more weekends than any other: what format, what compression, and should it be one file or a sheet? The answers depend on your target platform, but the decision framework is the same everywhere. This guide walks through the format tradeoffs and gives you a concrete export pipeline.

The format landscape at a glance

FormatTransparencyCompressionBest for
PNGYes (alpha)LosslessUI icons, web, engines — the universal default
WebPYes (alpha)Lossy or losslessWeb games, small bundles, where size matters
JPGNoLossyNever for icons (no alpha, edge artifacts)
Sprite sheet (PNG/WebP)YesPer-formatMany icons in one texture, fewer draw calls
AVIFYesLossyEmerging; great quality but engine support varies

PNG is the safe default for icons in every engine. WebP wins when download size matters more than compatibility (web games, mobile). JPG is banned from icon pipelines — the lack of alpha and the compression artifacts around edges destroy crisp UI.

PNG: lossless and universal

PNG compresses losslessly, which means your icon's edges stay exactly as designed. This is the format every engine imports happily, and it is what you should export for a master asset.

PNG size tips for icons:

  • Fewer colors compress better — flat-style icons are tiny, photo-style icons are large
  • Avoid unnecessary noise: gradients with dithering bloat PNG
  • 8-bit PNG (256 colors) is dramatically smaller than 24/32-bit — fine for flat and pixel icons
  • Transparency is cheap in PNG — keep it

A 1024×1024 flat icon can be 20–80 KB; a glossy gradient icon of the same size can be 200+ KB. If bundle size matters, flatten the gradients slightly or use WebP.

WebP: when size is the boss

WebP gives you 25–35% smaller files than PNG at similar quality, with alpha support. It is the right choice for:

  • Web games where the whole asset bundle downloads to the player
  • Mobile builds with tight size budgets
  • Icon sets with hundreds of files

The catches: WebP lossy can introduce slight edge fringing (test at the smallest size), and older engine versions may need a plugin. For pure lossless WebP, the size advantage over PNG shrinks — weigh the compatibility cost.

Sprite sheets: when and how

A sprite sheet packs many icons into one image with a fixed grid or a data file (atlas). The benefits:

  • One texture = one draw call instead of dozens — real performance gain in HUDs with 40+ icons
  • One file to load — faster startup
  • Engine atlases can pack automatically (Unity Sprite Atlas, Godot AtlasTexture)

The costs: you must manage the grid and the data (UV coordinates), and updating one icon means rebuilding the sheet. For a small game with 20 icons, individual files are simpler; for a full RPG with 400 icons, sheets are the only sane approach.

Grid sheets (all cells the same size) are easiest to manage: 8×8 grid of 64×64 cells, or a 16×16 grid of 32×32 cells. When you generate a set, keep the master files and let the build process produce the sheet — never hand-place icons in a sheet.

The compression workflow

A practical compression ladder for icons:

  • Step 1: export the master as PNG (lossless, transparency)
  • Step 2: if size is a problem, try lossless WebP first
  • Step 3: if still too large, lossy WebP at quality 80–90 — check edges at 32 px
  • Step 4: for flat/pixel icons, reduce color depth to 256 colors (8-bit PNG)
  • Step 5: for pixel art, use PNG with exact-multiple scaling — never lossy

Rule of thumb: never ship a JPG icon, never upscale a compressed icon, and always keep the lossless master as your source of truth.

Density and resolution variants

Mobile and high-DPI desktop need multiple resolutions. The naming convention that scales:

  • icon_sword_512.png — master
  • icon_sword_256.png — 2x UI
  • icon_sword_128.png — 1x UI
  • icon_sword_64.png — small UI
  • icon_sword_32.png — hotbar
  • icon_sword_16.png — status effects

Generate the whole ladder from the master once, and regenerate when the master changes. Hand-resizing per size is how sets drift.

A default export recipe

The recipe that works for most indie games:

  • Master: 1024×1024 PNG with transparency (lossless)
  • Standard ladder: 512, 256, 128, 64, 48, 32, 16
  • Web build: WebP versions of the ladder, lossy q85, keep PNG for the critical UI
  • Mobile: PNG ladder + a packed atlas for the inventory
  • Pixel art: PNG at exact multiples, nearest-neighbor scaling

Formats are a pipeline decision, not a per-file decision. Choose once, automate, and keep the lossless master as the single source of truth. Your icons will be crisp, your bundle small, and your weekends free.

A quick format decision tree

When you are standing in front of a fresh export and wondering which format to use, run this decision tree instead of reading forums:

  • Is this the master? → PNG lossless, keep forever
  • Is this for a web build? → WebP (lossy q85) if the engine accepts it, else PNG
  • Is this pixel art? → PNG at exact multiples, nearest-neighbor, never lossy
  • Is this a UI icon in an engine? → PNG, mipmaps off
  • Are there more than ~50 icons in one screen? → pack into a sprite sheet or atlas
  • Does the file need to be under 100 KB? → WebP or 8-bit PNG, then re-check edges

The tree covers roughly 95% of real icon-export decisions. The remaining cases are platform quirks (Apple's strict PNG rules, Steam's capsule formats) which are documented per platform — but they all still start from the same lossless master.

Automate the ladder so it stays fresh

The export ladder is the kind of repetitive task that begs to be scripted, and scripting it has a side benefit: when you update an icon, the regenerated ladder is always consistent. A tiny build script that takes the master PNG and emits every size and format variant takes an hour to write and saves that hour every single week. It also removes the human error that produces a 512 px icon sitting in a folder labeled 256 px — a bug that only surfaces as mysterious blurriness weeks later.

Keep the script in version control next to the assets, and treat the ladder as generated output: never hand-edit an exported file, always edit the master and re-run the pipeline. That single rule is what keeps a 400-icon library healthy over a two-year development cycle.

Try the icon generator More articles