Fonts

Report every font family used during render, with weight, style, and the resolved fallback chain Compose actually picked.

At a glance

   
Kind fonts/used
Schema version 1
Modules :data-fonts-core (published) · :data-fonts-connector
Render mode default
Cost low
Token usage Inline JSON, not yet benchmarked. See token usage.
Transport inline
Platforms Android · Desktop · shared

What it answers

  • Which font families ended up on screen?
  • For each Text(...) call site, what weight / style was requested vs. what the resolver returned?
  • Did Compose fall back to a system font because a custom font failed to load?
  • Are any glyphs being served by a font you didn’t expect to ship in the APK / app bundle?

What it does NOT answer

  • It does not measure font file size, CFF subsetting, or runtime download cost — that is a build-tools / Play asset delivery question.
  • It does not validate whether a glyph is visually correct (Han ideograph variants, complex script shaping) — that requires designer review against the rendered PNG.

Hosted Linux fallback coverage

The GitHub preview actions, reusable design-catalog workflow, and official preview-server images install Noto’s core, CJK, and color-emoji families as system fallbacks. Skiko therefore fills glyphs that an app’s selected family does not contain—Arabic, Indic, Thai, CJK, and emoji—without requiring the app to rewrite its MaterialTheme for previews. The installer preserves the host’s existing generic sans, serif, and monospace choices, and an app’s explicitly bundled family still wins.

Direct local CLI renders continue to use the operating system’s installed fallback fonts, just as the application does at runtime. Install equivalent Noto packages on a minimal Linux workstation if it does not already provide those scripts.

Use cases

  • Catch accidental fallback to sans-serif after a FontFamily.Resolver refactor.
  • Verify a paid brand font is the one actually drawing your headings, not a system stand-in.
  • Audit a Wear app’s text for legibility-critical weights (Medium / SemiBold) the design system requires.

Payload shape

FontsUsedPayload, FontUsedEntry in :data-fonts-core.

// fonts/used
{
  "fonts": [
    { "family": "Roboto", "weight": 500, "style": "Normal",
      "source": "system", "fallbackFrom": null },
    { "family": "Inter", "weight": 700, "style": "Italic",
      "source": "asset", "fallbackFrom": "InterVariable" }
  ]
}

Enabling

Producer runs by default once the Fonts extension is publicly enabled (extensions/enable). On the CLI / Gradle path the JSON lands at build/compose-previews/data/<id>/fonts-used.json.

Companion products

  • Stringstext/strings for the actual drawn text the fonts rendered.
  • Themecompose/theme for the resolved typography tokens that picked these fonts.

Apache 2.0 licensed. Source on GitHub.

This site uses Just the Docs, a documentation theme for Jekyll.