Skip to content

Typography

Open Sans carries everything: light for large headings, regular for reading, semibold for labels. Body text is 14px with a 1.6 line height, as on jsonresume.org.

In use

Overline, light title, muted lede, then body copy: the opening of every jsonresume.org page.

A docs page opening

Getting started

Command Line Tool

We've built a CLI that runs on macOS, Linux and Windows. Use it to validate, export and serve your resume.

Install it globally with npm, then run it from the folder that holds your resume.json. Every theme on the theme gallery works with it.

typography/composition.tsx
import { Heading, Link, Stack, Text } from '@jsonresume/ui';

// A docs page opening: overline, light title, lede, body, link.
export default function TypographyComposition() {
  return (
    <Stack gap={3}>
      <Text caps tone="muted">
        Getting started
      </Text>
      <Heading level={2} size="title">
        Command Line Tool
      </Heading>
      <Text size="md" tone="muted" measure>
        We&apos;ve built a CLI that runs on macOS, Linux and Windows. Use it to
        validate, export and serve your resume.
      </Text>
      <Text measure>
        Install it globally with npm, then run it from the folder that holds
        your resume.json. Every theme on the{' '}
        <Link href="#typography">theme gallery</Link> works with it.
      </Text>
    </Stack>
  );
}

Line length

Running text keeps a 72-character measure. Use the measure prop on Text, or Prose.

Measure versus full width

Do: measure

JSON Resume is a community driven open-source initiative to create a JSON-based standard for resumes. We believe the strengths of the JSON format make it a good fit for resumes: it is lightweight, easy to read, and easy to build tools for.

Don't: full width

JSON Resume is a community driven open-source initiative to create a JSON-based standard for resumes. We believe the strengths of the JSON format make it a good fit for resumes: it is lightweight, easy to read, and easy to build tools for.

Show code
typography/measure.tsx
import { Stack, Text } from '@jsonresume/ui';

const copy =
  'JSON Resume is a community driven open-source initiative to create a JSON-based standard for resumes. We believe the strengths of the JSON format make it a good fit for resumes: it is lightweight, easy to read, and easy to build tools for.';

// Keep running text to about 72 characters per line. Wider lines make the
// eye lose its place when it returns to the start of the next line.
export default function TypographyMeasure() {
  return (
    <Stack gap={6}>
      <Stack gap={1}>
        <Text caps tone="muted">
          Do: measure
        </Text>
        <Text size="md" measure>
          {copy}
        </Text>
      </Stack>
      <Stack gap={1}>
        <Text caps tone="muted">
          Don&apos;t: full width
        </Text>
        <Text size="md">{copy}</Text>
      </Stack>
    </Stack>
  );
}

Guidelines

Do

  • Use light (300) only at 22px and up; it gets thin and faint below that.
  • Write headings and labels in sentence case; CSS uppercases buttons.
  • Use one h1 per page, and pick heading sizes with the size prop, not the level.
  • Keep body text at 14px; step up to md (16px) for long reading.

Don’t

  • Bold large headings.
  • Set paragraphs in uppercase or letter-spaced type.
  • Use the wordmark face (Ubuntu) for anything but the logo.
  • Center long paragraphs.

Families

TokenStackUse
font.family.sans'Open Sans'Everything
font.family.wordmark'Ubuntu'The JSON Resume wordmark only
font.family.monoui-monospaceCode, tokens, file names

Heading sizes

Resumes as JSON

size="display" · 3.25rem · Light · Landing pages

Resumes as JSON

size="title" · 2.5rem · Light · Page titles (h1)

Resumes as JSON

size="section" · 1.75rem · Light · Sections

Resumes as JSON

size="subsection" · 1.375rem · Regular · Sub-sections

Resumes as JSON

size="group" · 1.125rem · Semibold · Groups and card titles

Resumes as JSON

size="label" · 1rem · Semibold · Small headings

Type scale

The quick brown foxfont.size.2xs · 0.6875rem
The quick brown foxfont.size.xs · 0.75rem
The quick brown foxfont.size.sm · 0.875rem
The quick brown foxfont.size.md · 1rem
The quick brown foxfont.size.lg · 1.125rem
The quick brown foxfont.size.xl · 1.375rem
The quick brown foxfont.size.2xl · 1.75rem
The quick brown foxfont.size.3xl · 2.5rem
The quick brown foxfont.size.4xl · 3.25rem

Weights and line heights

font.weight.lightOpen Sans 300
font.weight.regularOpen Sans 400
font.weight.semiboldOpen Sans 600
font.weight.boldOpen Sans 700
font.lineHeight.tight1.15
font.lineHeight.snug1.35
font.lineHeight.normal1.6

Letter-spaced uppercase (tracking.caps, 0.09em) is for buttons and short labels only.