Favicon Generator

Every size a browser asks for, plus the link tags to paste into your head.

Drop a square image to build the icon set

Six PNGs at 16, 32, 48, 180, 192 and 512 px, each on its own canvas, each with its own download — plus the link tags to paste into your <head>. A non-square source gets centre-cropped, which is often the wrong crop for a wide wordmark.

Choose image PNG · JPG · WEBP · AVIF · SVG · 512 px or larger

A 16 px icon is a square of 256 pixels. A logo with a gradient, a shadow or two lines of type inside it has nowhere to put any of that, and the browser's downscaler turns it into grey mush. Test with the plainest mark you have — one shape, one colour, no thin strokes — and keep the detailed version for the 512 px file, which is the one large displays and store listings use.

256 pixels is the whole budget

A 16-pixel square holds 256 pixels, and every decision the mark makes is paid for out of that grid. One pixel of stroke is a sixteenth of the width — the same proportion as a 60-pixel bar running across a 960-pixel layout. Two lines of type become two rows of pixels. A gradient has sixteen steps to work with, which is a smudge rather than a transition.

A 16 × 16 icon, drawn on its grid:

        ................      a 1px stroke is the thinnest mark
        ......####......      the grid can hold — and it must sit
        ....##....##....      exactly on a cell boundary
        ...##......##...
        ...##......##...      the interior of a letter has 2 or 3
        ...##......##...      pixels of height, at most
        ...##......##...
        ....##....##....      nothing thinner than 1px exists,
        ......####......      and nothing smaller than 1px can
        ................      be rendered

        256 cells, 16 of them one stroke wide = 6% of the icon
        per line. There is room for one shape, and no more.

That is why the source artwork is almost never the right thing to scale down. A logo with a gradient, a drop shadow, a thin rule or a second line of type has nowhere to put any of it at this size, and the browser's downscaler averages all of it into grey. The mark that works at 16 is usually a simpler drawing of the same idea — one bold shape, high contrast against its background, nothing inside it. Keep the detailed version for the 512-pixel file, where the room exists.

Draw it on the grid rather than scaling it down

A mark whose edges fall in the middle of a pixel gets anti-aliased across two columns, and at 16 pixels that reads as blur — the icon looks soft next to its neighbours in the tab strip even though nothing is technically wrong with it. Hand-drawing the small size means putting edges on cell boundaries deliberately, squaring a curve into a corner where the curve would only be one pixel wide, and snapping the whole shape to the grid.

Two habits make a disproportionate difference. Text at this size wants to be a single glyph or nothing at all; two letters side by side read as a smudge, and a capital letter alone usually reads. And a mark drawn on a transparent background should be checked against both a light and a dark tab strip, because the browser paints its own background behind it and a mark that depends on one of them disappears on the other.

A current filename is the fix for a stubborn cache. Icons live in a store of their own, which a hard refresh does not always clear, so every listing that has already visited the site is holding the old one. Replacing the file in place leaves the URL unchanged and the browser with no reason to fetch again. Give the new icon a new name, or add a version to the query string, and update the link tags in the same commit — the browser is then looking at a URL it has never stored.

The head, one tag at a time

The set only exists once the page names it. A browser with no declaration at all will ask for /favicon.ico by name and use whatever it finds there, which is why a site with no icon tags often still shows something in the tab — usually a file nobody has looked at in years. Naming the sizes explicitly is what makes the page show the mark you chose rather than the one it found.

A rel="icon" tag carries a type and a size, and the size is what lets a browser pick without downloading anything. Declaring the 16 and the 32 as separate PNGs gives it both to choose from; declaring a single file leaves it to scale one, which is exactly the downscaling the small mark was drawn to avoid. The Apple touch icon is a rel="apple-touch-icon" with no size attribute, because iOS asks for the 180-pixel file by convention rather than by negotiation.

The rest of the head matters less than the icon and gets more attention than it deserves. A theme-colour meta tag tints the browser's own chrome on mobile, which is worth having if the site has a colour and adds a line otherwise. A multi-resolution .ico is a container for clients that predate PNG favicons, and every current browser reads the PNG files happily, so a site that only has to work today can leave it out and still look right everywhere.

When the icon has to be an install

A web app manifest is a separate file that describes the site to the operating system, and the icons inside it are what a home-screen entry, a launcher shortcut and an install splash screen draw. Those are declared in the manifest rather than in the head, with a purpose field saying whether the file is a normal icon or a maskable one — and the distinction matters, because Android applies its own shape to a maskable icon and crops whatever falls outside it.

Two files cover it in practice: a 192-pixel icon for the launcher entry and a 512-pixel one for the splash and store listings. Both should fill their square edge to edge with the background colour rather than sitting on transparency, since the transparent margin becomes a coloured rim the moment the launcher crops to its shape. If a square source is not what you have, the Image Resizer will cut one, and a JPEG logo becomes a PNG that can hold an alpha channel in the Image Converter.

Reference

Which file each surface asks for

