Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[gatsby-plugin-manifest] Generate a 32x32 favicon instead of generating from first manifest icon #23077

Merged
merged 7 commits into from
Apr 21, 2020

Conversation

cycleseven
Copy link
Contributor

Description

gatsby-plugin-manifest uses the first of the configured manifest icons to generate a favicon. This isn't necessarily intuitive, and means a 48x48 favicon is used by default, which is probably not the ideal size.

This PR decouples the favicon size from the configured manifest icons, and generates a 32x32 icon instead.

Some caveats

  • This would technically introduce a breaking change: in "hybrid" mode, users can currently control the generated favicon size using the first element of icons. This change takes that control away.
  • This PR introduces an edge case: a user could configure a path in their icons config that clashes with the fixed favicon path. As it stands, the favicon generation would overwrite the one from icons in that edge case. It's a slim chance this would have any impact imo: someone would have to want a non-32x32 icon called favicon-32x32.png, which would be a bit weird 😄
  • A 32x32 PNG alone is probably still not the most widely compatible favicon setup. But it should be an improvement over 48x48. Users who want deeper control over favicons can still opt-out of gatsby-plugin-manifest's favicon generation as before.

See the related issue for more info and discussion.

Documentation

The README.md for gatsby-plugin-manifest is slightly tweaked to give more details about the generated favicon format.

Related Issues

Fixes #19899

@cycleseven cycleseven requested review from a team as code owners April 13, 2020 20:06
@cycleseven cycleseven changed the title Decouple favicons from manifest icons [gatsby-plugin-manifest] Generate a 32x32 favicon instead of generating from first manifest icon Apr 13, 2020
laurieontech
laurieontech previously approved these changes Apr 14, 2020
Copy link
Contributor

@laurieontech laurieontech left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good from a docs perspective.

Copy link
Contributor

@moonmeister moonmeister left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good. That main function is sure getting hard to follow(not your fault). One day I'll get annoyed with it and clean up the code. The only thing I'm curious about is if there is a test for disabling the favicon, and confirming it doesn't get written..this should have already existed. Can you please check if it exists and and if not, please add that test (if you need help or just want me to do so just let me know). Thanks for the good work!

packages/gatsby-plugin-manifest/src/common.js Show resolved Hide resolved
packages/gatsby-plugin-manifest/src/gatsby-node.js Outdated Show resolved Hide resolved
Co-Authored-By: Alex Moon <moonmeister@users.noreply.github.com>
@cycleseven
Copy link
Contributor Author

cycleseven commented Apr 15, 2020

@moonmeister

The only thing I'm curious about is if there is a test for disabling the favicon, and confirming it doesn't get written..this should have already existed. Can you please check if it exists and and if not, please add that test (if you need help or just want me to do so just let me know)

Let me get back to you on this part.

There are already tests to ensure gatsby-ssr correctly includes/excludes the <link> here... but the plugin could use something similar on the gatsby-node side now, to show we don't generate an unnecessary PNG when include_favicon is false.

