<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kutu</title>
    <description>The latest articles on DEV Community by Kutu (@kutu).</description>
    <link>https://dev.to/kutu</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F960490%2Fbb824d3d-5a6b-4c2a-becc-d74a04970220.jpeg</url>
      <title>DEV Community: Kutu</title>
      <link>https://dev.to/kutu</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kutu"/>
    <language>en</language>
    <item>
      <title>How to create a favicon and not die trying</title>
      <dc:creator>Kutu</dc:creator>
      <pubDate>Sat, 18 Mar 2023 14:15:25 +0000</pubDate>
      <link>https://dev.to/kutu/how-to-create-a-favicon-and-not-die-trying-4k2o</link>
      <guid>https://dev.to/kutu/how-to-create-a-favicon-and-not-die-trying-4k2o</guid>
      <description>&lt;h1&gt;
  
  
  Where to start?
&lt;/h1&gt;

&lt;p&gt;First you need your icon in SVG without background, this will simply a lot of things after. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: If you want to see that your website has a good icon compability you can use the &lt;a href="https://realfavicongenerator.net/favicon_checker"&gt;Real Favicon Generator Checker&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  HTML Favicon
&lt;/h2&gt;

&lt;p&gt;First link your SVG favicon&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"icon"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"image/svg+xml"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"./favicon.svg"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To handle old web browsers that aren't compatible with SVG you can have a ICO favicon with 16x16, 32x32 and 48x48 resolutions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"icon"&lt;/span&gt; &lt;span class="na"&gt;type=&lt;/span&gt;&lt;span class="s"&gt;"image/x-icon"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"./favicon.ico"&lt;/span&gt; &lt;span class="na"&gt;sizes=&lt;/span&gt;&lt;span class="s"&gt;"any"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use &lt;code&gt;sizes="any"&lt;/code&gt; to avoid Chrome to ICO insead of the SVG.&lt;/p&gt;

&lt;h2&gt;
  
  
  Android favicons and PWAs
&lt;/h2&gt;

&lt;p&gt;PWAs and android shortcut icons use two resolutions 192x192 and 512x512. They are defined in the &lt;code&gt;manifest.webmanifest&lt;/code&gt; that you should link in your HTML.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"manifest"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"./manifest.webmanifest"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;manifest.webmanifest&lt;/code&gt; is highly configurable but a simple config only for the high res icons looks like this. See &lt;a href="https://developer.mozilla.org/en-US/docs/Web/Manifest"&gt;MDN Web manifest&lt;/a&gt; for more info.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"icons"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./manifest-192.png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"sizes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"192x192"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"image/png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"purpose"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"any maskable"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"src"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"./mainfest-512.png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"sizes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"512x512"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"image/png"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nl"&gt;"purpose"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"any maskable"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Note: &lt;code&gt;manifest-192.png&lt;/code&gt; and &lt;code&gt;manifest-512.png&lt;/code&gt; can have a background to make them look better in the Android shortcut icon.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Apple Touch Icon
&lt;/h2&gt;

&lt;p&gt;The Touch icon for Apple devices should have 180x180 resolution, background and a 20px margin to maximize compatibity and make it look good.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"apple-touch-icon"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"./touch-icon-180.png"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Safari Mask Icon
&lt;/h2&gt;

&lt;p&gt;Safari sometimes use the Touch icon but the tab favicon and favorites it uses the shape for a only-black SVG image with a custom color, so you need to have your SVG icon only in black and transparent and link to your web this way.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"mask-icon"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"./mask-icon.svg"&lt;/span&gt; &lt;span class="na"&gt;color=&lt;/span&gt;&lt;span class="s"&gt;"#ffffff"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Windows 8/8.1/10 and Non-Chromium Edge
&lt;/h2&gt;

&lt;p&gt;The tiles shortcuts in Windows 8/8.1/10 have its own configuration file called &lt;code&gt;browserconfig.xml&lt;/code&gt; and, in the same way you do it with the &lt;code&gt;manifest.webmanifest&lt;/code&gt; you should link it in your HTML this way.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"msapplication-config"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"./browserconfig.xml"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Windows Tiles needs 4 resolutions to work correctly 70x70, 150x150, 310x150 and 310x310 but Microsoft recommends to use 126x126, 270x270, 558x270 and  558x558 to maxime compatiblity with high resolution screens. A basic &lt;code&gt;browserconfig.xml&lt;/code&gt; configuration only for the high res icons looks like this. I haven't found any official docs about this config file unfortunately.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight xml"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;browserconfig&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;msapplication&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;tile&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;square70x70logo&lt;/span&gt;   &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"./tiles-126.png"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;square150x150logo&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"./tiles-270.png"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;wide310x150logo&lt;/span&gt;   &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"./tiles-558x270.png"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;square310x310logo&lt;/span&gt; &lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"./tiles-558.png"&lt;/span&gt;&lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;TileColor&amp;gt;&lt;/span&gt;#000000&lt;span class="nt"&gt;&amp;lt;/TileColor&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/tile&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/msapplication&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/browserconfig&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;em&gt;Note: You can put any color you want to the &lt;code&gt;&amp;lt;TileColor&amp;gt;&lt;/code&gt; tag if plain black looks bad with your logo.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Automatize all with a script
&lt;/h1&gt;

&lt;p&gt;As you can see the are plenty of images that you will need (even more that I don't going to talk about because are deprecated). To spend less time making the favicon I writed this simple Bash script using &lt;code&gt;inkscape cli&lt;/code&gt; and &lt;code&gt;imagemagick&lt;/code&gt;. See it in this &lt;a href="https://gist.github.com/kutu-dev/e18b288065c640d9fe12d213e68934ea"&gt;GitHub Gist&lt;/a&gt;. This script should be in the same directory of your SVG favicon, it will create all the needed favicons and the ones that are icons for apps (PWA, Android, Apple Touch, Windows Tiles, etc) will be centered with a black background (you can change the background color for anything you want).&lt;/p&gt;

&lt;h1&gt;
  
  
  Thanks for reading!
&lt;/h1&gt;

&lt;p&gt;This is my first time writing and article of this type, also I am not a native english speaker so any correction is welcome.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>tutorial</category>
      <category>html</category>
    </item>
  </channel>
</rss>
