Skip to content

christiankopac/typst-resume-and-cover-letter-template

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

1 Commit
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Typst Resume Template

A professional, multi-language resume template system built with Typst. Generate CVs, resumes, and cover letters in multiple languages (English, German, Slovenian) with a unified template system and flexible override mechanism.

Features

  • Single template files: One template each for CV, resume, and cover letter
  • Multi-language support: Compile in EN/DE/SI by passing language parameter
  • Override system: Create custom variants via YAML files in src/data/overrides/
  • Centralized strings: All UI text (section headers, labels) in data.yml
  • Automatic compilation: Script compiles all base files + overrides
  • Professional typography: Uses Libertinus Serif, Overpass, and HK Grotesk fonts

Requirements

Prerequisites

  1. Typst - The typesetting system used to compile templates

    • Installation: Visit typst.app or use your package manager:
      # macOS (Homebrew)
      brew install typst
      
      # Linux (using the install script)
      curl -fsSL https://raw.githubusercontent.com/typst/typst/main/install.sh | sh
      
      # Windows (Scoop)
      scoop install typst
    • Verify installation: Run typst --version to confirm it's installed
  2. Bash - For the compilation script (available on macOS, Linux, and Windows via WSL/Git Bash)

System Requirements

  • Typst 0.11.0 or later
  • Bash 4.0 or later
  • 50MB free disk space for fonts and output files

Installation

  1. Clone or download this repository:

    git clone <repository-url>
    cd typst_resume_template
  2. Make the compilation script executable (if not already):

    chmod +x compile.sh
  3. Add your signature image (optional, for cover letters):

    • Place a PNG image at src/data/signature.png
    • Recommended size: 200x100px or similar aspect ratio
    • If you don't have a signature, the template will still work (you may want to comment out the signature line in cover.typ)
  4. Customize your data:

    • Edit src/data/data.yml with your personal information
    • Replace the example data (currently using Dr. Emmett Brown as a placeholder)

Quick Start

# Compile all base files (3 languages Γ— 3 templates = 9 PDFs)
# Plus any override files
./compile.sh

This will generate PDFs in the output/ directory:

  • cv_en.pdf, cv_de.pdf, cv_si.pdf
  • resume_en.pdf, resume_de.pdf, resume_si.pdf
  • cover_en.pdf, cover_de.pdf, cover_si.pdf
  • Plus any override variants you've created

Project Structure

typst_resume_template/
β”œβ”€β”€ README.md                 # This file
β”œβ”€β”€ compile.sh                # Compilation script
β”œβ”€β”€ .gitignore               # Git ignore rules
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ cv.typ               # CV template (multi-language)
β”‚   β”œβ”€β”€ resume.typ           # Resume template (multi-language)
β”‚   β”œβ”€β”€ cover.typ            # Cover letter template (multi-language)
β”‚   β”œβ”€β”€ sections.typ         # Reusable components
β”‚   β”œβ”€β”€ utils.typ            # Helper functions
β”‚   └── data/
β”‚       β”œβ”€β”€ data.yml         # Base data with translations + UI strings
β”‚       β”œβ”€β”€ signature.png    # Your signature image (add this)
β”‚       └── overrides/       # Optional: role/company-specific variants
β”‚           β”œβ”€β”€ resume_inventor_en.yml
β”‚           β”œβ”€β”€ cover_tech_en.yml
β”‚           └── *_TEMPLATE.yml.example
└── output/                  # Generated PDFs (created automatically)
    β”œβ”€β”€ cv_en.pdf
    β”œβ”€β”€ resume_en.pdf
    └── ...

Data Structure

Base Data (src/data/data.yml)

Contains:

  1. Content data: Personal info, work experience, skills, etc. (with translations)
  2. UI strings: Section headers, labels, etc. (with translations)

Example structure:

personal:
  name: "Your Name"
  email: "[email protected]"
  phone: "+1 (555) 123-4567"
  address: "City, Country"
  website: "https://yoursite.com"
  linkedin: "https://linkedin.com/in/yourprofile"
  github: "https://github.com/yourusername"

summary:
  en: "Your summary in English..."
  de: "Ihre Zusammenfassung auf Deutsch..."
  si: "Vaő povzetek v slovenőčini..."

work_experience:
  - organization:
      en: "Company Name"
    location: "City"
    positions:
      - position:
          en: "Job Title"
        startDate: "2020"
        endDate:
          en: "present"
        highlights:
          en:
            - "Achievement 1"
            - "Achievement 2"
        technologies: "Tech Stack"

# UI Strings for templates
strings:
  en:
    summary: "Summary"
    skills: "Skills"
    professional_experience: "Professional Experience"
    # ...

Override Files (src/data/overrides/)

Create variants by overriding specific fields. Naming convention:

  • {template}_{variant}_{lang}.yml
  • template: cv, resume, or cover
  • variant: descriptive name (e.g., backend, frontend, company name)
  • lang: en, de, or si

Examples:

# src/data/overrides/resume_backend_en.yml
summary:
  en: "Backend-focused summary highlighting Go and TypeScript..."

core_competencies:
  en:
    - "Backend Systems | Go | TypeScript/Node.js"
    - "System Architecture | DDD"
# src/data/overrides/cover_acme_en.yml
company:
  name:
    en: "Acme Corporation"
  address:
    en: "123 Main St, City, State"

application:
  position:
    en: "Senior Backend Engineer"
  paragraphs:
    en:
      - "Custom paragraph 1..."
      - "Custom paragraph 2..."

Important: Override files can ONLY override content data, NOT UI strings (section headers/labels). Those are defined once in data.yml.

