Universe

Create project in app

A professional, highly configurable academic CV template built with Typst. We hope this template helps you create a standout academic CV. Good luck with your academic endeavors!

P1 P2 P3

You can find the examples in examples/main.pdf.

  • Clean & professional design — Organized layout suitable for various academic disciplines, with customizable sections for education, experience, publications, awards, and more
  • Powered by Typst — Faster compilation, simpler syntax, and easier setup than LaTeX; works locally or in the Typst online editor with no package installation
  • Friendly, composable API — Modular primitives and templates (r2c2-entry-list, publication-entry-list, etc.) that can be mixed and reused with minimal boilerplate
  • Refined spacing & typography — Fine-tuned vertical spacing (automatically adjusts based on font size) for headings, paragraphs, lists, and entries to maintain consistent visual rhythm across sections
  • Elegant link styling — Links use a subtle light-gray underline instead of colored text, keeping the focus on content while remaining identifiable; an optional lightweight SVG link icon is available for compact link indicators
  • Fully configurable — All settings (fonts, margins, heading styles, list spacing, link appearance) are exposed as named parameters with sensible defaults

Quick Start

Use the following CLI command to initialize a new project from this template:

typst init @preview/pro-academic-cv

Or search for pro-academic-cv on Typst Universe to use it directly in the online editor.

Interface Reference

resume — Page & Document Setup

The top-level show rule that configures the entire document. All parameters have sensible defaults and can be overridden individually.

#show: resume.with(
  margin: (left: 1.4cm, right: 1.2cm, top: 0.8cm, bottom: 1cm),
  font-settings: (
    font-family: "Palatino",
    font-size: 10pt,
    author-font-size: 25pt,
    lang: "en",
  ),
  par-settings: (
    leading: 0.5em,
    spacing: 0.5em,
  ),
  list-settings: (
    bullet-list-spacing: 0.7em,
    numbered-list-spacing: 0.7em,
  ),
  link-line-settings: (
    stroke: 0.5pt + luma(200),
    offset: 2pt,
  ),
  heading-settings: (
    above-spacing: 1.2em,
    below-spacing: 0.6em,
    section-title-size: 1.1em,
    section-title-weight: "semibold",
    section-note-size: 0.8em,
    section-note-weight: "light",
    section-line-above-spacing: -0.85em,
    line-length: 100%,
    line-stroke: 0.04em + black,
  ),
  author-info: (
    name: "John Doe",
    primary-info: [+1-234-567-8900 | john.doe\@example.com | john-doe.com],
    secondary-info: [linkedin | github | google-scholar | orcid],
    tertiary-info: "Your City, Your State - Your ZIP, Your Country",
  ),
  author-position: center,
)
Parameter Type Description
margin dictionary Page margins (left, right, top, bottom)
font-settings dictionary Font family, sizes, and language
par-settings dictionary Paragraph leading and spacing
list-settings dictionary Bullet and numbered list spacing
link-line-settings dictionary Underline stroke and offset for hyperlinks
heading-settings dictionary Section title size, weight, line style, and spacing
author-info dictionary Name and up to three rows of contact info
author-position alignment Header alignment (default: center)

Renders an SVG link icon inline with text. Useful for compact link indicators in entry headers.

#link("https://example.com")[#link-icon()]
#link("https://example.com")[#link-icon(color: blue, height: 1em, baseline: 15%)]
Parameter Type Default Description
color color rgb("#1a405d") Icon stroke color
height length 0.9em Icon height
baseline ratio 20% Vertical baseline shift

Section Heading Notes

Section headings support an inline note via the (note: ...) syntax:

== Patents~&~Publications (note:C=Conference, J=Journal, P=Patent)

This renders the main title in small caps on the left and the note text in lighter weight on the right.


Primitives

Low-level building blocks used directly or composed into templates.

row2col — Two-Column Row

A single row with left-aligned and right-aligned content.

#row2col([Left content], [Right content])

single-line-entry — Single-Line Entry

A labeled entry with a bold label, inline value, and right-aligned content. Use for memberships, certifications, and simple dated items.

#single-line-entry("Programming Languages:", [Python, Rust, Go], [])
#single-line-entry([Certification A], [], [Month Year])
Parameter Type Default Description
label content Bold label text
value content Inline value after the label
rcontent content Right-aligned content
label-args dictionary (weight: "bold") Override label text style
rc-args dictionary (size: 0.9em, style: "italic") Override right-content text style

multi-line-list — Multi-Line List

Renders items as a bullet or numbered list.

#multi-line-list(
  [Item 1],
  [Item 2],
)
#multi-line-list(list-type: "enum", [First], [Second])
Parameter Type Default Description
list-type string "list" "list" for bullets, "enum" for numbered
list-args dictionary (:) Extra arguments passed to list()
enum-args dictionary (:) Extra arguments passed to enum()

multi-line-text — Multi-Line Text

Renders content items separated by line breaks (no bullets).

#multi-line-text(
  [Line 1],
  [Line 2],
)

