Logoforge

React component

Each logo compiles to one typed component with no dependency but React. The props below are generated per logo: TypeScript only offers the options that logo really has.

Props

PropTypeDefaultDescription
variant"color" | "mono""color"Brand colors, or a single currentColor shape. Only logos with a mono file accept "mono".
type"icon" | "wordmark""icon"The mark alone, or the full lockup. Only on logos that have a wordmark.
mode"auto" | "light" | "dark""auto"auto swaps files with your .dark class; light / dark force one file. Only on logos with a dark variant.
titlestringthe brand nameAccessible name (role="img"). Pass "" for decorative logos (aria-hidden).
…propsSVGProps—className, style, width, height, onClick… go straight to the <svg>.

Examples

Examples
<GithubLogo className="size-8" />                    {/* color, auto dark mode */}
<GithubLogo variant="mono" className="size-5 text-muted-foreground" />
<StripeLogo type="wordmark" className="h-7 w-auto" />
<VercelLogo mode="dark" />                           {/* always the dark file */}
<SlackLogo title="" />                               {/* decorative */}

Sizing

The SVG defaults to height="1em" with its width following the aspect ratio, so it scales with the surrounding text. Set an explicit size with classes (size-8, h-6 w-auto) or width / height props.

Dark mode

Logos that would vanish on a dark page — near-black marks like GitHub, Vercel or Notion — ship a dark file. With mode="auto" the component renders both and hides one with Tailwind's dark: variant, so it follows the same .dark class as the rest of your shadcn UI, with no flash and no JavaScript. Not using Tailwind? Pass mode="light" or mode="dark" from your own theme state.

Mono

variant="mono" paints with currentColor: set a text color and the logo follows it — ideal for grayscale logo clouds. Badge-style marks (Adobe apps, AWS services) get a knockout mono where the symbol is cut out of its shape. A handful of logos have no mono because one would lose their detail.

Accessibility

By default the logo is announced as an image named after the brand. Next to a visible label, pass title="" so screen readers don't read the name twice.

Without React

Use the SVG files directly (getting started) or fetch them through the JSON API.