Skip to main content

Overview

Font pairings combine three fonts (heading, body, and mono) with complete CSS configurations for typography across all HTML elements. Each pairing includes metadata, dependencies, CSS variables, and styles.

Schema Structure

Root Fields

string
required
Unique identifier for the pairing, typically prefixed with pairing-Example: "pairing-minimal", "pairing-brutalist"
string
required
Registry type identifier. Always "registry:style" for pairings.
string
required
Base style to extend from. Use "none" for standalone pairings.
string
required
Human-readable title showing the pairing name and font combinationFormat: "{Name} — {Heading} + {Body} + {Mono}"Example: "Minimal — Geist + Geist + Geist Mono"
string
required
Descriptive text explaining the pairing’s aesthetic and design philosophy
string[]
required
Array of category tags for filtering and discoveryCommon categories: "sans-serif", "serif", "minimal", "modern", "brutalist", "display", "bold"

Dependencies

string[]
required
Array of URLs pointing to font configurations in the registryEach URL typically references 2-3 fonts:
  • Heading font
  • Body font
  • Monospace font
Format: "https://www.fonttrio.xyz/r/{font-name}.json"

CSS Variables

object
required
Defines CSS custom properties for theme integration
object
required
Theme-level CSS variables
string
required
CSS variable reference for heading fontExample: "var(--font-geist)"
string
required
CSS variable reference for body fontExample: "var(--font-inter)"
string
required
CSS variable reference for monospace fontExample: "var(--font-geist-mono)"

CSS Styles

object
required
Complete typography styles for all HTML elements. Keys are CSS selectors, values are style objects.
object
required
Styles for primary headings
string
required
Font family, typically referencing var(--font-heading)
string
required
Font size in rem, em, or pxExample: "2.25rem"
string
required
Unitless line height valueExample: "1.15"
string
required
Letter spacing in em unitsExample: "-0.025em"
string
required
Font weight value (100-900)Example: "700"
object
Similar structure to h1, can target multiple selectors
object
required
Styles for body text and paragraphs
string
required
Body font family, typically var(--font-body)
string
required
Line height for body textExample: "1.6"
object
required
Styles for code elements
string
required
Monospace font family, typically var(--font-mono)

Metadata

object
Additional metadata for preview and categorization
string
Sample text for font previewDefault: "The quick brown fox jumps over the lazy dog"
string[]
Array of mood descriptorsExamples: ["modern", "minimal"], ["raw", "brutalist"]
string[]
Suggested use cases for the pairingExamples: ["SaaS", "developer tools"], ["portfolio", "art"]

Complete Examples

Minimal Pairing

A clean, modern single-font pairing using Geist:

Brutalist Pairing

A bold, high-contrast pairing with Archivo Black:

CSS Override Behavior

When query parameters are provided to the API endpoint, the CSS properties are dynamically overridden:

Example Request

Resulting CSS

The returned JSON will have modified CSS:
Implementation: app/api/r/[name]/route.ts:47-85

Usage in Next.js

See Also

Font Schema

Schema for individual font configurations

API Endpoints

Complete endpoint reference with examples