Skip to content

Serve Marketplace icons from the brand folder of custom integrations - #11283

Merged
balloob merged 5 commits into
masterfrom
frenck/marketplace-icons
Oct 8, 2026
Merged

balloob merged 5 commits into
masterfrom
frenck/marketplace-icons

Conversation

@frenck

@frenck frenck commented Oct 8, 2026 •

Copy link
Copy Markdown
Member

Proposed change

Custom integrations no longer add their images to this repository; they ship them in a brand folder of their own (see the Brands Proxy API announcement linked above). Home Assistant shows those once the integration is installed, but the Marketplace shows integrations before that, so most of them get the placeholder today.

This serves those brand folders on a path of their own, /marketplace/<domain>/<image>, which only the Marketplace uses. Nothing changes for the existing paths. It is a stopgap until the Marketplace gets a backend that can provide these images itself.

How it works:

  • An hourly scheduled function reads the Marketplace integration list and checks, with HEAD requests to raw.githubusercontent.com, which of the eight image variants each integration has at its latest release. Only the results (which images exist at which ref) are kept, in Netlify Blobs. An integration is only checked again on a new release or after a week, so a normal run does next to no requests.
  • A function serves /marketplace/<domain>/<image> from the repository of the integration. Once an integration is installed, Home Assistant serves its own brand folder instead.
  • The function applies the same fallback chain as the brands integration in Home Assistant, only serves complete PNG files up to 2 MB, and answers 404 only when it knows an integration has no such image. When it does not know yet, or GitHub is not answering, it answers 503, which Home Assistant does not remember.
  • netlify/marketplace-icons-blocklist.json turns off the images of a single integration.

Numbers from a local run: 1036 Marketplace integrations are not in this repository, 943 of those ship a brand folder.

This adds Node.js tooling to the repository: package.json, TypeScript functions under netlify/, tests with node:test, a workflow that type checks and tests them, and Renovate now also updates npm dependencies. The README has a section on all of it.

To try the Deploy Preview: run marketplace-icons-sync a few times through "Run now" in the Netlify UI to fill the index all Deploy Previews share (previews never touch the production one), then request /marketplace/<domain>/icon.png for an integration from the Marketplace.

Type of change

  • Add a new logo or icon for a new core integration
  • Add a missing icon or logo for an existing core integration
  • Replace an existing icon or logo with a higher quality version
  • Replace an existing icon or logo after a branding change
  • Removing an icon or logo

Additional information

  • This PR fixes or closes issue: fixes #
  • Link to code base pull request:
  • Link to documentation pull request:
  • Link to integration documentation on our website:

Checklist

  • The added/replaced image(s) are PNG
  • Icon image size is 256x256px (icon.png)
  • hDPI icon image size is 512x512px for (icon@2x.png)
  • Logo image size has min 128px, but max 256px, on the shortest side (logo.png)
  • hDPI logo image size has min 256px, but max 512px, on the shortest side (logo@2x.png)

@frenck frenck added the enhancement New feature or request label Oct 8, 2026
@balloob
balloob merged commit 4551ca7 into master Oct 8, 2026
8 checks passed
@balloob
balloob deleted the frenck/marketplace-icons branch October 8, 2026 19:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants