A modular Typst resume template for shipping multiple targeted one-page CVs from one clean content source.
- One file per work experience or project
- Multiple role-specific resume profiles from the same dataset
- Compile-time overrides for fast custom variants
- Small, readable Typst and YAML instead of heavy template logic
- GitHub Actions CI that compiles every profile on push
- Install Typst.
- Replace the sample data in
base.yml,profiles.yml, andmodules/. - Build the default resume:
make compile PROFILE=software-engineerOutput lands in build/software-engineer.pdf.
software-engineer: balanced backend and product engineering resumeinfra-platform: platform, backend, and reliability emphasisml-systems: ML infrastructure and GPU systems angleresearch-heavy: projects before work experience
List available profiles:
make profilesBuild all profiles:
make allWatch one profile:
make watch PROFILE=infra-platformRun checks:
make check-allRefresh the README preview image:
make preview PROFILE=software-engineer.
├── main.typ
├── base.yml
├── profiles.yml
├── modules/
│ ├── work/
│ └── projects/
├── lib/
│ ├── style.typ
│ ├── modules.typ
│ └── utils.typ
├── scripts/style-check.sh
└── .github/workflows/ci.yml
base.ymlstores shared identity, education, and skills.modules/work/*.ymlstores one experience block per file.modules/projects/*.ymlstores one project per file.profiles.ymlassembles targeted resume variants by selecting module keys.main.typrenders the selected profile into a single-page PDF.
You can also override selections without editing profiles.yml:
typst compile main.typ build/custom.pdf \
--input profile=software-engineer \
--input work=northstar-cloud,aperture-ai \
--input projects=distributed-cache,query-engine- Replace the sample identity in
base.yml. - Edit or duplicate files under
modules/work/andmodules/projects/. - Recompose your variants in
profiles.yml. - Run
make check-allbefore pushing.
Profiles can override section order with sectionOrder. Supported values are education, work, projects, and skills.
- The template stays warning-free by default and ships with an English sample dataset.
- To render Chinese content, point
headingfontandbodyfontinmain.typat fonts installed on your machine. - Chinese documentation is available in README.zh-CN.md.
Example CJK font override:
#let uservars = (
..default-uservars,
headingfont: ("Songti SC", "Source Han Serif SC", "Noto Serif CJK SC"),
bodyfont: ("Songti SC", "Source Han Serif SC", "Noto Serif CJK SC"),
margin: 0.40in,
fontsize: 10pt,
linespacing: 6pt,
)- Create a new GitHub repository named
typst-cv. - Mark it as a template repository.
- Set
assets/project-hero.svgorassets/resume-preview.pngas the social preview image. - Use a short repo description like:
Modular Typst resume template for role-specific one-page CVs.
MIT