ATS-friendly CV/Resume builder using YAML and Typst
Project description
CVForge
A YAML-based, ATS-compatible CV/Resume generator powered by Typst.
Why This Tool?
I created CVForge because I needed a fast, reliable way to build and rebuild my resume without:
- Using Word or clunky desktop apps
- Trusting random online resume builders with my personal data
- Spending time on formatting instead of content
CVForge lets you define your CV once in YAML and regenerate it instantly. Change a job title, add a skill, rebuild — done. 100% local, 100% private.
Requirements
- Typst: Must be installed and available in your
PATH - Python 3.10+
Installation
Using UV (Recommended)
# Run without installing
uvx cvforge init
uvx cvforge cv.yaml
# Or install as a tool
uv tool install cvforge
cvforge cv.yaml
# Update
uv tool upgrade cvforge
# Uninstall
uv tool uninstall cvforge
Using Pip
# Install
pip install cvforge
# Update
pip install --upgrade cvforge
# Use
cvforge cv.yaml
Usage
| Command | Description |
|---|---|
cvforge init |
Creates a template cv.yaml |
cvforge <file.yaml> |
Generates PDF from YAML |
cvforge fonts |
Lists available fonts |
cvforge ats-check <file.pdf> |
Checks PDF for ATS compatibility |
Configuration
Language
The language parameter controls the section headings in your CV (e.g., "Experience" vs "Deneyim"). It does not translate your content.
language: "en" # English headings (default)
language: "tr" # Turkish headings
Fonts
Run cvforge fonts to see available options. The font must be installed on your system.
font: "roboto" # Options: noto, roboto, inter, lato, arial, times, calibri, etc.
YAML Structure
| Field | Required | Description |
|---|---|---|
language |
No | Section heading language: "en" (default) or "tr" |
font |
No | Font family (run cvforge fonts to list options) |
name |
Yes | Your full name |
role |
Yes | Job title / professional role |
email |
Yes | Contact email |
phone |
No | Phone number |
location |
No | City, Country |
website |
No | Personal website URL |
website-text |
No | Custom display text for website link |
linkedin |
No | LinkedIn profile URL |
linkedin-text |
No | Custom display text for LinkedIn link |
github |
No | GitHub profile URL |
github-text |
No | Custom display text for GitHub link |
photo |
No | Path to profile photo |
photo-width |
No | Photo width (default: "2.5cm") |
summary |
No | Professional summary paragraph |
skills |
No | List of skill categories with items |
experience |
No | Work experience entries |
education |
No | Education entries |
projects |
No | Project entries |
certifications |
No | Certification entries |
awards |
No | Award entries |
languages |
No | Language proficiencies |
interests |
No | List of interests/hobbies |
Run
cvforge initto generate a complete example YAML file with all fields.
Features
- Cross-platform: Linux, Windows, macOS
- ATS Compatible: Clean, parseable text
- Multi-language: EN/TR section headings
- 17 fonts available
- Built-in ATS checker
- Photo support
- 100% Local & Private
Support
If you find this project useful, consider supporting its development:
License
This project is licensed under the MIT License.
© 2025 Ahmet Burhan Kayalı
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cvforge-1.1.1.tar.gz.
File metadata
- Download URL: cvforge-1.1.1.tar.gz
- Upload date:
- Size: 23.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7a880de38f5d3df588841546313aa18a2cc8691d5ca9002e3512763508f8e066
|
|
| MD5 |
00d7b32e0bc1fc3e8190c7cedbd401f0
|
|
| BLAKE2b-256 |
d7f26d3db53a3391dd66f7d6c7fe652ab9be7e65ce8fffdb75d8ae7878207e17
|
File details
Details for the file cvforge-1.1.1-py3-none-any.whl.
File metadata
- Download URL: cvforge-1.1.1-py3-none-any.whl
- Upload date:
- Size: 17.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Arch Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3bed8d8eba9f7ea830f9dc48e9166685a7edf23be235ef6c9fb06c5b179438c4
|
|
| MD5 |
60d35253e12bbbce61708302e48b531c
|
|
| BLAKE2b-256 |
0f5b467942bacb74a7f63404a649836db56f9f056e38d8c74f3c0841f511ff0e
|