Usage

Compilation

Automatic (Recommended)

# Compile all languages
./compile.sh

# Compile only English
./compile.sh en

# Compile English and German
./compile.sh en de

# Compile only Slovenian
./compile.sh si

This compiles:

  1. Base files: 9 PDFs (cv/resume/cover Γ— en/de/si)

    • output/cv_en.pdf
    • output/resume_de.pdf
    • etc.
  2. Override files: Automatically detected from src/data/overrides/

    • src/data/overrides/resume_backend_en.yml β†’ output/resume_backend_en.pdf
    • src/data/overrides/cover_acme_en.yml β†’ output/cover_acme_en.pdf

Manual Compilation

# Base file (English CV)
typst compile --root . --input lang=en src/cv.typ output/cv_en.pdf

# With override (English backend-focused resume)
typst compile --root . --input lang=en --input data=data/overrides/resume_backend_en.yml src/resume.typ output/resume_backend_en.pdf

# Cover letter with company override
typst compile --root . --input lang=en --input data=data/overrides/cover_acme_en.yml src/cover.typ output/cover_acme_en.pdf

Creating New Variants

  1. Create override file in src/data/overrides/:

    # For a new company cover letter
    touch src/data/overrides/cover_acme_backend_en.yml
  2. Add overrides (only fields you want to change):

    company:
      name:
        en: "Acme Corp"
    application:
      position:
        en: "Senior Backend Engineer"
  3. Run compilation:

    ./compile.sh
  4. Output: output/cover_acme_backend_en.pdf

Templates

CV (src/cv.typ)

Full 2-page curriculum vitae with:

  • Summary, core competencies
  • Professional experience, education
  • Skills (with management category)
  • Courses & certifications, volunteering

Resume (src/resume.typ)

One-page resume with:

  • Summary, core competencies
  • Professional experience, education
  • Skills (with cloud category)
  • Personal projects

Cover (src/cover.typ)

Professional cover letter with:

  • Company address block
  • Application details
  • Custom paragraphs
  • Signature

Customization

Changing Fonts

Edit the font settings in each template file:

#set text(
  font: "Libertinus Serif",  // Change this
  size: 10pt,
)

Available fonts depend on your Typst installation. Common options:

  • "Libertinus Serif" (default)
  • "Libertinus Sans"
  • "New Computer Modern"
  • "Linux Libertine"

Changing Colors

Add color settings to templates:

#set text(fill: rgb("#1a1a1a"))  // Dark gray text

Modifying Layout

Edit margin and spacing in template files:

#set page(
  margin: (x: 0.5in, y: 0.5in),  // Adjust margins
)

Adding/Removing Sections

Sections are conditionally rendered based on data presence. To add a new section:

  1. Add data to data.yml
  2. Add rendering logic to the appropriate template file
  3. Add UI strings to strings section in data.yml

Examples

This template includes example data for Dr. Emmett Brown (from Back to the Future) as a demonstration. You can:

  1. Review the example data in src/data/data.yml
  2. Check out example override files in src/data/overrides/:
    • resume_inventor_en.yml - Backend/inventor-focused resume
    • cover_tech_en.yml - Technology company cover letter

Troubleshooting

Typst Not Found

Error: typst command not found

Solution: Install Typst following the instructions in the Requirements section above.

Font Not Found

Error: Font rendering issues or warnings about missing fonts

Solution:

  • Typst includes default fonts, but you may need to install system fonts
  • Check Typst documentation for font installation
  • Consider using web fonts or embedding fonts

YAML Parsing Errors

Error: YAML syntax errors when compiling

Solution:

  • Validate your YAML syntax (use an online YAML validator)
  • Check for proper indentation (YAML is space-sensitive)
  • Ensure all strings are properly quoted if they contain special characters

Override File Not Found

Error: Override file not being compiled

Solution:

  • Check file naming: must match {template}_{variant}_{lang}.yml
  • Ensure file is in src/data/overrides/ directory
  • Verify language code matches (en, de, or si)

Signature Image Missing

Error: Cover letter compilation fails or shows missing image

Solution:

  • Add src/data/signature.png with your signature
  • Or comment out the signature line in src/cover.typ:
    // #image("./data/signature.png", width: 25%)

Tips

  • Keep data.yml as your source of truth
  • Use overrides sparingly (only what changes for that role/company)
  • UI string changes affect all outputs (change once in data.yml)
  • Override file names determine output file names
  • Delete old PDFs from output/ if needed: rm output/*.pdf
  • Use version control (git) to track changes to your resume data

Maintenance

To update section headers or labels:

  1. Edit strings section in src/data/data.yml
  2. Run ./compile.sh
  3. All outputs update automatically

To change template layout:

  1. Edit src/cv.typ, src/resume.typ, or src/cover.typ
  2. Run ./compile.sh
  3. All language variants update automatically

To add a new language:

  1. Add language code to VALID_LANGUAGES in compile.sh
  2. Add translations to all relevant fields in data.yml
  3. Add UI strings for the new language in strings section

Contributing

Contributions are welcome! Please:

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Submit a pull request

License

This template is provided as-is for personal and commercial use. Feel free to modify and adapt it to your needs.

Credits

  • Built with Typst
  • Fonts: Libertinus Serif, Overpass, HK Grotesk
  • Example character: Dr. Emmett Brown (Back to the Future)

Support

For issues, questions, or contributions:

  • Open an issue on GitHub
  • Check the Typst documentation
  • Review example files in src/data/overrides/

Happy resume building! πŸš€

About

A clean and professional Typst template to help you craft resumes and cover letters in multiple languages.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published