Resumes as code in YAML, brought to you with ❤️ by PPResume.
Resumes as code in YAML, brought to you with ❤️ by PPResume.
English | Français | Deutsch | Español | Português | Bahasa Indonesia | 日本語 | 简体中文 | 繁體中文
News: YAMLResume v0.15 is out with curated sample resumes in 12 locales and AI-powered resume generation. Also check out the YAMLResume GitHub Action to automate PDF builds in CI/CD.
Writing resumes may not be hard, but it is definitely not fun and it's tedious.
YAMLResume lets you manage and version-control your resumes as plain-text YAML and turn them into beautifully typeset, professional documents with a single command.
This project started as the core typesetting engine for PPResume, a LaTeX-based, pixel-perfect resume builder. After careful consideration, we decided to open source it so people can always say no to vendor lock-in.
YAMLResume follows Separation of Concerns:
You edit the what; YAMLResume handles the how.
resume.yml generate
pixel-perfect PDFs (via LaTeX), clean Markdown, responsive HTML, and Microsoft
Word DOCX files.yamlresume dev, environment
diagnostics with yamlresume doctor, and instant schema validation.yamlresume ai generate.The fastest way to try YAMLResume is with Docker. The image ships with the CLI, XeTeX, and recommended fonts:
docker run --rm -v $(pwd):/home/yamlresume yamlresume/yamlresume new my-resume.yml
docker run --rm -v $(pwd):/home/yamlresume yamlresume/yamlresume build my-resume.yml
You can also install yamlresume with your favorite package manager (Node.js
= 22 is required):
# npm
npm install -g yamlresume
# pnpm
pnpm add -g yamlresume
# yarn
yarn global add yamlresume
# bun
bun add -g yamlresume
# Homebrew (macOS)
brew install yamlresume
Verify the installation and check your environment:
yamlresume help
yamlresume doctor
For detailed installation steps, including how to set up a typesetting engine, see the installation guide.
You can create your own resume by cloning one of our sample resumes here. Once you have the sample resume on your computer, you can generate a PDF with:
$ yamlresume new my-resume.yml
✔ Created my-resume.yml successfully.
$ yamlresume build my-resume.yml
✔ Generated resume tex file successfully: my-resume.tex
◐ Generating resume pdf file with command: xelatex -halt-on-error my-resume.tex...
✔ Generated resume pdf file successfully: my-resume.pdf
✔ Generated resume docx file successfully: my-resume.docx
✔ Generated resume markdown file successfully: my-resume.md
✔ Generated resume html file successfully: my-resume.html
You can also use the dev command to
rebuild the resume on each file change, which provides a modern web
development-like experience:
$ yamlresume dev my-resume.yml
✔ Generated resume tex file successfully: my-resume.tex
◐ Generating resume pdf file with command: xelatex -halt-on-error my-resume.tex...
◐ Watching file changes: my-resume.yml...
✔ Generated resume pdf file successfully: my-resume.pdf
✔ Generated resume docx file successfully: my-resume.docx
✔ Generated resume markdown file successfully: my-resume.md
Check out the generated PDF here.
PPResume Gallery provides a showcase of all the possible types of resumes, categorized by languages and templates.
Layouts decouple your content from presentation. Add as many output formats as
you need in resume.yml:
layouts:
- engine: latex
template: moderncv-banking
typography:
fontSize: 11pt
- engine: markdown
- engine: html
template: calm
- engine: docx
template: calm
Learn more about each engine:
Use yamlresume dev to rebuild your resume automatically as you edit the YAML
file:
yamlresume dev my-resume.yml
This gives you a tight feedback loop similar to modern web development: save the
file and the PDF updates moments later. You can pass --no-pdf or
--no-validate to speed things up during drafting.
YAMLResume provides a built-in schema that validates your resume before rendering. Add the schema header to your YAML file for IDE autocomplete, hover documentation, and real-time format checks:
# yaml-language-server: $schema=https://yamlresume.dev/schema.json
Run yamlresume validate my-resume.yml for clang-style diagnostics:
New in v0.14, yamlresume ai generate creates a complete, schema-valid resume
from a position and language:
export OPENAI_API_KEY=sk-...
yamlresume ai generate --position "Software Engineer" --language en resume.yml
Supported providers include OpenAI, DeepSeek, Kimi, and Ollama. Read the AI documentation for setup details.
YAMLResume ships with a growing set of templates across engines:
| Engine | Templates |
|---|---|
| LaTeX | moderncv-banking, moderncv-casual, moderncv-classic, jake |
| HTML | calm, vscode |
| DOCX | calm |
Run yamlresume templates list to see everything that is installed.
YAMLResume supports localization out of the box. Set your locale in
resume.yml:
locale:
language: en
Supported languages include English, Chinese (Simplified, Traditional TW/HK), Spanish, French, Norwegian, Dutch, Japanese, German, Indonesian, and Brazilian Portuguese. See the locale docs for the full list.
YAMLResume provides a set of tools to help you create, convert, and manage your resumes more efficiently:
@yamlresume/ai —
Programmatic AI-powered resume generation.@yamlresume/playground
— Embeddable React component for building your own resume editor. It powers
the official Playground.@yamlresume/samples —
Curated sample resumes for common positions in 12 locales.yamlresume/action —
GitHub Action for automating resume builds in CI/CD.create-yamlresume
— Scaffold a new YAMLResume project with one command.json2yamlresume —
Convert JSON Resume files to YAMLResume format.YAMLResume is under active development and new features land regularly. Contributions are deeply appreciated. Please read the guidelines before submitting a pull request.
If you find YAMLResume helpful, please consider supporting the project:
No open issues yet, or sync has not completed.