FilePixel sizeWhere it is usedNotes
favicon.ico16, 32 and 48 inside one fileThe fallback a browser asks for by name when the page declares nothingThe only file on this list that can hold several sizes at once, which is why Windows shortcuts and old clients reach for it first.
favicon-16x16.png16 × 16The browser tabThe smallest file here, and the one that matters most. A mark that reads at this size reads everywhere.
favicon-32x32.png32 × 32The taskbar, and some bookmarks menusOften the size a desktop browser paints, because it scales the tab icon to the display.
favicon-48x48.png48 × 48Windows shortcuts and site tilesWorth shipping for a browser running at 125% or 150% scaling.
apple-touch-icon.png180 × 180The iOS home screeniOS rounds the corners itself, so ship it square. It also drops transparency and paints its own background.
android-chrome-192x192.png192 × 192The Android home screenWhat an installed web app uses for its launcher entry.
android-chrome-512x512.png512 × 512The install splash screen and store listingsThe file large displays and app stores read, and the best source for anything you re-cut later.
maskable_icon_x512.png512 × 512Android adaptive iconsAndroid crops this to the launcher's shape, so the important part of the mark has to sit inside the middle 80%. Fill the whole square behind it.
safari-pinned-tab.svgVectorThe Safari pinned tabSafari uses it as a mask: the shape is kept and the colour is thrown away, so it has to read as a flat silhouette.

The first row is a fallback rather than a target — a browser reaches for it only when your page names nothing better. Everything under it has to be declared, and those are the rows that decide how the icon looks, because they are the sizes a person sees without going looking for them.

Most of this list can be left out. Drop the 48 px file on a site nobody will save as a shortcut, leave the maskable icon until you have an installable app, and skip the pinned tab unless Safari visitors matter. The 16, the 32 and the 180 are the ones to keep.

The maskable row catches people out. Android does not draw it as a square — the launcher applies a shape of its own and crops away what falls outside it. The safe zone is the middle 80%, so a wordmark that reaches the edges of the file loses its first and last letters on a phone. Draw the mark smaller, fill the square with your background colour, and the crop stops mattering.

A vector earns its place in the pinned tab and nowhere else on this list. Safari reads that file as a mask: it keeps the shape and throws the colour away, so a flat silhouette reads cleanly and a detailed logo turns into a dark blob. The other files are read by iOS, Android and the app stores, which all want a raster square. It is also why a new filename beats an overwrite — browsers keep favicons in a cache of their own, and hold them long after the page has been fetched again.

Questions

Icons, answered plainly

My 16 px icon is an unreadable smudge

That is the source, not the tool. At 16 px a browser has 256 pixels to work with, so any stroke thinner than a pixel disappears and any gradient averages out to flat grey. The fix is a second, simpler mark drawn for small sizes: one bold shape, high contrast against its background, nothing inside it. Keep the detailed artwork for the 512 px file and the install splash, where there is room for it.

Which of these files do I actually need?

If you want one file, take the 32 px PNG and point a single rel="icon" tag at it. If you want the set, take all six: the 16 and 32 cover tabs and bookmarks, the 48 covers Windows shortcuts, the 180 is the Apple touch icon, and the 192 and 512 are what Android and installable web apps ask for. The 512 is also the one to hand to a store listing.

Do the icons have to be square?

Yes — a favicon is drawn into a square box, so a non-square source has to be either stretched or cropped, and stretching is never the answer. This tool takes the largest centred square it can and crops to it, then tells you the ratio it used. If the important part of your image is not in the middle, square it up first and drop that in instead.

What happens to the image while the set is being built?

The picture is decoded in this tab, drawn six times onto six canvases, and encoded as PNG. There is no upload step and no temporary folder, so a 2000 px source is turned into icons as fast as your machine can resample it. The decoded copy is held in memory for as long as the page is open, and gone when you close it.

Should I use a single .ico file instead?

A multi-resolution .ico is a 1990s container holding several sizes in one file, and it exists mainly for old Internet Explorer and for Windows shortcuts. Every current browser reads PNG favicons happily. If you do need an .ico, the 32 px PNG here is the source to build it from.

Why is my new favicon still showing the old one?

Favicon caching is the usual answer, and it is stubborn in a way page caching is not: the icon lives in a store of its own, which a hard refresh does not always clear and some builds of Chrome never clear. Replacing the file in place is what leaves you stuck, because the URL has not changed and the browser sees no reason to fetch it again. Save the new icon under a new filename and update the link tags, or add a query string such as ?v=2 to the href. Either way the browser is looking at a URL it has not stored.

Can I put my logo on a transparent background?

For the tab icon, transparency works: the browser paints the tab strip behind it, so a cut-out mark sits on a light theme and a dark one without help. For the Apple touch icon it is the wrong choice. iOS discards the alpha channel and drops the mark onto a background of its own, so the cut-out you designed arrives as a solid block in a colour you did not pick. The maskable Android icon has a version of the same problem, because the launcher crops it to a shape and a transparent margin becomes a coloured rim. Give both of those a square filled edge to edge.

Does Google show my favicon in search results?

It does, beside the site name, and it fetches that icon separately from the tab one. Google asks for a square whose side is a multiple of 48 px, declared with a rel="icon" link in the head, so the 192 px file from this page is the one to point at it. The fetch also has to be allowed: if robots.txt keeps Googlebot out of the folder holding the icon, search results fall back to a generic globe even though the tab looks right.