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.
- 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
-
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 --versionto confirm it's installed
- Installation: Visit typst.app or use your package manager:
-
Bash - For the compilation script (available on macOS, Linux, and Windows via WSL/Git Bash)
- Typst 0.11.0 or later
- Bash 4.0 or later
- 50MB free disk space for fonts and output files
-
Clone or download this repository:
git clone <repository-url> cd typst_resume_template
-
Make the compilation script executable (if not already):
chmod +x compile.sh
-
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)
- Place a PNG image at
-
Customize your data:
- Edit
src/data/data.ymlwith your personal information - Replace the example data (currently using Dr. Emmett Brown as a placeholder)
- Edit
# Compile all base files (3 languages Γ 3 templates = 9 PDFs)
# Plus any override files
./compile.shThis will generate PDFs in the output/ directory:
cv_en.pdf,cv_de.pdf,cv_si.pdfresume_en.pdf,resume_de.pdf,resume_si.pdfcover_en.pdf,cover_de.pdf,cover_si.pdf- Plus any override variants you've created
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
βββ ...
Contains:
- Content data: Personal info, work experience, skills, etc. (with translations)
- 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"
# ...Create variants by overriding specific fields. Naming convention:
{template}_{variant}_{lang}.ymltemplate: cv, resume, or covervariant: 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.
# Compile all languages
./compile.sh
# Compile only English
./compile.sh en
# Compile English and German
./compile.sh en de
# Compile only Slovenian
./compile.sh siThis compiles:
-
Base files: 9 PDFs (cv/resume/cover Γ en/de/si)
output/cv_en.pdfoutput/resume_de.pdf- etc.
-
Override files: Automatically detected from
src/data/overrides/src/data/overrides/resume_backend_en.ymlβoutput/resume_backend_en.pdfsrc/data/overrides/cover_acme_en.ymlβoutput/cover_acme_en.pdf
# 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-
Create override file in
src/data/overrides/:# For a new company cover letter touch src/data/overrides/cover_acme_backend_en.yml -
Add overrides (only fields you want to change):
company: name: en: "Acme Corp" application: position: en: "Senior Backend Engineer"
-
Run compilation:
./compile.sh
-
Output:
output/cover_acme_backend_en.pdf
Full 2-page curriculum vitae with:
- Summary, core competencies
- Professional experience, education
- Skills (with management category)
- Courses & certifications, volunteering
One-page resume with:
- Summary, core competencies
- Professional experience, education
- Skills (with cloud category)
- Personal projects
Professional cover letter with:
- Company address block
- Application details
- Custom paragraphs
- Signature
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"
Add color settings to templates:
#set text(fill: rgb("#1a1a1a")) // Dark gray textEdit margin and spacing in template files:
#set page(
margin: (x: 0.5in, y: 0.5in), // Adjust margins
)Sections are conditionally rendered based on data presence. To add a new section:
- Add data to
data.yml - Add rendering logic to the appropriate template file
- Add UI strings to
stringssection indata.yml
This template includes example data for Dr. Emmett Brown (from Back to the Future) as a demonstration. You can:
- Review the example data in
src/data/data.yml - Check out example override files in
src/data/overrides/:resume_inventor_en.yml- Backend/inventor-focused resumecover_tech_en.yml- Technology company cover letter
Error: typst command not found
Solution: Install Typst following the instructions in the Requirements section above.
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
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
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)
Error: Cover letter compilation fails or shows missing image
Solution:
- Add
src/data/signature.pngwith your signature - Or comment out the signature line in
src/cover.typ:// #image("./data/signature.png", width: 25%)
- Keep
data.ymlas 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
- Edit
stringssection insrc/data/data.yml - Run
./compile.sh - All outputs update automatically
- Edit
src/cv.typ,src/resume.typ, orsrc/cover.typ - Run
./compile.sh - All language variants update automatically
- Add language code to
VALID_LANGUAGESincompile.sh - Add translations to all relevant fields in
data.yml - Add UI strings for the new language in
stringssection
Contributions are welcome! Please:
- Fork the repository
- Create a feature branch
- Make your changes
- Submit a pull request
This template is provided as-is for personal and commercial use. Feel free to modify and adapt it to your needs.
- Built with Typst
- Fonts: Libertinus Serif, Overpass, HK Grotesk
- Example character: Dr. Emmett Brown (Back to the Future)
For issues, questions, or contributions:
- Open an issue on GitHub
- Check the Typst documentation
- Review example files in
src/data/overrides/
Happy resume building! π