Favicon and Web App Manifest Generator

Turn one logo into a favicon set, a maskable icon, an Apple touch icon, a web manifest and the head tags that link them.

How to use

What it checks and how it works

The tool draws your picture onto canvases in your browser and builds favicon.ico holding 16, 32 and 48 pixel PNG images (an ICO file can store a PNG image whole, as the ICO format description explains), PNG icons at 16, 32, 192 and 512 pixels, a 512 pixel maskable icon, a 180 pixel Apple touch icon, a manifest.webmanifest file, and the link tags for the head. The files are zipped with fflate, and nothing is uploaded. It follows these sources. Google asks for a square favicon of at least 8 x 8 pixels and recommends larger than 48 x 48. web.dev says the important content of a maskable icon must sit inside a circle in the centre whose radius is 40 percent of the icon width, so the maskable file scales your picture into that circle on your background colour. MDN lists the members and purpose values of the manifest icons. Apple's guidance names 180 x 180 pixels for the retina iPhone touch icon. Limits: a picture smaller than 512 pixels is scaled up and looks soft, and a picture that is not square is centred with space around it. The browser rasterizes an SVG. Whether a browser offers to install the site depends on that browser's own install criteria, which this tool does not check.

What size should my favicon be?

Google requires a square favicon of at least 8 x 8 pixels and recommends larger than 48 x 48. The tool also builds 192 and 512 pixel icons for the manifest.

What is a maskable icon?

An icon whose artwork sits inside a central safe zone so a device can crop it to a circle, square or other shape. web.dev defines the safe zone as a circle with a radius of 40 percent of the width.

Is my logo uploaded?

No. The picture is read and resized in your browser and the zip is built there, so nothing is sent to a server.

Sources

Related tools

Privacy

Runs in your browser; nothing is uploaded. The interactive tool needs JavaScript.