Generate a clean, professional PDF CV from a Markdown file. Optionally password-protect the output.
- Markdown in, PDF out — write your CV in plain Markdown, render it to a print-ready A4 PDF (or HTML).
- Sensible typographic defaults — an embedded stylesheet handles colors, spacing and page layout; tweak it in one place.
- Password protection — optionally encrypt the generated PDF.
- Single dependency-light CLI — one command, no config files.
- Python 3.10+
- WeasyPrint system dependencies (Pango, cairo, …) for PDF output.
pip install md-cv-genOr run it without installing, using uv:
uvx md-cv-gen cv.md -o cv.pdf# Output HTML to stdout
md-cv-gen cv.md
# Generate an HTML file
md-cv-gen cv.md -o cv.html
# Generate a PDF
md-cv-gen cv.md -o cv.pdf
# Generate a password-protected PDF
md-cv-gen cv.md -o cv.pdf -p "secret"The output format is determined by the -o file extension (.pdf or
.html). Without -o, HTML is printed to stdout.
# First Last
**Job title** | City, Country
email | phone | links
---
## Section <!-- h2 sections -->
### Role - Company <!-- h3 subsections -->
*Dates | Location* <!-- dates in italic -->
- Achievements as bullet pointsThe CSS is defined in the STYLE variable in src/cv_generator.py. You can
modify colors, fonts and spacing directly.
| Element | Property | Default |
|---|---|---|
| Primary color | color (h2, links) |
#2980b9 (blue) |
| Text color | color (body) |
#2c3e50 (dark grey) |
| Font | font-family |
Helvetica Neue, Arial |
| Page size | size (@page) |
A4 |
| Margins | margin (@page) |
1.5cm 2cm |
git clone https://github.com/goabonga/cv-generator.git
cd cv-generator
uv sync
uv run pre-commit install
uv run ruff check .See CONTRIBUTING.md for the full workflow, commit conventions and release process.
MIT © Chris