r2c2-entry-header — Two-by-Two Entry Header

A two-row, two-column header block. Top-left is bold, others are italic/smaller.

#r2c2-entry-header(
  top-left: [Company Name],
  top-right: [2020 - 2024],
  bottom-left: [Software Engineer],
  bottom-right: [San Francisco, CA],
)
Parameter Type Default Style Description
top-left content bold Primary title (company, school, project)
top-right content 0.9em, italic Date range
bottom-left content 0.9em, italic Subtitle (role, degree)
bottom-right content 0.9em Location or link
*-args dictionary Override text style for any quadrant

r2c2-entry — Entry with List Items

Combines an r2c2-entry-header with a bullet (or numbered) list of detail items underneath.

#r2c2-entry(
  entry-header-args: (
    top-left: [Google Research],
    top-right: [2022 - Present],
    bottom-left: [Research Scientist],
    bottom-right: [Mountain View, CA],
  ),
  list-items: (
    [Developed a novel approach to ...],
    [Published 3 papers in top venues],
  ),
)
Parameter Type Default Description
entry-header-args dictionary Arguments forwarded to r2c2-entry-header
list-items array () Array of content items
list-type string "list" "list" for bullets, "enum" for numbered
list-args dictionary (spacing: 0.5em) Extra arguments for list()
enum-args dictionary (spacing: 0.5em) Extra arguments for enum()

personal-info — Personal Info Block

A multi-line text block for a single person’s contact information.

#personal-info(
  [Prof. Jane Smith],   // name
  [Associate Professor], // title
  [MIT CSAIL],           // org
  [jane\@mit.edu],      // email
  [+1-555-0100],        // phone
  [Thesis Advisor],     // note
)

Templates

Higher-level components that compose primitives into repeatable section patterns.

r2c2-entry-list — Entry List

Renders a vertical stack of r2c2-entry items. Use for experience, education, projects, awards, leadership, and volunteer sections.

#r2c2-entry-list(
  (
    entry-header-args: (:),
    list-items: (:),
  ),
  (
    entry-header-args: (:),
    list-items: (:),
  ),
)
Parameter Type Default Description
spacing length 0.8em Vertical gap between entries
..entries variadic Each entry is a dictionary forwarded to r2c2-entry

publication-entry-list — Publication List

Auto-numbered publication list grouped by category prefix (e.g., C for Conference, J for Journal).

#publication-entry-list(
  (
    (category: "C", value: [Author et al. (2024). *Title*. In _Proc. ..._.]),
    (category: "C", value: [Author et al. (2023). *Title*. In _Proc. ..._.]),
    (category: "J", value: [Author et al. (2023). *Title*. _Journal_, ...]),
    (category: "P", value: [Inventor et al. (2023). *Patent Title*. ...]),
  ),
)
Parameter Type Default Description
entries array Array of (category: str, value: content) dictionaries
number-style string "descending" "descending": most recent = highest number; "ascending": first = 1
column-gutter length 1.3em Gap between label and content columns
row-gutter length 0.9em Vertical gap between entries
label-width length/auto auto Width of the label column

personal-info-list — Personal Info List

Renders a list of personal-info blocks. Use for reference sections.

#personal-info-list(
  (
    (name: [Prof. Jane Smith], title: [Associate Professor], org: [MIT], email: [jane\@mit.edu], phone: [+1-555-0100], note: [Thesis Advisor]),
    (name: [Dr. John Doe], title: [Senior Engineer], org: [Google], email: [john\@google.com], phone: [+1-555-0200], note: [Manager]),
  ),
)
Parameter Type Default Description
items array Array of personal info dictionaries
spacing length 1em Vertical gap between entries
list-type string "enum" "enum" for numbered, "list" for bullets

Dependency Graph

Shows how primitives compose into templates.

Primitives                          Templates
──────────                          ─────────

row2col ◄─────────┐
                   ├── r2c2-entry-header ◄── r2c2-entry ◄── r2c2-entry-list
                   │
single-line-entry ◄┘
                        (used directly with multi-line-list)

multi-line-text ◄────── personal-info ◄──── personal-info-list

multi-line-list          (used directly in sections)

publication-entry-list   (standalone template, uses grid internally)

link-icon                (standalone primitive, used inline)

Detailed composition:

Template Depends on (Primitives)
r2c2-entry-header row2col
r2c2-entry r2c2-entry-header
r2c2-entry-list r2c2-entryr2c2-entry-headerrow2col
personal-info multi-line-text
personal-info-list personal-infomulti-line-text
publication-entry-list (self-contained, uses grid)

Contributing

Contributions are welcome! Please feel free to submit issues and pull requests.

License

This project is licensed under the MIT License.

Original Template Attribution

This Typst template is derived from the Academic CV Template - Overleaf, Online LaTeX Editor by Dubasi Pavan Kumar, originally written in LaTeX and licensed under the Creative Commons Attribution 4.0 International License (CC BY 4.0).