My first idea on how to test that was to assert that sharp is called the correct number of times with the expected parameters (ie. that a sharp call for the favicon is triggered by default, and doesn't happen when include_favicon is false).

But then I saw there was already at least one test that should cover the positive case, like this one. Which raises the question of why that didn't fail so far. In theory, I'd expect my code changes to modify the number of calls to sharp under that plugin config.

Since the content digest function is mocked to return a constant, and the icon generation is skipped if the content digest is already cached, then it actually seems like some existing tests will be asserting expect(sharp).toHaveBeenCalledTimes(n) for some n that doesn't match the real number of sharp calls outside the test environment 🤔 could be misunderstanding so far though.

Will try to take a closer look at this later in the week to figure out what's going on here and how best to add those tests 🤞

@moonmeister
Copy link
Contributor

Really good work on tests and everything. Thanks!

@cycleseven
Copy link
Contributor Author

Failing CI check, guess that change to the tests wasn't as safe as I thought...? 😞 can't see what the error in the Cloud Tests is from my end though. @moonmeister if you can let me know what exactly failed, I'm happy to finish this off from my end. Might be getting into poor feedback loop territory here though: also happy to hand this last part over to you if you're up for it?

@moonmeister
Copy link
Contributor

That page isn't loading for me so not sure I can help. We may have to wait for a Gatsby Core team member to give us the details. Given everything passed on circle it might just be fluke. But, some hash algorithms are hardware dependent. Meaning it's possible whatever hardware is running in the cloud build is creating a different hash.

@cycleseven
Copy link
Contributor Author

cycleseven commented Apr 18, 2020

But, some hash algorithms are hardware dependent. Meaning it's possible whatever hardware is running in the cloud build is creating a different hash.

I guess I'd expect other tests that call the real createContentDigest to suffer from the same problem if that was it 🤔 but that does make sense in theory yeah, I guess there was a good reason to mock the function in the first place.

If that's the issue, it should work equally well to mock createContentDigest with an identity/stringify function instead.

jest.mock(`gatsby-core-utils`, () => {
  return {
    createContentDigest: jest.fn(x => `${x}`),
  }
})

Still outputs a unique value for each unique input, without depending on the real hash algo... so would tick the requirements for these tests, I think.

I'll wait on a Gatsby Core member to see what's up with that CI failure before moving forward though, might be counterproductive to try and fix this blind. Will keep my eye out for updates here 🤞 thanks for all the help so far.

@pvdz
Copy link
Contributor

pvdz commented Apr 20, 2020

(Fwiw; The Cloud tests failure was unrelated to this PR, caused by npm noise in the CLI which triggered a non-zero exit by Gatsby. The noise is unrelated to the test. All tests passed.)

@moonmeister
Copy link
Contributor

Awesome! well, then I think we're just waiting for @gatsbyjs/core team member to review and we should be good.

@pvdz
Copy link
Contributor

pvdz commented Apr 20, 2020

Where do we find one of those?

@pvdz
Copy link
Contributor

pvdz commented Apr 20, 2020

(Kidding. I'll make a superficial pass but I have zero insight into this plugin so somebody else will have to do the semantics)

@moonmeister
Copy link
Contributor

(Kidding. I'll make a superficial pass but I have zero insight into this plugin so somebody else will have to do the semantics)

Well hopefully that was what my review was good for. I haven't actually tested the new plugin manually, but if tests are passing and @cycleseven has seen it work irl then we should be good.

@pvdz
Copy link
Contributor

pvdz commented Apr 20, 2020

Ok, fair enough and well met :)

Code looks good. One question remaining for me is whether this is backwards compat breaking. Before it was taking the first image of the set. What happens to people that bump the package without changing their config?

@cycleseven
Copy link
Contributor Author

@pvdz thanks for taking a look at this.

One question remaining for me is whether this is backwards compat breaking. Before it was taking the first image of the set. What happens to people that bump the package without changing their config?

So first it's worth making it clear the only possible breaking change here would be that the generated favicon resolution changes: when we say "first image of the set", that set configures the generated sizes, but it's from a single input image. Nobody can end up with the wrong favicon after this. Probably these changes will be completely unnoticeable for most eg. Chrome seems really good at handling different sizes identically.

But yeah as mentioned in the original description above, there's technically a breaking change for what I assume would be a small minority of users who might be taking advantage of an undocumented side effect of the config to generate a non-standard favicon size intentionally. To break this down:

Automatic mode

These users completely leave it up to the plugin to generate appropriate sizes for both manifest icons + favicon. For those users, this should just be a transparent browser compat improvement.

I assume this is the majority of users.

Manual mode

The plugin doesn't generate a favicon for these users, and it never did. No change here.

Hybrid mode

These users manually define the sizes they want for the manifest. Favicon is just an opt-in or opt-out, the docs make no promise about what size the favicon is or where that size comes from. But it's possible that some users a) have understood that the plugin uses the first manifest icon size for the favicon by experimenting or reading the source, b) intentionally want to control that size and c) want that size to be something other than 32x32.

From my (non-exhaustive) research, 32 really does look like the best supported size if you can only pick one, so it's hard to imagine this being a noticeable or bad change even for this group of users. But it's true that they will lose control that they technically had before, so that's a breaking change for sure.

I think we'd want to eventually make that breaking change in any case. But I'm also happy to submit a non-breaking version of this that only affects "automatic" mode to tide us over until a major version...? Up to you guys, let me know 👍

@moonmeister

@cycleseven has seen it work irl then we should be good

Yeah, I've tested this out with my real Gatsby project using gatsby-dev-cli, with both my original config, as well as just leaning on automatic mode. I assume this is enough? Give me a shout if you have something more in mind though.

@moonmeister
Copy link
Contributor

Thanks for the details on the dev experience change. I'm comfortable pushing this as a bug fix. It doesn't require any config change and doesn't really add any features. If someone out there was hacking private implementation details rather than just opening an issue, is doubtful, and not supported.

That testing should be plenty.

Copy link
Contributor

@pvdz pvdz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the clarification :) And for the PR!

@pvdz pvdz merged commit 8cfe41b into gatsbyjs:master Apr 21, 2020
@gatsbot
Copy link

gatsbot bot commented Apr 21, 2020

Holy buckets, @cycleseven — we just merged your PR to Gatsby! 💪💜

Gatsby is built by awesome people like you. Let us say “thanks” in two ways:

  1. We’d like to send you some Gatsby swag. As a token of our appreciation, you can go to the Gatsby Swag Store and log in with your GitHub account to get a coupon code good for one free piece of swag. We’ve got Gatsby t-shirts, stickers, hats, scrunchies, and much more. (You can also unlock even more free swag with 5 contributions — wink wink nudge nudge.) See gatsby.dev/swag for details.
  2. We just invited you to join the Gatsby organization on GitHub. This will add you to our team of maintainers. Accept the invite by visiting https://github.com/orgs/gatsbyjs/invitation. By joining the team, you’ll be able to label issues, review pull requests, and merge approved pull requests.

If there’s anything we can do to help, please don’t hesitate to reach out to us: tweet at @gatsbyjs and we’ll come a-runnin’.

Thanks again!

@moonmeister
Copy link
Contributor

@cycleseven Thanks again for the work and the PR!

@cycleseven
Copy link
Contributor Author

@moonmeister @laurieontech @pvdz thank you all for giving your time to help get this in 🎉

@pieh
Copy link
Contributor

pieh commented Apr 21, 2020

Published gatsby-plugin-manifest@2.3.6

mxstbr added a commit that referenced this pull request Apr 22, 2020
* fix(gatsby): Throw error on default export in gatsby-ssr/brows… (#23133)

* fix: Handle default export case

* heh

* fix comment

* chore(release): Publish

 - gatsby-cli@2.11.12
 - gatsby-plugin-sitemap@2.3.5
 - gatsby-recipes@0.0.9
 - gatsby-remark-prismjs@3.4.4
 - gatsby-theme-blog-core@1.3.27
 - gatsby-theme-blog@1.4.27
 - gatsby-theme-notes@1.2.26
 - gatsby@2.20.26

* fix(docs): Using-MDX link (#23288)

* fix(docs): Link to apollo blog (#23290)

* fix(docs): change gatsby-config mention for global CSS import (#23245)

* fix `gatsby-config` mention

* chore: format

Co-authored-by: gatsbybot <mathews.kyle+gatsbybot@gmail.com>

* docs: added details signifying that node fields can be arbitra… (#23106)

* added details signifying that node fields can be arbitrary

* Update docs/docs/data-fetching.md

Co-Authored-By: Kyle Gill <kylerobertgill@gmail.com>

* Update docs/docs/data-fetching.md

Co-Authored-By: Kyle Gill <kylerobertgill@gmail.com>

* removed empty line to fix failed linting tests

Co-Authored-By: Kyle Gill <kylerobertgill@gmail.com>

Co-authored-by: Kyle Gill <kylerobertgill@gmail.com>

* chore(gatsby): drop the the (#23295)

* chore(showcase): Add new sites built by Bejamas to showcase; c… (#23125)

* chore(sites): add new sites built by bejamas

* chore(creators): update bejamas cover

* chore(showcase):Add SofaScore Corporate web to showcase sites (#23128)

Co-authored-by: Mario Nikolaus <mario.nikolaus@sofascore.com>

* fix local links (#23149)

* chore(docs): Reference new ComponentModel component rather than generic LayerModel (#23241)

* Reference new ComponentModel component rather than generic LayerModel

* Remove use of t macro from layer models

* Half-fixing lingui code

* Revert "Half-fixing lingui code"

This reverts commit 64f052a.

* Remove Lingui from layer-model

* fix(www): fix sidebar (#23301)

* fix(www): fix sidebar

* Update sidebar.js

* fix(recipes): Fix shadow-file resource for scoped NPM packages & re-enable e2e testing for resources (#23274)

* fix(recipes): Fix shadow-file resource for scoped NPM packages

* WILL SLASH FIX WINDOWS???

* Add missing code block

* Try again

* hmmm joinPath maybe is the problem

* More fixes

* try reenabling tests

* disable colors in diffs

* Fix npm script test

* Why do these keep changing all the time??

* Use parsed value for the plan

* Disable Chalk colors on unit tests so match local ones

* Update packages/gatsby-recipes/src/providers/utils/get-diff.js

Co-Authored-By: John Otander <johnotander@gmail.com>

Co-authored-by: John Otander <johnotander@gmail.com>
Co-authored-by: gatsbybot <mathews.kyle+gatsbybot@gmail.com>

* chore(release): Publish

 - gatsby-cli@2.11.13
 - gatsby-recipes@0.0.10
 - gatsby-theme-blog-core@1.3.28
 - gatsby-theme-blog@1.4.28
 - gatsby-theme-notes@1.2.27
 - gatsby@2.20.27

* chore(starters): add gatsby-starter-ecommerce (#23037)

* chore(starters): add gatsby-starter-ecommerce

* chore(starters): add gatsby-starter-ecommerce

Co-authored-by: gatsbybot <mathews.kyle+gatsbybot@gmail.com>

* Add site Interficie Internet Services (#23130)

* Add site Interficie Internet Services

* Correct JavaScript cammelcase

* Prettier format

Co-authored-by: Obinna Ekwuno <obinnacodes@gmail.com>
Co-authored-by: gatsbybot <mathews.kyle+gatsbybot@gmail.com>

* fix brand names (#23142)

* fix(blog): remove local domain (#23141)

* fix remove local domain

* fix local domain

* fix local domain

* fix remove local domain

* fix for linter

* Create paul scanlon 100 days of Gatsby blog post and add  assets (#23294)

* Create paul scanlon 100 days of Gatsby blog post and add  assets

* fix frontmatter

* fix frontmatter issue and ad relative links

* fix typos and spacing issues

* Update docs/blog/2020-04-20-paulie-scanlons-journey-of-100-days/index.md

Co-Authored-By: LB <laurie@gatsbyjs.com>

Co-authored-by: Laurie Barth <laurie@LauriesrkLaptop.fios-router.home>
Co-authored-by: LB <laurie@gatsbyjs.com>

* Clarify prefix-paths variable. (#23309)

The line (one line, two places) I'm editing was copied from a comment in #21627 without the surrounding context. This edit provides that context.

Co-authored-by: gatsbybot <mathews.kyle+gatsbybot@gmail.com>

* chore(showcase):Add shreysachdeva.tech to showchase (#23032)

* Add shreysachdeva.tech to sites.yml

**Description**
Added the details of my personal website shreysachdeva.tech.

**Documentation**
No documentation

**Related Issues**
N/A

* chore: format

Co-authored-by: gatsbybot <mathews.kyle+gatsbybot@gmail.com>
Co-authored-by: Obinna Ekwuno <obinnacodes@gmail.com>

* fix(www): Fix sidebar expansion behavior (#23325)

* [gatsby-plugin-manifest] Generate a 32x32 favicon instead of generating from first manifest icon (#23077)

* Decouple favicons from manifest icons

* Update packages/gatsby-plugin-manifest/README.md

* Replace include_favicon undefined check with nullish coalescing operator

Co-Authored-By: Alex Moon <moonmeister@users.noreply.github.com>

* Assert gatsby-plugin-manifest generates favicon PNG (unless include_favicon option is false)

* Don't mock createContentDigest in gatsby-plugin-manifest's gatsby-ssr tests (to be consistent with gatsby-node tests)

* Tweak a comment

Co-authored-by: LB <laurie@gatsbyjs.com>
Co-authored-by: Alex Moon <moonmeister@users.noreply.github.com>

* Use mutations in Gatsby Admin

* Remove stray console.logs

* chore(gatsby-recipes): Update README typo (#23333)

Fixed typo in README.md

* fix(gatsby): Check for files before delete action when using GATSBY_EXPERIMENTAL_PAGE_BUILD_ON_DATA_CHANGES (#23219)

* Check for files before delete action

* fix lint issues

* fix lint issues and add return type to checkFolderHasContent

* rename check function

Co-authored-by: gatsbybot <mathews.kyle+gatsbybot@gmail.com>

* Install plugins as prod dependencies

* chore(release): Publish

 - gatsby-cli@2.11.14
 - gatsby-plugin-manifest@2.3.6
 - gatsby-recipes@0.0.11
 - gatsby-theme-blog-core@1.3.29
 - gatsby-theme-blog@1.4.29
 - gatsby-theme-notes@1.2.28
 - gatsby@2.20.28

* Add Besoegsvenner site to showcase (#23172)

* Add Besoegsvenner site to showcase

50.000 elderly people in Denmark feel lonely. This project seeks to inform people to become visitor friends ("Besøgsven" in Danish) to help fight loneliness and bring new friendships in to the world.

* Update sites.yml

Co-authored-by: Obinna Ekwuno <obinnacodes@gmail.com>
Co-authored-by: gatsbybot <mathews.kyle+gatsbybot@gmail.com>

* chore(benchmarks): Add Drupal data updater script to update benchmark data (#23242)

* Add Drupal data updater script to update benchmark data

* Remove console.log statement

Co-authored-by: gatsbybot <mathews.kyle+gatsbybot@gmail.com>

* Make TypeScript happy

* fix(gatsby): fix Uncaught TypeError in navigation.js (#23196)

* Add null check to address #21263

#21263 is an issue many people are arriving at for a variety of reasons.  Since the code contains this logic on the following line:

```
      if (pageHeadings && pageHeadings.length) {
```

There should be no issue in seeing if `document.getElementById(`gatsby-focus-wrapper`) exists first before attempting to look up `getElementsByTagName`.

* Update packages/gatsby/cache-dir/navigation.js

Co-Authored-By: Vladimir Razuvaev <vladimir.razuvaev@gmail.com>

* chore: format

Co-authored-by: Vladimir Razuvaev <vladimir.razuvaev@gmail.com>
Co-authored-by: gatsbybot <mathews.kyle+gatsbybot@gmail.com>

* Add support for file argument in remark plugins for gatsby-plugin-mdx (#21489)

* chore(gatsby-cli) Migrate remaining files in reporters/logger/ink to Typscript (#22782)

* Migrate remaining files in gatsby-cli/reporters/logger/ink to TS

* Rename "IProps" to something more contextual
Extend interface parameter individually instead of using utility

* Clean up after merging the redux master changes

Co-authored-by: Blaine Kasten <blainekasten@gmail.com>

* Fix Drupal data update script (#23349)

* Add noop data update scripts for all benchmarks (#23352)

* Add noop data update scripts for all CMS benchmarks

* Add data update to remainder of benchmarks

* chore(babel-preset-gatsby): Convert dependencies to TS (#22038)

Co-authored-by: Blaine Kasten <blainekasten@gmail.com>

* fix(gatsby): Improve error message when calling useStaticQuery without graphql (#23189)

* Add warning message for a long queries (#23261)

* Add warning message for a long queries

* Change timeout to 15 seconds

* Replace console with report

* Print out queryJob.componentPath instead of page.internalComponentName

* Add new info in the warning message

Co-authored-by: gatsbybot <mathews.kyle+gatsbybot@gmail.com>

* refactor(gatsby): Convert inference metadata to TypeScript (#23264)

* refactor(inference-metadata): Convert to TypeScript

* Remove unused variable

* Forgot some types

* refactor(type-conflict-reporter): Node description

After tightening the original util function to return a string only, it
seemed sensible to convert that to use nullish coalescing. At that
point, seeing the function is only used in a single place and not
exported, I inlined it.

* refactor(inference-metadata): Interface renaming

* fix: Extract ValueType type

* refactor: Change type from unknown to object

* Corrected types, but left the code alone

* Removed redundant comments

* Update README.md (#23357)

* feat(gatsby-remark-images): support markdownCaptions in mdx + fix for remark (#21188)

* pass compiler to gatsby-remark-* plugins in the mdx plugin

* make getImageCaption async

* use async mdx compiler

* fix for using compiler

* don't mutate the node multiple times

* convert markdown ast to html ast

Co-authored-by: vladar

* chore(release): Publish

 - babel-preset-gatsby@0.3.4
 - gatsby-cli@2.11.15
 - gatsby-plugin-mdx@1.1.10
 - gatsby-recipes@0.0.12
 - gatsby-remark-images@3.2.5
 - gatsby-theme-blog-core@1.3.30
 - gatsby-theme-blog@1.4.30
 - gatsby-theme-notes@1.2.29
 - gatsby-transformer-remark@2.7.4
 - gatsby@2.20.29

* Fix lint errors

* Fix TypeScript unused declaration error

* Fix linting

Co-authored-by: Lennart <lekoarts@gmail.com>
Co-authored-by: Jeremy Albright <1935258+Js-Brecht@users.noreply.github.com>
Co-authored-by: gatsbybot <mathews.kyle+gatsbybot@gmail.com>
Co-authored-by: Elijah <35966941+ElijahCano33@users.noreply.github.com>
Co-authored-by: Kyle Gill <kylerobertgill@gmail.com>
Co-authored-by: Peter van der Zee <209817+pvdz@users.noreply.github.com>
Co-authored-by: Michał Zieliński <zielinski-michal@outlook.com>
Co-authored-by: Mario Nikolaus <mnikolaus@users.noreply.github.com>
Co-authored-by: Mario Nikolaus <mario.nikolaus@sofascore.com>
Co-authored-by: Michael <184316+muescha@users.noreply.github.com>
Co-authored-by: Aisha Blake <aisha@gatsbyjs.com>
Co-authored-by: Ward Peeters <ward@coding-tech.com>
Co-authored-by: Kyle Mathews <mathews.kyle@gmail.com>
Co-authored-by: John Otander <johnotander@gmail.com>
Co-authored-by: Lorenzo GM <dev@lorenzogm.com>
Co-authored-by: aperacaula <36845488+aperacaula@users.noreply.github.com>
Co-authored-by: Obinna Ekwuno <obinnacodes@gmail.com>
Co-authored-by: Michelle Gienow <michellegienow@gmail.com>
Co-authored-by: Laurie Barth <laurie@LauriesrkLaptop.fios-router.home>
Co-authored-by: LB <laurie@gatsbyjs.com>
Co-authored-by: Alex Fornuto <github@alexf.co>
Co-authored-by: Shrey Sachdeva <shreysachdeva.2000@gmail.com>
Co-authored-by: Nat Alison <1278991+tesseralis@users.noreply.github.com>
Co-authored-by: Owen <owen@dangerfarms.com>
Co-authored-by: Alex Moon <moonmeister@users.noreply.github.com>
Co-authored-by: Marcus Lyons <10541922+marcuslyons@users.noreply.github.com>
Co-authored-by: Stuart Rayson <stuart.a.rayson@gmail.com>
Co-authored-by: Michal Piechowiak <misiek.piechowiak@gmail.com>
Co-authored-by: Jacob Packert <jacobpackert@gmail.com>
Co-authored-by: Shane Thomas <shane@codekarate.com>
Co-authored-by: nick shook <nick@shook.family>
Co-authored-by: Vladimir Razuvaev <vladimir.razuvaev@gmail.com>
Co-authored-by: Kai Hao <kevin830726@gmail.com>
Co-authored-by: Arthur <arthur@mediamonks.com>
Co-authored-by: Blaine Kasten <blainekasten@gmail.com>
Co-authored-by: Nicholas Duffy <duffn@outlook.com>
Co-authored-by: Michaël De Boey <info@michaeldeboey.be>
Co-authored-by: Rebenkov Aleksey <rebenkovaleksey@yandex.ru>
Co-authored-by: Ross Hendry <rhendry@googlemail.com>
Co-authored-by: Khaled Garbaya <khaled@contentful.com>
Co-authored-by: Mathieu Dutour <mathieu@dutour.me>
Co-authored-by: Sidhartha Chatterjee <me@sidharthachatterjee.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[gatsby-plugin-manifest] Default favicon set doesn't render well (Firefox, retina display)
5 participants