Quikturnv1.0
SDKs

React SDK

Drop-in React components for logos, carousels, and grids

The React SDK provides ready-to-use components and hooks for displaying company logos in React applications.

Installation

npm install @quikturn/logos @quikturn/logos-react

Peer dependencies: React >= 18, React DOM >= 18

Provider Setup

Wrap your app (or a subtree) in QuikturnProvider to set a default token for all child components:

import { QuikturnProvider } from "@quikturn/logos-react";

function App() {
  return (
    <QuikturnProvider token="pk_live_xxx">
      {/* All QuikturnLogo components inherit this token */}
      <YourApp />
    </QuikturnProvider>
  );
}

Provider props:

PropTypeDescription
tokenstringDefault publishable key for all children
baseUrlstring?Override the base URL

Individual components can override the provider's token via their own token prop.

Components

Renders a single company logo as an <img> tag.

import { QuikturnLogo } from "@quikturn/logos-react";

<QuikturnLogo domain="stripe.com" size={64} />
<QuikturnLogo domain="github.com" size={128} format="webp" theme="dark" />
<QuikturnLogo domain="linear.app" greyscale loading="lazy" />

Props:

PropTypeDefaultDescription
domainstringrequiredCompany domain
tokenstring?Provider tokenOverride API key
sizenumber?128Pixel width
format"png" | "jpeg" | "webp" | "avif"Image format
greyscaleboolean?falseDesaturate
theme"light" | "dark"Background variant
altstring?"{domain} logo"Alt text
hrefstring?Wraps in <a> tag
classNamestring?CSS class
styleCSSProperties?Inline styles
loading"lazy" | "eager"Native loading
onError(e: Event) => voidError handler
onLoad(e: Event) => voidLoad handler

QuikturnLogoCarousel

Animated horizontal or vertical logo carousel with smooth infinite scrolling.

import { QuikturnLogoCarousel } from "@quikturn/logos-react";

<QuikturnLogoCarousel
  domains={[
    "stripe.com", "github.com", "vercel.com",
    "linear.app", "figma.com", "notion.so",
  ]}
  speed={120}
  direction="left"
  pauseOnHover
  fadeOut
  logoHeight={28}
  gap={32}
/>

Props:

PropTypeDefaultDescription
domainsstring[]?Simple list of domains
logosLogoConfig[]?Full control per logo
speednumber?120Pixels per second
direction"left" | "right" | "up" | "down""left"Scroll direction
pauseOnHoverboolean?falsePause on mouse hover
hoverSpeednumber?Speed when hovering
logoHeightnumber?28Logo height in px
gapnumber?32Spacing between logos
widthstring | numberContainer width
fadeOutboolean?falseFade edges
fadeOutColorstring?"white"Fade overlay color
scaleOnHoverboolean?falseScale effect
renderItem(logo, i) => ReactNodeCustom render
classNamestring?CSS class
ariaLabelstring?ARIA label

Features:

  • Smooth infinite scroll animation
  • Responsive auto-scaling
  • Pause/resume on hover
  • Fade overlays on edges
  • Custom rendering via renderItem
  • Accessible with ARIA labels

QuikturnLogoGrid

CSS Grid layout for displaying logos in columns.

import { QuikturnLogoGrid } from "@quikturn/logos-react";

<QuikturnLogoGrid
  domains={["stripe.com", "github.com", "vercel.com", "linear.app"]}
  columns={4}
  gap={24}
  logoSize={64}
/>

Props:

PropTypeDefaultDescription
domainsstring[]?List of domains
logosLogoConfig[]?Full control per logo
columnsnumber?4Grid columns
gapnumber?24Gap between items
logoSizenumber?Per-logo size
renderItem(logo, i) => ReactNodeCustom render
classNamestring?CSS class
ariaLabelstring?ARIA label

Hooks

useLogoUrl(domain, options?)

Returns a logo URL string for use in custom components:

import { useLogoUrl } from "@quikturn/logos-react";

function CustomLogo({ domain }: { domain: string }) {
  const url = useLogoUrl(domain, { size: 128, format: "webp" });

  return (
    <div className="logo-card">
      <img src={url} alt={`${domain} logo`} />
    </div>
  );
}

Full Example

A partner logos section with carousel and grid:

import {
  QuikturnProvider,
  QuikturnLogo,
  QuikturnLogoCarousel,
  QuikturnLogoGrid,
} from "@quikturn/logos-react";

const partners = [
  "stripe.com", "github.com", "vercel.com",
  "linear.app", "figma.com", "notion.so",
  "slack.com", "shopify.com",
];

export default function PartnersPage() {
  return (
    <QuikturnProvider token={process.env.NEXT_PUBLIC_QUIKTURN_KEY!}>
      {/* Hero: animated carousel */}
      <section>
        <h2>Trusted by leading companies</h2>
        <QuikturnLogoCarousel
          domains={partners}
          speed={100}
          pauseOnHover
          fadeOut
          logoHeight={32}
        />
      </section>

      {/* Grid: all partners */}
      <section>
        <h2>Our Partners</h2>
        <QuikturnLogoGrid
          domains={partners}
          columns={4}
          gap={32}
          logoSize={80}
        />
      </section>

      {/* Individual logo with link */}
      <QuikturnLogo
        domain="stripe.com"
        size={128}
        href="https://stripe.com"
        alt="Stripe"
      />
    </QuikturnProvider>
  );
}

Attribution

On the Free tier, the SDK components automatically render a small attribution badge. Upgrade to Launch or higher to remove it.

Next Steps

On this page