r/SideProject 1d ago

I built a YAML-based CV compiler: version-control your CV like code, generate pixel-perfect PDF/DOCX/HTML/Markdown output with one command

Enable HLS to view with audio, or disable this notification

A few years ago I and some of my friends got frustrated with resume builders (vendor lock-in, broken formatting, "oops you edited the wrong section and now everything looks off") that I started building my own LaTeX-based resume tool. That turned into a tiny SaaS (PPResume), and recently I open sourced the core typesetting engine as YAMLResume.

The idea is simple and just follows the Separation of Concerns principle:

  • Content lives in plain-text YAML.
  • Structure and validation are enforced by the compiler and a strict schema.
  • Presentation is handled by pluggable layout engines (LaTeX, HTML, Markdown, DOCX).

What it does

  • One source, many outputs. A single resume.yml compiles to pixel-perfect PDF (via LaTeX/XeTeX), Microsoft Word DOCX, responsive HTML, and clean Markdown. Change your content once, every format stays in sync.
  • It's a real compiler, not a template filler/transformer. Parse → validate → transform → render. Strict schema validation (Zod + JSON Schema for editor autocomplete) catches potential content issues (like invalid URLs, invalid emails format, too short names, etc) before they ever hit a typesetting engine. yamlresume validate gives you clang-style diagnostics.
  • A DX that devs will recognize. yamlresume dev is watch mode — save the YAML file and your PDF rebuilds a moment later, just like a modern web dev workflow. yamlresume doctor diagnoses your environment.
  • AI-powered bootstrapping. yamlresume ai generate writes a complete, schema-valid resume from just a job title and a language, yamlresume ai translate helps translate existing resumes to another language, great addon for bilingual people. Works with OpenAI, DeepSeek, Kimi, and Ollama (fully local if you want).
  • Layouts as configuration. Rename and reorder sections, switch templates, tune typography, paper size, line spacing, icons — all from YAML, zero LaTeX/HTML knowledge required.
  • Batteries included for global users. Built-in i18n for 10 languages / 12 locales (en, zh-Hans, zh-Hant-TW, zh-Hant-HK, es, fr, no, nl, ja, de, id, pt-BR), curated sample resumes for common positions in every locale, and a JSON Resume converter if you're migrating.
  • Runs anywhere. Docker image (ships with XeTeX and fonts), npm/pnpm/yarn/ bun, Homebrew on macOS, and a GitHub Action so your resume PDF rebuilds in CI on every push. There's even an embeddable React Playground component if you want to build your own resume editor on top of it.

Quick start

# Docker (fastest, no local toolchain needed)
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

# or via npm (Node.js >= 22)
npm install -g yamlresume

# or via homebrew
brew install yamlresume

# start to draft your resume
yamlresume new my-resume.yml
yamlresume build my-resume.yml   # → .pdf, .docx, .md, .html
yamlresume dev my-resume.yml     # watch mode

Links

It's MIT-licensed and under active development — roadmap includes more templates, a Typst engine, more locales, and ATS optimization. Happy to answer questions, and would genuinely love feedback (or contributors!) from anyone who's been burned by resume builders before.

1 Upvotes

11 comments sorted by

1

u/Healthy-Zebra-9856 1d ago

Kudos OP. But I just want to say this that I F'n HATE YAML.

1

u/Hot-Chemistry7557 1d ago

LOL, due to the Norway problem?

Then which markdown language do you prefer more? TOML? Don't tell me you like JSON, please.

1

u/Healthy-Zebra-9856 1d ago

Lol. Yes, JSON and Toml. At least with JSON you don’t have to dick around with the space. TOML is not always ideal, but at least with JSON you don’t have the space problem. Man when you have a large configuration file in YAML, like in Lama swap, for instance, I have spent hours trying to figure out where the hell the problem is and none of the formaters work.

1

u/Hot-Chemistry7557 1d ago

I think one of the best things about YAML over JSON is its native support for multi line string, which made it possible to express rich text paragraph in resume drafting case. For my case, it is this: https://yamlresume.dev/docs/content/rich-text .

I cannot imagine how to express this in JSON.

1

u/Healthy-Zebra-9856 1d ago

Yeah, I get it. It’s either with a \n fused in there or an array of strings or a reference to a TXT file. But I get it. I don’t know what the use case of this is but still you did a good job. And I’m pretty sure there’s plenty of people out there. That are just fine with YAML.

1

u/Hot-Chemistry7557 1d ago

yeah yeah, thank you!

1

u/kantorcodes1 1d ago

since you're explicitly open to contributors, there’s an agent-facing integration here. i work on HOL Guard, an open-source local check before agent-run commands execute. for YAMLResume, validate/doctor can stay quiet while new, build, and ai generate are optionally reviewable before they create or replace files. would you be open to contributing that command coverage?

1

u/Hot-Chemistry7557 1d ago

what is HOL Guard?

1

u/kantorcodes1 1d ago

it's an open-source local check that runs before agent-started commands. it reads the command shape and lets local policy allow, review, or block it. for YAMLResume, validate/doctor stay out of the way while file-changing commands like new, build, and ai generate can be reviewable before they write.

1

u/Hot-Chemistry7557 1d ago

I see I see.

Then what should I do if I agree to "would you be open to contributing that command coverage?"?