Host your brand's logos and fonts at stable shieldcn URLs. Swap the asset once and every badge, header, and embed that uses it updates on the next fetch.
A Pro brand owns hosted assets — logos and fonts served from stable URLs. This is the rebrand wedge: distribute the URL once, swap the bytes later, and every embed updates.
A brand can host up to four image assets:
| Kind | URL | Use |
|---|---|---|
logo-light | /b/{slug}/logo-light.svg | Dark-ink logo, for light backgrounds |
logo-dark | /b/{slug}/logo-dark.svg | Light-ink logo, for dark backgrounds |
mark | /b/{slug}/mark.svg | Square icon / app mark |
wordmark | /b/{slug}/wordmark.svg | Full wordmark |
Each is also available as .png. Upload them in the brand editor, or let the
Import from a domain flow fetch and host them for you.
Set logo=brand on any ?brand= badge and shieldcn substitutes the
mode-appropriate hosted logo automatically:
<!-- Dark badge → uses logo-dark; ?mode=light → uses logo-light -->

The same works on README headers:

You can also reference the hosted URL as a plain image — handy for a docs site header or an npm README:
<img src="https://shieldcn.dev/b/acme/logo-dark.svg" alt="Acme" height="32" />
Swap the stored logo in the dashboard and this image updates everywhere on the next fetch.
Upload a brand's typefaces (TTF, OTF, WOFF, or WOFF2) to render badges in the brand's own font:
| Slot | Badge param | Use |
|---|---|---|
font-sans | font=brand | Body / default |
font-mono | font=brand-mono | Monospace |
font-heading | font=brand-heading | Display / headings |

Fonts render only for brands that have uploaded one; otherwise the badge falls back to Inter for full glyph coverage.
Hosted assets are served with a short cache TTL, so replacing an asset propagates across GitHub's Camo proxy within minutes. Assets are capped at 2 MB each — logos and fonts are small, and this keeps serving fast.