Typography

Type scale classes for headings, body text, and helper styles.
The quick brown fox
iOS
The quick brown fox
Android
The quick brown fox
Web
tsx
<Typography>The quick brown fox</Typography>

Props

Prop
Description
children
ReactNode
—
display
boolean
Role (pick one; default is the plain body style). First-match precedence.
h1
boolean
Role (pick one; default is the plain body style). First-match precedence.
h2
boolean
Role (pick one; default is the plain body style). First-match precedence.
h3
boolean
Role (pick one; default is the plain body style). First-match precedence.
h4
boolean
Role (pick one; default is the plain body style). First-match precedence.
h5
boolean
Role (pick one; default is the plain body style). First-match precedence.
lead
boolean
Role (pick one; default is the plain body style). First-match precedence.
body
boolean
Role (pick one; default is the plain body style). First-match precedence.
small
boolean
Role (pick one; default is the plain body style). First-match precedence.
tiny
boolean
Role (pick one; default is the plain body style). First-match precedence.
muted
boolean
Role (pick one; default is the plain body style). First-match precedence.
caption
boolean
Role (pick one; default is the plain body style). First-match precedence.
code
boolean
Role (pick one; default is the plain body style). First-match precedence.
mono
boolean
Role (pick one; default is the plain body style). First-match precedence.
subtle
boolean
Tone (pick one; orthogonal to role). When omitted, the role's own color is used.
primary
boolean
Tone (pick one; orthogonal to role). When omitted, the role's own color is used.
destructive
boolean
Tone (pick one; orthogonal to role). When omitted, the role's own color is used.
success
boolean
Tone (pick one; orthogonal to role). When omitted, the role's own color is used.
warning
boolean
Tone (pick one; orthogonal to role). When omitted, the role's own color is used.
regular
boolean
Weight (pick one; orthogonal to role). When omitted, the role's own weight is used.
medium
boolean
Weight (pick one; orthogonal to role). When omitted, the role's own weight is used.
semibold
boolean
Weight (pick one; orthogonal to role). When omitted, the role's own weight is used.
bold
boolean
Weight (pick one; orthogonal to role). When omitted, the role's own weight is used.
tightLeading
boolean
Leading (orthogonal to role). Pulls the line box in to 1.25x the font size for a STACKED LOCKUP, where two lines read as one unit (a wordmark over its tagline, a title over its subtitle) and the roles reading leading would leave dead air between them. Only ever tightens, so it is safe on every role. Omit for prose: the role's own line height is the reading value.
underline
boolean
Decoration (orthogonal to role / tone / weight). Underlines the text so an inline text link reads as a link, replacing the banned raw `textDecorationLine` style shim. Combines freely with every role, tone, and weight; omit for undecorated text.
tabular
boolean
Numerals (orthogonal to role / tone / weight). Tabular figures: every digit the same width, for numbers read down a column or updated in place (a table's figures, a live metric, a counter), so the column lines up and a changing value holds still. Never for prose, which keeps the face's own proportional figures.
href
string
Renders this text as a REAL inline link on the web: react-native-web gives the root element a browser link with this destination, so middle-click, cmd-click, and open-in-new-tab work and assistive tech hears a link. Native platforms have no browser links and ignore it, so pair `href` with an `onPress` running the same navigation through the host's router. Combine with `underline` for the conventional link look. When a heading role and `href` are both set, the link role wins.
hrefAttrs
{ target?: "_blank" | "_self"; rel?: string; download?: boolean | string }
Attributes forwarded with `href` on the web: `target`, `rel`, `download`.
onPress
(event: GestureResponderEvent) => void
Press handler; the native navigation path for `href` (fires on web too).
testID
string
E2E hook forwarded to the root element.
style
StyleProp<TextStyle>
For layout/positioning composition only (margins handled by Row/Column). Not a styling escape hatch: size, color, and weight come from the props above.

Do & Don’t

display

Don’t

Welcome

Get started

Two display-size lines in one view fight for attention and leave no clear focal point.
Do

Welcome

Sign in to pick up where you left off.
Use display once per hero, then drop to a muted line for the supporting copy.

h1

Don’t

Billing

Invoices

Two h1 titles on a page break the document outline and confuse assistive tech.
Do

Billing

Invoices

Give each page a single h1, then step down to h2 for the sections beneath it.

h2

Don’t

Settings

Profile

Jumping from h1 straight to h4 skips a level and flattens the visible hierarchy.
Do

Settings

Profile

Follow an h1 with h2 for its top-level sections; don't skip the scale.

h3

Don’t

Canvas is a universal React Native UI kit for building consistent product interfaces.

Body copy set in a heading style is hard to read in bulk and flattens the hierarchy.
Do

About Canvas

Canvas is a universal React Native UI kit for building consistent product interfaces.
Reserve heading styles for titles; set running text in a small body utility.

h4

Don’t

Notifications

A long descriptive sentence that explains everything in detail.

h4 is a minor heading, not a place for full sentences; long text at this weight reads as a wall.
Do

Notifications

Choose how and when we reach you.
Keep h4 to a short label and carry the explanation in a small supporting line.

h5

Don’t
Members
Aisha, Bao, Cleo, and 9 others have access.
Setting the value in h5 too makes the label and its data indistinguishable.
Do
Members
Aisha, Bao, Cleo, and 9 others have access.
Use h5 only for the label; render the value in body so the pair stays scannable.

body

Don’t
npm installTHEN restart the dev server BEFORE you continue.
All-caps emphasis inside body copy shouts and undercuts the relaxed reading rhythm.
Do
Runnpm install, then restart the dev server before you continue.
Keep body copy in sentence case and let inline code carry the technical emphasis.

small

Don’t
small is muted-foreground; on a colored button it loses contrast and looks disabled.
Do
Save changes
Last saved 2 minutes ago.
Use small for secondary captions on a plain surface, not for the primary label.

tiny

Don’t
These terms govern your use of the service and your data; please read them carefully before you continue past this screen.
tiny is for metadata, not legal prose; long copy at 11px strains the eye.
Do
Deploy succeeded
3m ago
Reserve tiny for short metadata like timestamps and counts beside the main text.

muted

Don’t
View your invoices
A primary, clickable action in muted-foreground reads as disabled and is easy to miss.
Do
Payment due May 31.View invoices
Keep muted for de-emphasized context; give the actual action full foreground or primary color.

caption

Don’t
Your subscription renews automatically each month unless you cancel from the billing page.
Uppercase, letter-spaced caption text is illegible for anything longer than a label.
Do
Billing
Your subscription renews automatically each month.
Use caption as a short eyebrow label above a section, then explain in body.

code

Don’t
git checkout -b feature git add . git commit -m "wip"
The inline code utility has tight padding and no scroll; multi-line blocks overflow and clip.
Do
Create a branch withgit checkout -b featurebefore committing.
Use code for inline tokens inside a sentence; reach for the code block component for multi-line snippets.

mono

Don’t
We could not process your request because the upstream service returned an unexpected response.
Mono spacing makes prose sentences sparse and slow to read; it is meant for fixed-width data.
Do
Request ID
req_8f2c10ab
Use mono for identifiers and hashes, where every character must line up; set figures in a column or a changing value in tabular instead.

tabular

Don’t
Your 14 invoices from 2024 total $1,180.
Tabular figures in running prose space the digits out of the sentence's rhythm; prose keeps the face's own figures.
Do
Uptime
99.982%
Latency
118 ms
Set figures read down a column or updated in place in tabular, so every digit takes the same width and the column lines up.

Inline links (href)

Inline text that NAVIGATES should be a real link, not pressable text that sets location: pass href and the web render becomes a genuine browser link (middle-click, new tab, crawlers, and assistive tech all treat it as one). Native platforms ignore href, so pair it with an onPress that runs the same navigation through your router; underline supplies the conventional link look, and hrefAttrs forwards target / rel / download on the web.
Read the Canvas docs for the full component list.
tsx
<Typography small>
Read the <Typography small underline href="https://canvas.nannier.com">Canvas docs</Typography> for the full component list.
</Typography>