Typst Guide

Typst CV / Resume

Build a clean, modern CV in Typst. Plain-text source. Git-versionable. Compiles to PDF in milliseconds. Better typography defaults than Word.

A minimal one-page Typst CV

#set page(margin: 0.75in, paper: "us-letter")
#set text(font: "Inter", size: 10pt)
#set par(leading: 0.6em)

// Section heading style
#show heading.where(level: 1): it => {
  v(0.5em)
  text(weight: "bold", size: 13pt, fill: rgb("#1A4480"), it.body)
  v(0.2em)
  line(length: 100%, stroke: 0.5pt + rgb("#1A4480"))
  v(0.3em)
}

// Header — name and contact
#align(center)[
  #text(size: 22pt, weight: "bold")[Your Name]

  #text(size: 9pt)[
    Email · Phone · #link("https://github.com/you")[GitHub] · #link("https://linkedin.com/in/you")[LinkedIn]
  ]
]

= Education
*PhD in Computer Science* #h(1fr) 2020–2025 \
University Name, City \
_Dissertation: "Title of dissertation"_

*BS in Mathematics* #h(1fr) 2016–2020 \
University Name, City

= Experience
*Research Scientist* #h(1fr) 2024–present \
Company Name \
- Bullet point on achievement
- Another achievement
- Quantified result

= Publications
1. Author, A., *Your Name*, Author, B. (2024). Paper title. _Conference Name_.
2. *Your Name*, Author, A. (2023). Another paper. _Journal Name_.

= Skills
*Programming:* Python, Rust, TypeScript \
*Tools:* Typst, LaTeX, Git, Docker

Two-column layout (sidebar + main)

#grid(
  columns: (1fr, 2fr),
  column-gutter: 1em,

  // Left sidebar
  [
    = Contact
    Email \
    Phone \
    LinkedIn

    = Skills
    Python \
    Rust \
    TypeScript
  ],

  // Main column
  [
    = Experience
    *Senior Engineer* — Company \
    2024–present
    - Description

    = Education
    PhD — University, 2020
  ],
)

Use a community template

#import "@preview/modern-cv:0.2.0": *

#show: cv.with(
  author: "Your Name",
  email: "you@email.com",
  phone: "+1-555-0100",
  github: "yourhandle",
  linkedin: "yourhandle",
)

= Education
... (use the template's structured macros)

Common patterns

  • Right-aligned dates: use #h(1fr) between job title and date.
  • Section divider line: #line(length: 100%, stroke: 0.5pt) after a heading.
  • One-page enforcement: #set page(height: auto) + careful content; or use a template that enforces single page.
  • Print-ready: default Typst output is print-ready PDF with embedded fonts.
Get a Typst CV template

TypeTeX includes academic and modern CV templates ready to use. Open one, replace the placeholder text, and download a PDF in 30 seconds. Free.

Frequently Asked Questions

Why use Typst for a CV instead of Word or LaTeX?

Three reasons: (1) Typst's clean syntax makes layout iteration fast — change a font or spacing once and it propagates; (2) compiles in milliseconds so you can tweak and preview rapidly; (3) version-controllable plain text — your CV history lives in git, not Word .docx files. Compared to LaTeX moderncv: simpler syntax, no package conflicts, better default typography.

How do I start a Typst CV?

Set up document defaults: #set page(margin: 0.75in), #set text(font: "Inter", size: 10pt). Define a section header style with #show heading. Then write each section (Education, Experience, Publications) using = headings. The whole CV fits in 100-150 lines of Typst.

Can I use a pre-made Typst CV template?

Yes. The Typst Universe (typst.app/universe) hosts community CV templates: 'modern-cv', 'simple-cv', 'didactic-cv', and academic-specific variants. Import with #import "@preview/modern-cv:0.2.0": *. TypeTeX includes several CV templates pre-loaded.

How do I make a two-column CV in Typst?

#set page(columns: 2) for full document. For partial two-column (sidebar with contact, main with experience): use #grid(columns: (1fr, 2fr), [sidebar content], [main content]). Or place a contact box at the top with #place(top + right). Most CV templates use the grid approach for the sidebar.

How do I list publications in a Typst CV?

Either inline as a list, or import from your BibTeX file. Inline: a list of formatted entries with #set list(marker: none) so it doesn't show bullets. From BibTeX: #bibliography("my-pubs.bib", style: "apa", title: none). The 'title: none' suppresses the auto-generated 'Bibliography' heading.

How do I make my Typst CV look modern (not LaTeX-like)?

Use a sans-serif font like Inter, Helvetica, or Lato. Tighter line spacing (#set par(leading: 0.5em)). Bold for job titles, regular for company names, italic for dates. Use color sparingly — one accent color (e.g., dark blue for section headings) on monochrome body. Look at modern-cv template for an example of this aesthetic.

How do I export my Typst CV to PDF?

Click compile in TypeTeX or run typst compile cv.typ on the command line. PDF is the only output format Typst produces by default — exactly the format recruiters and hiring committees want. The PDF includes embedded fonts so it renders identically on any device.

Can I have a different one-page resume and longer academic CV from one source?

Yes — use #if conditionals based on a 'mode' variable: #let mode = "resume". Then conditionally include sections: #if mode == "cv" { [extended publications list] }. One source file, two outputs (one-page resume vs full academic CV) by changing one variable.

More Typst guides