Favicon Generator - Create favicon.ico and PWA Icons

Turn one image into a complete favicon set: a multi-size favicon.ico, PNG icons, an Apple touch icon, a web manifest, and the HTML to paste into your head. Everything is built in your browser.

What This Favicon Generator Produces

A favicon stopped being a single file a long time ago. A browser tab wants 16 pixels, a retina tab wants 32, a Windows desktop shortcut wants 48, an iPhone home screen wants a 180 pixel PNG, and an installable web app wants 192 and 512 pixel icons declared in a manifest. This tool takes one source image and emits all of it at once: favicon.ico, favicon-16x16.png, favicon-32x32.png, apple-touch-icon.png, android-chrome-192x192.png, android-chrome-512x512.png, and a site.webmanifest, bundled into a ZIP alongside the four lines of HTML that wire them up. The .ico is built by hand rather than delegated to a converter. ICO is a container format, not a codec: a six byte directory header records how many images are inside, then one sixteen byte entry per image records its width, height, byte length, and absolute offset, and the image payloads follow. Every browser in current use accepts PNG data inside those payloads, so this generator writes PNGs rather than the legacy BMP/DIB encoding with its bottom-up row order and separate one bit transparency mask. Three images go in — 16, 32, and 48 pixels — so Windows and older browsers can pick the size they need instead of scaling one badly. One quirk of the format is worth knowing if you ever inspect the bytes: width and height each occupy a single byte, so 256 is written as zero and nothing larger can be expressed at all. Scaling quality gets the same attention. Shrinking a 1024 pixel logo straight down to 16 pixels in one drawImage call asks the browser's bilinear filter to summarise a 64 by 64 block from a 2 by 2 sample, discarding almost every source pixel and producing the speckled mess that hand-rolled favicons are known for. This tool halves the image repeatedly instead, never reducing by more than half in a single step, so each pass averages a full neighbourhood and fine detail survives all the way down to 16 pixels. Corner radius and padding are applied as part of that render rather than after it, which keeps the rounded edge anti-aliased at every size.

Why Generate a Full Icon Set

Shipping one 32 pixel PNG and calling it done leaves visible gaps: a blurry pinned tab, a black-boxed icon on an iPhone, and a browser install prompt that never appears because the manifest has no icons.

Cover every surface at once — tabs, bookmarks, Windows shortcuts, iOS home screens, Android install prompts, and PWA splash screens
Get a real multi-resolution favicon.ico with 16, 32, and 48 pixel images inside, not a renamed PNG that some tooling rejects
Avoid the black square iOS puts behind transparent Apple touch icons, because that file is flattened onto a colour you choose
Copy working HTML and a valid site.webmanifest instead of hunting down which link tags and manifest fields are still current

How to Make a Favicon

Four steps, all running locally in your browser. Your source image is never uploaded to a server.

1

Upload a PNG, JPG, WebP, or SVG. A square source works best; anything else is centred rather than stretched

2

Type your site name for the manifest, then choose a transparent or solid background and adjust corner radius and padding while the tab and home screen previews update

3

Generate the package — the ICO is assembled byte by byte and every PNG is stepped down to size for maximum sharpness

4

Download the ZIP, unzip it into your site's public root, and paste the four link tags into your HTML head

Frequently Asked Questions

At least 512 by 512 pixels, and square if you can manage it. 512 is the largest icon in the package, so a smaller source has to be enlarged and will look soft on Android install screens and PWA splash screens. A non-square image is scaled to fit and centred with transparent or coloured space on the short sides, never stretched. An SVG is the ideal input because it is rasterised at full working resolution first, so there is no upper limit on how sharp the large icons can be.
Because different surfaces ask for different sizes and letting each one scale a single image produces worse results than shipping the right one. 16 pixels is the standard browser tab and bookmark bar, 32 is the retina tab and the Windows taskbar, and 48 is the Windows desktop shortcut. The ICO directory lets the operating system pick the exact match rather than resampling. Sizes above 48 are deliberately left out — every surface that wants more reads the PNG or manifest icons instead, and padding the .ico with a 256 pixel image only makes the file larger for no benefit.
Because iOS does not honour alpha in apple-touch-icon.png. Instead of compositing your icon over the wallpaper, it fills transparent pixels with black, which turns a nice transparent logo into a dark square on the home screen. This generator sidesteps that by flattening only that one file onto an opaque colour — white by default, or whatever colour you pick. Every other output keeps its transparency, so your browser tab icon still blends with light and dark themes.
Partly. Browsers request /favicon.ico from your site root automatically even with no HTML at all, so that one works unannounced. Nothing else does. The PNG link tags let modern browsers pick a crisp size without decoding the ICO, the apple-touch-icon tag is how iOS finds the home screen icon, and the manifest link is what makes Chrome and Edge treat your site as installable. Paste all four lines and every surface is covered.
It is the JSON file that turns a website into something installable. It carries your site name, the short name shown under the home screen icon, the list of icons with their sizes, a theme colour for the browser chrome, a background colour for the splash screen, and a display mode. Chrome and Edge will not offer an install prompt without one. The generated file uses standalone display and takes its colours from your background choice; edit it freely afterwards to add a start_url, scope, or orientation.
Sixteen pixels is roughly the size of a single character of text, and detail that reads clearly at 512 simply has nowhere to go. This tool does the resampling as well as it can be done — halving repeatedly so no step throws away more than three quarters of its input — but the real fix is design, not scaling. Thin outlines, gradients, small text, and anything with more than two or three shapes will not survive. If your full logo is complex, use a single letter or the most distinctive mark from it, and add 10 to 15 percent padding so it does not touch the edges.
Yes, and it usually gives the best result. One caveat: an SVG with only a viewBox has no intrinsic pixel size, and browsers rasterise those at a 300 by 150 default, which would destroy quality before any scaling begins. This tool reads the viewBox and rewrites explicit dimensions before rasterising, so the working copy starts at full resolution. SVGs that reference external fonts or remote images will lose those pieces, since nothing outside the file is fetched — flatten text to paths first.
Unzip everything into the public root of your site — the directory served at your domain's top level, which is public/ in Next.js and Vite, static/ in Hugo and SvelteKit, and the web root for a plain static host. The paths in the HTML snippet all start with a slash, so they resolve there without edits. Nothing is uploaded at any point: your image is decoded, resized, encoded, and zipped entirely in your browser, so unreleased branding never leaves your machine.

More Image Tools

Explore other powerful tools for your image editing needs