{"id":14959310,"url":"https://github.com/anolilab/unplugin-favicons","last_synced_at":"2025-10-24T16:31:52.247Z","repository":{"id":199133048,"uuid":"702187951","full_name":"anolilab/unplugin-favicons","owner":"anolilab","description":"Generate favicons for your project with caching for blazing fast rebuilds.","archived":false,"fork":false,"pushed_at":"2025-02-06T09:02:41.000Z","size":1622,"stargazers_count":7,"open_issues_count":9,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-06T10:22:15.980Z","etag":null,"topics":["anolilab","astro","esbuild","favicon","favicons","favicons-generator","generate","generating-favicons","image","nuxt","plugin","pwa","rollup","rspack","svelte","sveltekit","vite","vite-plugin","webpack"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/anolilab.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":".github/CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":"audit-ci.jsonc","citation":null,"codeowners":".github/CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"prisis"}},"created_at":"2023-10-08T18:42:07.000Z","updated_at":"2025-01-17T08:41:55.000Z","dependencies_parsed_at":"2024-02-05T17:30:20.348Z","dependency_job_id":"4edbbf78-ffc4-4e2e-a236-e67114dbf7a0","html_url":"https://github.com/anolilab/unplugin-favicons","commit_stats":{"total_commits":46,"total_committers":5,"mean_commits":9.2,"dds":0.5217391304347826,"last_synced_commit":"d1f527c2012918afa1dfbe07e4742a0c7609f22a"},"previous_names":["anolilab/unplugin-favicons"],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anolilab%2Funplugin-favicons","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anolilab%2Funplugin-favicons/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anolilab%2Funplugin-favicons/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/anolilab%2Funplugin-favicons/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/anolilab","download_url":"https://codeload.github.com/anolilab/unplugin-favicons/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238008443,"owners_count":19401255,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["anolilab","astro","esbuild","favicon","favicons","favicons-generator","generate","generating-favicons","image","nuxt","plugin","pwa","rollup","rspack","svelte","sveltekit","vite","vite-plugin","webpack"],"created_at":"2024-09-24T13:19:25.600Z","updated_at":"2025-10-24T16:31:50.900Z","avatar_url":"https://github.com/anolilab.png","language":"TypeScript","funding_links":["https://github.com/sponsors/prisis"],"categories":["Plugins"],"sub_categories":["Unplugin"],"readme":"\u003cdiv align=\"center\"\u003e\n\n\u003ch1\u003eA Favicons Plugin\u003c/h1\u003e\n\nCreate and manage favicons with Vite, Rollup, Webpack, Rspack, Nuxt, Vue CLI, Svelte, esbuild and Astro on top of\n[itgalaxy/favicons](https://github.com/itgalaxy/favicons)\n\n[![typescript-image]][typescript-url] [![npm-image]][npm-url] [![license-image]][license-url]\n\n\u003c/div\u003e\n\n---\n\n\u003cdiv align=\"center\"\u003e\n    \u003cp\u003e\n        \u003csup\u003e\n            Daniel Bannert's open source work is supported by the community on \u003ca href=\"https://github.com/sponsors/prisis\"\u003eGitHub Sponsors\u003c/a\u003e\n        \u003c/sup\u003e\n    \u003c/p\u003e\n\u003c/div\u003e\n\n---\n\n## Install\n\n```bash\nnpm install --dev-save @anolilab/unplugin-favicons favicons\n```\n\n```sh\nyarn add -D @anolilab/unplugin-favicons favicons\n```\n\n```sh\npnpm add -D @anolilab/unplugin-favicons favicons\n```\n\n## Zero Config Usage\n\nAdd your base logo as `logo.png` file to your assets folder.\n\n## Only declared icons generation\n\n```ts\nunpluginFavicons({\n    /**\n     * Specify each icon type to render. Unlike `favicons`, this plugin is\n     * opt-in, meaning only the icon types you declare here will be rendered.\n     *\n     * For each icon type, all `favicons` options are supported. An\n     * additional `source` property is required to indicate the asset to be\n     * used for that icon type.\n     */\n    icons: {\n        favicons: {\n            source: \"./assets/favicon.png\",\n        },\n        android: {\n            source: \"./assets/android.png\",\n        },\n        appleStartup: {\n            source: \"./assets/apple-startup.png\",\n        },\n    },\n});\n```\n\n### Add the plugin to your bundler as follow:\n\n\u003cdetails\u003e\n\u003csummary\u003eVite\u003c/summary\u003e\u003cbr\u003e\n\n```ts\n// vite.config.ts\nimport unpluginFavicons from \"@anolilab/unplugin-favicons/vite\";\n\nexport default defineConfig({\n    plugins: [\n        unpluginFavicons({\n            /* options */\n        }),\n    ],\n});\n```\n\n\u003cbr\u003e\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eRollup\u003c/summary\u003e\u003cbr\u003e\n\n```ts\n// rollup.config.js\nimport unpluginFavicons from \"@anolilab/unplugin-favicons/rollup\";\n// To use the auto inject\nimport html from \"@rollup/plugin-html\";\n\nexport default {\n    plugins: [\n        // html(), // optional\n        unpluginFavicons({\n            /* options */\n        }),\n    ],\n};\n```\n\n\u003cbr\u003e\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eesbuild (Only generates the favicons)\u003c/summary\u003e\u003cbr\u003e\n\n```ts\n// esbuild.config.js\nimport { build } from \"esbuild\";\n\nbuild({\n    plugins: [\n        require(\"@anolilab/unplugin-favicons/esbuild\")({\n            /* options */\n        }),\n    ],\n});\n```\n\n\u003cbr\u003e\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eWebpack\u003c/summary\u003e\u003cbr\u003e\n\n```ts\n// webpack.config.js\nmodule.exports = {\n    /* ... */\n    plugins: [\n        require(\"@anolilab/unplugin-favicons/webpack\")({\n            /* options */\n        }),\n    ],\n};\n```\n\n\u003cbr\u003e\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eVue CLI (Untested)\u003c/summary\u003e\u003cbr\u003e\n\n```ts\n// vue.config.js\nmodule.exports = {\n    configureWebpack: {\n        plugins: [\n            require(\"@anolilab/unplugin-favicons/webpack\")({\n                /* options */\n            }),\n        ],\n    },\n};\n```\n\n\u003cbr\u003e\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eNuxt\u003c/summary\u003e\u003cbr\u003e\n\nNuxt 2 and [Nuxt Bridge](https://github.com/nuxt/bridge)\n\n```ts\n// nuxt.config.js\nexport default {\n    buildModules: [\n        [\n            \"@anolilab/unplugin-favicons/nuxt\",\n            {\n                /* options */\n            },\n        ],\n    ],\n};\n```\n\nNuxt 3\n\n```ts\n// nuxt.config.js\nexport default defineNuxtConfig({\n    modules: [\n        [\n            \"@anolilab/unplugin-favicons/nuxt\",\n            {\n                /* options */\n            },\n        ],\n    ],\n});\n```\n\nSee [the Nuxt example](examples/nuxt) for a working example project.\n\n\u003cbr\u003e\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eSvelteKit\u003c/summary\u003e\u003cbr\u003e\n\nThe `@anolilab/unplugin-favicons` plugin should be configured in the `vite.config.js` configuration file:\n\n```ts\n// vite.config.js\nimport { defineConfig } from \"vite\";\nimport { sveltekit } from \"@sveltejs/kit/vite\";\nimport unpluginFavicons from \"@anolilab/unplugin-favicons/vite\";\n\nexport default defineConfig({\n    plugins: [\n        sveltekit(),\n        unpluginFavicons({\n            /* options */\n        }),\n    ],\n});\n```\n\nThen add `src/hooks.server.ts` to rewrite the head tag with [`hooks`](https://kit.svelte.dev/docs/hooks):\n\n```ts\nimport { metadata } from \"@anolilab/unplugin-favicons/runtime\"; // use default import\nimport type { Handle } from \"@sveltejs/kit\";\n\nexport const handle: Handle = async ({ event, resolve }) =\u003e {\n    const response = await resolve(event, {\n        transformPageChunk: ({ html }) =\u003e html.replace(\"\u003c/head\u003e\", `${metadata}\u003c/head\u003e`),\n    });\n    return response;\n};\n```\n\nCheck instructions in the `Frameworks -\u003e Svelte` section below if you faced module import errors.\n\nSee [the SvelteKit example](examples/sveltekit) for a working example project.\n\n\u003cbr\u003e\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eSvelte + Vite\u003c/summary\u003e\u003cbr\u003e\n\nSvelte support requires the `@sveltejs/vite-plugin-svelte` plugin:\n\n```shell\nnpm i -D @sveltejs/vite-plugin-svelte\n```\n\nThe `@anolilab/unplugin-favicons` plugin should be configured in the `vite.config.js` configuration file:\n\n```ts\n// vite.config.js\nimport { defineConfig } from \"vite\";\nimport { svelte } from \"@sveltejs/vite-plugin-svelte\";\nimport unpluginFavicons from \"@anolilab/unplugin-favicons/vite\";\n\nexport default defineConfig({\n    plugins: [\n        svelte(),\n        unpluginFavicons({\n            /* options */\n        }),\n    ],\n});\n```\n\nCheck instructions in the `Frameworks -\u003e Svelte` section below if you faced module import errors.\n\nSee [the Svelte + Vite example](examples/vite-svelte) for a working example project.\n\n\u003cbr\u003e\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eNext.js (Not Supported for now)\u003c/summary\u003e\u003cbr\u003e\n\nThe `@anolilab/unplugin-favicons` plugin should be configured on `next.config.js` configuration file:\n\n```js\n/** @type {import('next').NextConfig} */\nmodule.exports = {\n    reactStrictMode: true,\n    webpack(config) {\n        config.plugins.push(\n            require(\"@anolilab/unplugin-favicons/webpack\")({\n                /* options */\n            }),\n        );\n\n        return config;\n    },\n};\n```\n\nCheck instructions in the `Frameworks -\u003e React` section below if you faced module import errors.\n\nSee [the Next.js example](examples/next) for a working example project.\n\n\u003cbr\u003e\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eAstro\u003c/summary\u003e\u003cbr\u003e\n\n```ts\n// astro.config.mjs\nimport { defineConfig } from \"astro/config\";\nimport unpluginFavicons from \"@anolilab/unplugin-favicons/vite\";\n\n// https://astro.build/config\nexport default defineConfig({\n    vite: {\n        plugins: [\n            unpluginFavicons({\n                /* options */\n            }),\n        ],\n    },\n});\n```\n\nSee [the Astro example](examples/astro) for a working example project.\n\n\u003cbr\u003e\u003c/details\u003e\n\nThe default configuration will automatically generate webapp manifest files along with 44 different icon formats as appropriate for iOS devices, Android devices, Windows Phone and various desktop browsers out of your single `logo.png`.\n\n\u003e **Tip:** You might want to [fine tune](#advanced-usage) what vendors to support.\n\n### A Note on Path Resolution\n\nUnder the hood, Vite/Rollup resolve the paths to the logo and favicons according to the following\nrules:\n\n- If `/path/to/logo` is absolute, there is nothing to resolve and the path\n  specified is used as is.\n\n- If `./path/to/logo` is relative, it’s resolved with respect to `process.cwd()`.\n\n### HTML Injection\n\nIn combination with [Vite’s html plugin hooks](https://vitejs.dev/guide/api-plugin.html#transformindexhtml) it will also inject the necessary html for you:\n\n```html\n\u003clink rel=\"apple-touch-icon\" sizes=\"57x57\" href=\"/assets/apple-touch-icon-57x57.png\" /\u003e\n\u003clink rel=\"apple-touch-icon\" sizes=\"60x60\" href=\"/assets/apple-touch-icon-60x60.png\" /\u003e\n\u003clink rel=\"apple-touch-icon\" sizes=\"72x72\" href=\"/assets/apple-touch-icon-72x72.png\" /\u003e\n\u003clink rel=\"apple-touch-icon\" sizes=\"76x76\" href=\"/assets/apple-touch-icon-76x76.png\" /\u003e\n\u003clink rel=\"apple-touch-icon\" sizes=\"114x114\" href=\"/assets/apple-touch-icon-114x114.png\" /\u003e\n\u003clink rel=\"apple-touch-icon\" sizes=\"120x120\" href=\"/assets/apple-touch-icon-120x120.png\" /\u003e\n\u003clink rel=\"apple-touch-icon\" sizes=\"144x144\" href=\"/assets/apple-touch-icon-144x144.png\" /\u003e\n\u003clink rel=\"apple-touch-icon\" sizes=\"152x152\" href=\"/assets/apple-touch-icon-152x152.png\" /\u003e\n\u003clink rel=\"apple-touch-icon\" sizes=\"167x167\" href=\"/assets/apple-touch-icon-167x167.png\" /\u003e\n\u003clink rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"/assets/apple-touch-icon-180x180.png\" /\u003e\n\u003clink rel=\"apple-touch-icon\" sizes=\"1024x1024\" href=\"/assets/apple-touch-icon-1024x1024.png\" /\u003e\n\u003clink\n    rel=\"apple-touch-startup-image\"\n    media=\"(device-width: 320px) and (device-height: 480px) and (-webkit-device-pixel-ratio: 1)\"\n    href=\"/assets/apple-touch-startup-image-320x460.png\"\n/\u003e\n\u003clink\n    rel=\"apple-touch-startup-image\"\n    media=\"(device-width: 320px) and (device-height: 480px) and (-webkit-device-pixel-ratio: 2)\"\n    href=\"/assets/apple-touch-startup-image-640x920.png\"\n/\u003e\n\u003clink\n    rel=\"apple-touch-startup-image\"\n    media=\"(device-width: 320px) and (device-height: 568px) and (-webkit-device-pixel-ratio: 2)\"\n    href=\"/assets/apple-touch-startup-image-640x1096.png\"\n/\u003e\n\u003clink\n    rel=\"apple-touch-startup-image\"\n    media=\"(device-width: 375px) and (device-height: 667px) and (-webkit-device-pixel-ratio: 2)\"\n    href=\"/assets/apple-touch-startup-image-750x1294.png\"\n/\u003e\n\u003clink\n    rel=\"apple-touch-startup-image\"\n    media=\"(device-width: 414px) and (device-height: 736px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 3)\"\n    href=\"/assets/apple-touch-startup-image-1182x2208.png\"\n/\u003e\n\u003clink\n    rel=\"apple-touch-startup-image\"\n    media=\"(device-width: 414px) and (device-height: 736px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 3)\"\n    href=\"/assets/apple-touch-startup-image-1242x2148.png\"\n/\u003e\n\u003clink\n    rel=\"apple-touch-startup-image\"\n    media=\"(device-width: 768px) and (device-height: 1024px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 1)\"\n    href=\"/assets/apple-touch-startup-image-748x1024.png\"\n/\u003e\n\u003clink\n    rel=\"apple-touch-startup-image\"\n    media=\"(device-width: 768px) and (device-height: 1024px) and (orientation: landscape) and (-webkit-device-pixel-ratio: 2)\"\n    href=\"/assets/apple-touch-startup-image-1496x2048.png\"\n/\u003e\n\u003clink\n    rel=\"apple-touch-startup-image\"\n    media=\"(device-width: 768px) and (device-height: 1024px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 1)\"\n    href=\"/assets/apple-touch-startup-image-768x1004.png\"\n/\u003e\n\u003clink\n    rel=\"apple-touch-startup-image\"\n    media=\"(device-width: 768px) and (device-height: 1024px) and (orientation: portrait) and (-webkit-device-pixel-ratio: 2)\"\n    href=\"/assets/apple-touch-startup-image-1536x2008.png\"\n/\u003e\n\u003clink rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/assets/favicon-16x16.png\" /\u003e\n\u003clink rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/assets/favicon-32x32.png\" /\u003e\n\u003clink rel=\"icon\" type=\"image/png\" sizes=\"228x228\" href=\"/assets/coast-228x228.png\" /\u003e\n\u003clink rel=\"manifest\" href=\"/assets/manifest.json\" /\u003e\n\u003clink rel=\"shortcut icon\" href=\"/assets/favicon.ico\" /\u003e\n\u003clink rel=\"yandex-tableau-widget\" href=\"/assets/yandex-browser-manifest.json\" /\u003e\n\u003cmeta name=\"apple-mobile-web-app-capable\" content=\"yes\" /\u003e\n\u003cmeta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" /\u003e\n\u003cmeta name=\"apple-mobile-web-app-title\" /\u003e\n\u003cmeta name=\"application-name\" /\u003e\n\u003cmeta name=\"mobile-web-app-capable\" content=\"yes\" /\u003e\n\u003cmeta name=\"msapplication-TileColor\" content=\"#fff\" /\u003e\n\u003cmeta name=\"msapplication-TileImage\" content=\"/assets/mstile-144x144.png\" /\u003e\n\u003cmeta name=\"msapplication-config\" content=\"/assets/browserconfig.xml\" /\u003e\n\u003cmeta name=\"theme-color\" content=\"#fff\" /\u003e\n```\n\n## Advanced Usage\n\n```javascript\n  unpluginFavicons({\n    /** Your source logo (Will default to ) */\n    logo?: \"assets/logo.png\",\n    /** Inject html links/metadata. */\n    inject?: true,\n    /** `Favicons` configuration options\n    *  - [See `favicons` documentation](https://github.com/itgalaxy/favicons) */\n    favicons?: FaviconsConfig,\n    /** The root of the project from which you want to load metadata */\n    projectRoot?: process.cwd(),\n  })\n```\n\nTo fine tune what icons/metadata is generated, refer to\n[favicons’ documentation](https://github.com/itgalaxy/favicons#usage).\n\nThe options specified under `favicons:` are handed over as is to [favicons],\nexcept that if `appName`, `appDescription`, `version`, `developerName` or\n`developerURL` are left `undefined`, they will be automatically inferred\nrespectively from `name`, `description`, `version`, `author.name` and\n`author.url` as defined in the nearest `package.json` if available.\nAnd if there’s no `author` it will use the first in the `contributors`.\nTo disable automatically retrieving metadata from `package.json`, set\nto `null` the properties you want to omit.\n\n### Examples\n\n#### Basic\n\n```javascript\nunpluginFavicons({\n    logo: \"./src/logo.png\", // svg works too!\n    favicons: {\n        appName: \"my-app\",\n        appDescription: \"My awesome App\",\n        developerName: \"Me\",\n        developerURL: null, // prevent retrieving from the nearest package.json\n        background: \"#ddd\",\n        theme_color: \"#333\",\n        icons: {\n            coast: false,\n            yandex: false,\n        },\n    },\n});\n```\n\nTo fine tune what icons/metadata is generated, refer to\n[favicons’ documentation](https://github.com/itgalaxy/favicons#usage).\n\n#### Handling Multiple HTML Files\n\nVite calls the HTML transform hook for each HTML file template file you have configured in Vite, so this works automatically.\n\n### Runtime\n\nThe `@anolilab/unplugin-favicons` plugin also exports a runtime module that can be used to inject the generated metadata into your HTML files or access the `files` and `images` used in the metadata.\n\n```ts\nimport { metadata, images, files } from \"@anolilab/unplugin-favicons/runtime\";\n\nconsole.log(metadata, images, files);\n```\n\n## Changelog\n\nTake a look at the [CHANGELOG.md](https://github.com/anolilab/unplugin-favicons/blob/main/CHANGELOG.md).\n\n## Contribution\n\nYou’re free to contribute to this project by submitting [issues](https://github.com/anolilab/unplugin-favicons/issues) and/or [pull requests](https://github.com/anolilab/unplugin-favicons/pulls).\n\nPlease keep in mind that every change and feature should be covered by\ntests.\n\n## License\n\nThis project is licensed under [MIT](https://github.com/anolilab/unplugin-favicons/blob/main/LICENSE.md).\n\n## Supported Node.js Versions\n\nLibraries in this ecosystem make the best effort to track\n[Node.js’ release schedule](https://nodejs.org/en/about/releases/). Here’s [a\npost on why we think this is important](https://medium.com/the-node-js-collection/maintainers-should-consider-following-node-js-release-schedule-ab08ed4de71a).\n\n## Contributing\n\nIf you would like to help take a look at the [list of issues](https://github.com/anolilab/vite-plugin-favicon/issues) and check our [Contributing](.github/CONTRIBUTING.md) guild.\n\n\u003e **Note:** please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.\n\n## Credits\n\n- [Daniel Bannert](https://github.com/prisis)\n- [All Contributors](https://github.com/anolilab/vite-plugin-favicon/graphs/contributors)\n\n## License\n\nThe anolilab vite-plugin-favicon is open-sourced software licensed under the [MIT license](https://opensource.org/license/mit/)\n\n[typescript-image]: https://img.shields.io/badge/Typescript-294E80.svg?style=for-the-badge\u0026logo=typescript\n[typescript-url]: \"typescript\"\n[license-image]: https://img.shields.io/npm/l/@anolilab/unplugin-favicons?color=blueviolet\u0026style=for-the-badge\n[license-url]: LICENSE.md \"license\"\n[npm-image]: https://img.shields.io/npm/v/@anolilab/unplugin-favicons/latest.svg?style=for-the-badge\u0026logo=npm\n[npm-url]: https://www.npmjs.com/login?next=%2Fpackage%2F%40anolilab%2Funplugin-favicons%2Fv%2Flatest \"npm\"\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanolilab%2Funplugin-favicons","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fanolilab%2Funplugin-favicons","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fanolilab%2Funplugin-favicons/lists"}