This repository holds the icons and logos for all the brands Home Assistant supports.
This repository is used to generate a static website, serving these images for use in our Home Assistant projects. The goal is to have a centralized repository of brand images.
This repository provides three main folders to store images in:
core_integrations: Contains images for integrations bundled with the
Home Assistant Core.custom_integrations: Contains images for custom integrations
(custom components). Legacy folder: Since HA 2026.3.0, custom components can include their brand icons directly. Please refer to the Brands Proxy API announcement for more details.thread_brands: Contains images for brands that do not have an integration
at all, but are used to display Thread border routers. See
Thread brands below.Each of these main folders contains domain folders. Each domain folder is
named to the integration domain and must match the domain set in the
integration manifest.json file. For thread_brands, the folder name must
match the brand used in the Thread integration instead.
A domain folder can contain eight files:
icon.png: A square avatar-like icon, representing the brand or product for that domain.dark_icon.png: Dark optimised icon (if required).logo.png: The logo of the brand or product for that domain.dark_logo.png: Dark optimised logo (if required).icon@2x.png: hDPI version of icon.pngdark_icon@2x.png: hDPI version of dark_icon.pnglogo@2x.png: hDPI version of logo.pngdark_logo@2x.png: hDPI version of dark_logo.pngThose images are served in the following format:
https://brands.home-assistant.io/[domain]/icon.pnghttps://brands.home-assistant.io/[domain]/dark_icon.pnghttps://brands.home-assistant.io/[domain]/logo.pnghttps://brands.home-assistant.io/[domain]/dark_logo.pnghttps://brands.home-assistant.io/[domain]/icon@2x.pnghttps://brands.home-assistant.io/[domain]/dark_icon@2x.pnghttps://brands.home-assistant.io/[domain]/logo@2x.pnghttps://brands.home-assistant.io/[domain]/dark_logo@2x.pnghttps://brands.home-assistant.io/_/[domain]/icon.pnghttps://brands.home-assistant.io/_/[domain]/dark_icon.pnghttps://brands.home-assistant.io/_/[domain]/logo.pnghttps://brands.home-assistant.io/_/[domain]/dark_logo.pnghttps://brands.home-assistant.io/_/[domain]/icon@2x.pnghttps://brands.home-assistant.io/_/[domain]/dark_icon@2x.pnghttps://brands.home-assistant.io/_/[domain]/logo@2x.pnghttps://brands.home-assistant.io/_/[domain]/dark_logo@2x.pngThe website can service images with and without a fallback to a placeholder image.
This method uses the plain URLs, WITHOUT the /_/ in the URL path.
A missing image will result in a 404 being served.
For example: <https://brands.home-assistant.io/[domain]/icon.png>
icon.png file, 404 will be servedlogo.png file, the icon.png is served instead (if available).icon@2x.png file, the icon.png is served instead (if available).logo@2x.png file:icon@2x.png is served if available and logo.png is missinglogo.png is served instead (if available).This method uses the plain URLs, WITH the /_/ in the URL path.
A missing image will result in placeholder image being served telling the logo/icon is missing.
This also applies to domains, in case the integration domain is missing.
For example: <https://brands.home-assistant.io/_/[domain]/icon.png>
All icons and logos are cached by browsers for 7 days, so additions and changes may take time to reach all users. This gives users the full benefits of local caching with minimal revalidation, and protects against missing content during an internet outage.
Images are simultaneously cached by Cloudflare for 24 hours. This allows changes to begin being distributed to users relatively quickly without losing the CDN benefits. It also guarantees a simple refresh (F5) will bring content no more than 1 day old.
The Cloudflare cache is also fully flushed in each major version of Home Assistant Core.
Custom integrations ship their images in a brand folder of their own
nowadays, instead of adding them to this repository. Home Assistant shows
those once the integration is installed. To show them in the Marketplace
before that, this site serves them on a path of its own:
https://brands.home-assistant.io/marketplace/[domain]/icon.png
Only the Marketplace uses this path. It takes the same image names as above, with the same fallbacks, but has no placeholder.
netlify/functions/marketplace-icons-sync.mts) checks
which images the integrations in the Marketplace have at their latest
release, and keeps that list in Netlify Blobs. It only looks again when
a new release comes out, or after a week.netlify/functions/marketplace-icons.mts serves the image straight from
the repository of the integration.To stop showing the images of an integration, add its domain to
netlify/marketplace-icons-blocklist.json, with the reason as the value:
{
"example_domain": "Uses the logo of another company"
}
To turn the whole thing off without a code change, publish an earlier deploy in Netlify from before these functions were added.
The functions need Node.js (see .nvmrc). npm test runs the tests,
npm run check the type checks. node scripts/marketplace-icons-sync.ts index.json
runs the sync locally against a JSON file, with GITHUB_TOKEN set if you have
one. In Netlify, MARKETPLACE_ICONS_GITHUB_TOKEN is that token; it only needs
access to public repositories.
All images must have the following requirements:
dark_Additional to the general image requirements listed above, for the icon image, the following requirements are applied as well:
Additional to the general image requirements listed, for the logo image, the following requirements are applied as well:
If the brand uses the same image for the logo and icon (e.g., if the logo has a square aspect ratio), only add the icon images. The icon will be used as a fallback for the logo.
To keep the size of this repository as efficient as possible, symlinking domain folders for the same icon/logos is allowed for core integrations. The deployment process at our hosting provider will unpack these symlinks to actual files during the deployment process.
Please note, symlinks should only be created between integration domain
directories. The _placeholder & _homeassistant directories are special
cases and new directories with an underscore (_) should not be created.
Symlinks are currently not allowed in the custom integrations folder.
The names of directories must always match the integration domain. Additional directories are not allowed.
Home Assistant shows an image for every discovered Thread border router. The
vendor name advertised by the border router is mapped to a brand in the
KNOWN_BRANDS mapping of the Thread integration in Home
Assistant Core, and that brand is then used to look up an image in this
repository.
Most of those brands belong to an integration, so their images are already in
core_integrations (or, historically, in custom_integrations). The remaining
ones have no integration at all, and live in the thread_brands folder.
Do not remove folders from thread_brands when cleaning up integration
images: these domains intentionally do not have a matching integration. A
folder should only be removed here when the brand is dropped from
KNOWN_BRANDS in Home Assistant Core, or when an integration with the same
domain is added (in that case the images move to core_integrations).
Images in thread_brands are served on the same URLs as integration images,
so no URL changes are needed when a brand moves in or out of this folder.
It is possible for a custom integration and a core integration to collide on
a domain name level. In these cases, the core integration domain gets
preference.
When adding a new set of icons and logos, the following resources can help you find the needed images and get them to match our specifications:
A lot of brands (especially the larger ones) often offer a press kit on their (corporate) website, that contains high quality images.
All product names, trademarks and registered trademarks in the images in this repository, are property of their respective owners. All images in this repository are used by the Home Assistant project for identification purposes only.
The use of these names, trademarks and brands appearing in these image files, do not imply endorsement.
| 日期 | 榜单 | 排名 | 周期新增 | 总 STAR |
|---|