Skip to main content

CVForge

PyPI version Downloads License: MIT

CVForge is a CLI that turns a YAML file into a clean, ATS-friendly PDF resume using Typst. Edit your content, rerun the command, and regenerate the same layout locally. Ideal for fast iteration and version control.


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.


Installation

Using UV (Recommended)

# Install as a tool
uv tool install cvforge

# Update
uv tool upgrade cvforge

# Uninstall
uv tool uninstall cvforge

Using Pip

# Install
pip install cvforge

# Update
pip install --upgrade cvforge

# Uninstall
pip uninstall cvforge

Usage

# Initialize a complete template cv.yaml
cvforge init

# Generate PDF from your YAML file
cvforge cv.yaml

# List all available fonts
cvforge fonts

# Verify ATS compatibility of generated PDF
cvforge ats-check <file.pdf>

Configuration & YAML Structure

Run cvforge init to generate a complete example cv.yaml file with all fields and compact comments.

Writing cv.yaml

  • Keep name, role, and email present and non-empty.
  • Keep top-level sections in the order you want them rendered. CVForge renders resume sections in YAML order.
  • Use the documented field names and list shapes. Unsupported top-level sections are ignored unless you also customize the Typst template.
  • Use __text__ for inline bold emphasis in summaries, bullets, skills, and similar narrative fields.
  • Keep facts accurate. Do not add employers, dates, credentials, tools, or metrics unless they are real and supplied.
  • Use compact, achievement-focused bullets. One or two pages is usually best for ATS parsing.
  • For photos, set photo to a local path relative to the YAML file. Use simple photo-width values such as "2.5cm", "3cm", "2in", or "80pt".
  • After editing, build with cvforge cv.yaml and check the PDF with cvforge ats-check cv.pdf.

Below is the full reference:

Field Required Description
language No Section headings language: "en" (default) or "tr". Does not translate content.
font No Font family (run cvforge fonts to see available 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 the website link
linkedin No LinkedIn profile URL
linkedin-text No Custom display text for the LinkedIn link
github No GitHub profile URL
github-text No Custom display text for the GitHub link
photo No Local path to your profile photo, resolved relative to the YAML file
photo-width No Photo display width (default: "2.5cm"; examples: "3cm", "2in", "80pt")
summary No Professional summary paragraph
skills No List of skill categories with Category and Items
experience No List of work entries with optional description bullet lists
education No List of education entries with optional description bullet lists
projects No List of project entries with optional description bullet lists
certifications No List of certification entries
awards No List of award entries
languages No List of language proficiency entries
interests No List of interest/hobby strings

Inline Bold Formatting

Use double underscores to make text bold in narrative fields (summary, descriptions, skills, etc.):

summary: "Built and scaled __high-throughput APIs__ for fintech workloads."

Features

  • Cross-platform: Linux, Windows, macOS
  • ATS Compatible: Clean, parseable text + built-in checker (cvforge ats-check)
  • Multi-language Headers: Support for EN/TR out of the box
  • Typography Choices: 17 available fonts (cvforge fonts)
  • Rich Formatting: Inline bolding via __text__, profile photo support
  • 100% Local & Private: No cloud storage, no online rendering

Agent Skill

Use the CVForge agent skill to help coding agents create, edit, build, and validate CVForge resumes.


Support

If you find this project useful, consider supporting its development:

Buy Me A Coffee


License

This project is licensed under the MIT License.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cvforge-1.2.1.tar.gz (27.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

cvforge-1.2.1-py3-none-any.whl (19.8 kB view details)

Uploaded Python 3

File details

Details for the file cvforge-1.2.1.tar.gz.

File metadata

  • Download URL: cvforge-1.2.1.tar.gz
  • Upload date:
  • Size: 27.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","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

Hashes for cvforge-1.2.1.tar.gz
Algorithm Hash digest
SHA256 27fa7c69a431370bbdf22604fe7ae1cdb5ef2201105c2c19af7aff743bf8489d
MD5 0f571772ad7a9035a806f64176d34bf4
BLAKE2b-256 63bfcf2b01834f4aba033dcecb497aacc57bfdcc452450a1cba775b0e7a5691a

See more details on using hashes here.

File details

Details for the file cvforge-1.2.1-py3-none-any.whl.

File metadata

  • Download URL: cvforge-1.2.1-py3-none-any.whl
  • Upload date:
  • Size: 19.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","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

Hashes for cvforge-1.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 48e26e0375877e54dbb6cbe93ac1dbe5087c4e75959aba7f5decdbada678c252
MD5 b0d852dd1d7b401e14f58decfb50d08e
BLAKE2b-256 270ceb5d654c2584f7abe1baf659092a4daace53281aa3f9e4dddaa3b88b6f16

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

1.2.1 This release

2 files

1.2.0

2 files

1.1.1

2 files

1.1.0

2 files

1.0.2

2 files

1.0.1

2 files

1.0.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page