1 of 75

2 of 75

3 of 75

4 of 75

5 of 75

6 of 75

7 of 75

8 of 75

9 of 75

10 of 75

favicon.ico

Favorites icon

https://ruthlessray.wordpress.com/2013/09/02/inventing-favicon-ico/

11 of 75

The Past, Present, and Future of Favicons

TIGER OAKES

tigeroakes.com @Not_Woods

12 of 75

@Not_Woods

@Not_Woods

13 of 75

The Past

14 of 75

@Not_Woods

15 of 75

The Past

@Not_Woods

<link rel="icon" type="image/png"href="/favicon.png" sizes="16x16">

index.html

16 of 75

The Past

@Not_Woods

<link rel="shortcut icon" type="image/png"href="/favicon.png" sizes="16x16">

index.html

17 of 75

The Past

@Not_Woods

18 of 75

@Not_Woods

19 of 75

@Not_Woods

20 of 75

@Not_Woods

21 of 75

The Past

@Not_Woods

<link rel="apple-touch-icon"href="/ios-icon.png" sizes="57x57">

index.html

22 of 75

The Present

THE PRESENT

23 of 75

The Present

@Not_Woods

manifest.webmanifest

24 of 75

The Present

@Not_Woods

{

"short_name": "Web app",

"icons": [

{

"type": "image/png",

"src": "/images/icons-192.png",

"sizes": "192x192"

}

]

}

manifest.webmanifest

25 of 75

The Past

@Not_Woods

<link rel="manifest"href="/manifest.webmanifest">

index.html

26 of 75

The Present

@Not_Woods

16x16

27 of 75

The Present

@Not_Woods

32x32

16x16

48x48

28 of 75

The Present

@Not_Woods

32x32

16x16

48x48

57x57

29 of 75

The Present

@Not_Woods

32x32

16x16

72x72

114x114

48x48

57x57

128x128

30 of 75

The Present

@Not_Woods

32x32

16x16

72x72

114x114

48x48

57x57

128x128

270x270

558x558

31 of 75

32 of 75

Vector icons

33 of 75

The Future: Vector icons

@Not_Woods

34 of 75

@Not_Woods

<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg">

<rect width="100" height="100" fill="red" />

</svg>

favicon.svg

The Future: Vector icons

35 of 75

@Not_Woods

<link rel="icon" type="image/svg+xml"href="/favicon.svg" sizes="any">

index.html

The Future: Vector icons

36 of 75

@Not_Woods

{

"short_name": "Web app",

"icons": [

{

"type": "image/svg+xml",

"src": "/icon.svg",

"sizes": "any"

}

]

}

manifest.webmanifest

The Future: Vector icons

37 of 75

@Not_Woods

The Future: Vector icons

38 of 75

@Not_Woods

<svg width="100" height="100"xmlns="http://www.w3.org/2000/svg">

<style>

rect { fill: red; }� </style>���

<rect width="100" height="100" />

</svg>

favicon.svg

The Future: Vector icons

39 of 75

@Not_Woods

<svg width="100" height="100"xmlns="http://www.w3.org/2000/svg">

<style>

rect { fill: red; }

@media (prefers-color-scheme: dark) {

rect { fill: darkred; }

}

</style>

<rect width="100" height="100" />

</svg>

favicon.svg

The Future: Vector icons

40 of 75

@Not_Woods

@media (prefers-color-scheme: light) {

.icon { fill: yellow; }

}

41 of 75

@Not_Woods

@media (prefers-color-scheme: dark) {

.icon { fill: gray; }

}

42 of 75

@Not_Woods

@media (prefers-contrast: high) {

.icon { fill: cyan; }

}

43 of 75

@Not_Woods

@media (max-width: 48px) {

.icon-caption { display: hidden; }

}

The Future: Vector icons

44 of 75

@Not_Woods

<link rel="icon" href="icon-small.svg" sizes="48x48">

<link rel="icon" href="icon-large.svg" sizes="any">

The Future: Vector icons

45 of 75

New icon �formats

46 of 75

Maskable icons

@Not_Woods

The Future: New icon formats

47 of 75

@Not_Woods

The Future: New icon formats

48 of 75

@Not_Woods

Samsung

Pixel

LG

The Future: New icon formats

49 of 75

@Not_Woods

The Future: New icon formats

50 of 75

@Not_Woods

The Future: New icon formats

Samsung

Pixel

LG

51 of 75

@Not_Woods

The Future: New icon formats

Samsung

Pixel

LG

52 of 75

@Not_Woods

/iOS

The Future: New icon formats

Samsung

Pixel

LG

53 of 75

Monochrome icons

@Not_Woods

The Future: New icon formats

54 of 75

@Not_Woods

55 of 75

@Not_Woods

The Future: New icon formats

56 of 75

@Not_Woods

The Future: New icon formats

57 of 75

@Not_Woods

The Future: New icon formats

58 of 75

@Not_Woods

The Future: New icon formats

59 of 75

@Not_Woods

The Future: New icon formats

60 of 75

@Not_Woods

Windows

The Future: New icon formats

61 of 75

@Not_Woods

{

"short_name": "Web app",

"icons": [

{

"type": "image/svg+xml",

"src": "default.svg",

"sizes": "any",

"purpose": "any"

},� ...

manifest.webmanifest

The Future: New icon formats

62 of 75

@Not_Woods

...

{

"type": "image/svg+xml",

"src": "maskable.svg",

"sizes": "any",

"purpose": "maskable"

},� ...

manifest.webmanifest

The Future: New icon formats

63 of 75

@Not_Woods

...

{

"type": "image/svg+xml",

"src": "monochrome.svg",

"sizes": "any",

"purpose": "monochrome"

}

]

}

manifest.webmanifest

The Future: New icon formats

64 of 75

@Not_Woods

https://maskable.app

https://monochrome.fyi

https://maskable.app/editor

The Future: New icon formats

65 of 75

https://maskable.app

@Not_Woods

The Future: New icon formats

66 of 75

https://maskable.app/editor

@Not_Woods

The Future: New icon formats

67 of 75

https://monochrome.fyi

@Not_Woods

The Future: New icon formats

68 of 75

Image�Resource

69 of 75

The Future: ImageResource

@Not_Woods

{

"icons": [

{

"type": "image/svg+xml",

"src": "/images/icon.svg",

"sizes": "192x192"

}

]

}

manifest.webmanifest

70 of 75

@Not_Woods

navigator.serviceWorker.ready.then(async (swReg) => {

const bgFetch = await swReg.backgroundFetch.fetch(� 'my-fetch', � ['/big-file.mp4'], {

title: 'Large video download',

icons: [{

type: 'image/png',

src: '/video-thumbnail.png',

sizes: '300x300',

}],

downloadTotal: 60 * 1024 * 1024,

}� );

});

script.js

The Future: ImageResource

71 of 75

@Not_Woods

72 of 75

What icons should I use today?

@Not_Woods

<link rel="icon" type="image/svg+xml"href="/favicon.svg" sizes="any">

index.html

73 of 75

What icons should I use today?

@Not_Woods

<link rel="icon" type="image/svg+xml"href="/favicon.svg" sizes="any">

<link rel="icon" type="image/png"href="/big.png" sizes="512x512">

<link rel="icon" type="image/png"href="/small.png" sizes="48x48">

index.html

74 of 75

What icons should I use today?

@Not_Woods

{

"type": "image/svg+xml",

"src": "default.svg",

"purpose": "any"

}

{

"type": "image/svg+xml",

"src": "maskable.svg",

"purpose": "maskable"

}

{

"type": "image/svg+xml",

"src": "monochrome.svg",

"purpose": "monochrome"

}

manifest.webmanifest

75 of 75

Thanks for listening!

@Not_Woods

tigeroakes.com��maskable.app�monochrome.fyi