unsubbed.co

YAMLResume

YAMLResume is a TypeScript-based application that provides resume creation, generation, and version control.

Open-source resume tooling, honestly reviewed. For developers who’d rather git diff their CV than fight with Google Docs formatting.

TL;DR

  • What it is: A CLI tool (MIT-licensed) that compiles YAML files into professional PDFs via LaTeX, plus HTML and Markdown outputs in one command [README][2].
  • Who it’s for: Developers and technical job-seekers who want version-controlled, reproducible resumes with LaTeX-quality typesetting — without manually writing LaTeX [README][3].
  • Cost savings: Commercial resume builders (Resume.io, Zety, Canva Pro) charge $13–$25/mo for a PDF export. YAMLResume is $0 to self-host. The only real cost is the time to set it up.
  • Key strength: The typesetting quality. LaTeX via XeLaTeX handles spacing, kerning, and layout at a level Word and Figma-based builders simply cannot match [README][2].
  • Key weakness: It is a developer tool, not a user-friendly one. You need Node.js or Docker, basic terminal comfort, and patience with a YAML schema. Non-technical users looking for a drag-and-drop interface should look elsewhere [3].
  • Stars: 1,276 GitHub stars. Still early-stage by OSS standards, but growing.

What is YAMLResume

YAMLResume started as the internal typesetting engine for PPResume, a commercial LaTeX-based resume builder. The company open-sourced it under MIT because, as the README puts it, “people can always have the right to say no to vendor lock-in” [README]. That’s an unusually honest origin story — the core of a commercial product extracted and released free so users aren’t permanently dependent on the SaaS.

The design principle is explicit: separation of concerns. Content lives in a YAML file (what you’d say on your resume). Presentation lives in a layout engine (how it looks). You write your experience, education, and skills in human-readable YAML. YAMLResume compiles it to a PDF using XeLaTeX under the hood. You never touch LaTeX directly.

content:
  basics:
    name: Jane Smith
    email: jane@example.com
    summary: |
      Full-stack engineer with **strong background** in distributed systems
      and a history of shipping *on time*.
  work:
    - name: Acme Corp
      position: Senior Engineer
      startDate: "2022-01"
      endDate: "2024-12"

That YAML becomes a typeset PDF indistinguishable from something an LaTeX expert would produce manually. As of v0.8, the same yamlresume build command also outputs Markdown and HTML simultaneously from a single source file [2]. As of v0.12, there’s a new Jake’s Resume template, Indonesian language support, year-only date formatting, and line spacing controls [website].

The project is backed by a real company (PPResume) and has 100% test coverage, active CI, and a Discord community. It’s not a weekend hack [README][website].


Why People Choose It

The Reddit r/selfhosted thread for the v0.8 release [2] explains the core appeal clearly. The author, who appears to be the creator, framed three specific problems this solves:

Word/Docs formatting hell is gone. No more pixel-nudging text boxes or watching your carefully arranged resume shift when you open it on a different machine. The YAML is the source of truth; the PDF output is deterministic [2].

Version control actually works. Because the resume is plain text YAML, git diff resume.yml shows you exactly what changed between versions. Pull request reviews of resume updates become possible. This is niche but genuinely useful if you’re tweaking your resume in response to job feedback and want to track what changed [2].

The Markdown output unlocks LLM workflows. The v0.8 announcement specifically called this out: “PDF is great for humans, but bad for AI.” The generated resume.md can be pasted directly into ChatGPT or Claude to tailor cover letters or critique the summary [2]. It can also be dropped into a Hugo or Jekyll personal site without any conversion step.

GitHub Actions integration. A YAMLResume GitHub Action was released alongside the core tool, letting you automate PDF generation in CI/CD. Every push to your resume repo triggers a fresh PDF build [README].

The zzamboni.org post [3] compared YAMLResume to JSON Resume and RenderCV. The author ultimately went with JSON Resume because the schema felt more mature and less tied to any single commercial product. On YAMLResume and RenderCV, the concern was specific: “both are tied to commercial products and workflows, which made me worry about drift or lock-in over time” [3]. That’s a fair critique — YAMLResume exists because PPResume open-sourced it, but PPResume the company’s roadmap still influences what gets built. If PPResume pivots or shuts down, the tooling may slow.

Testimonials on the website suggest the output quality converts people quickly. One Reddit user: “I landed a great job offer from a resume built with this. I highly recommend it. It’s worth the effort to build your resume with this” [website]. Another: “One of those projects that I know I will use soon and use intermittently for a long time” [website].


Features

Based on the README and website:

Core compilation:

  • YAML → PDF (via XeLaTeX), Markdown, HTML, and .tex source in one yamlresume build command [README][2]
  • Multiple simultaneous layouts configurable per-build (e.g., one PDF for applications, one Markdown for your portfolio site) [2]
  • Watch mode (yamlresume dev) for live rebuilds while editing [README]
  • Schema validation with line-and-column error messages before PDF generation even starts [README][website]

Templates:

  • moderncv-banking (LaTeX, classic professional)
  • Jake’s Resume (LaTeX, popular CS/engineering format, added v0.12) [website]
  • calm (HTML template) [website]
  • More via the pluggable engine design [README]

Content capabilities:

  • Markdown-style rich text inside YAML fields (bold, italic, links, lists in summaries) [website]
  • All standard resume sections: basics, work, education, projects, skills, awards, certificates, languages, interests, volunteer, references [website]
  • Multi-language locale support — zh, en, es, fr, nl, no, zh-hans, zh-hant-hk, zh-hant-tw [website]
  • Year-only dates (added v0.12), for resumes where month precision isn’t needed [website]
  • Line spacing customization (added v0.12) [website]

Tooling and distribution:

  • npm install -g yamlresume, brew install yamlresume, yarn, pnpm, bun global install [README]
  • Docker image (yamlresume/yamlresume) — no local LaTeX install needed, just Docker [README]
  • json2yamlresume converter: migrate existing JSON Resume files to YAMLResume format via npx json2yamlresume input.json output.yaml [website]
  • GitHub Action for CI/CD automation [README]
  • REST API listed in feature flags [merged profile]

Project health:

  • 1,276 GitHub stars, 2,810 Docker pulls, 5,447 total npm downloads [website]
  • 100% test coverage (Vitest) [README][website]
  • Active CI on GitHub Actions, Codecov, Biome linting [README]
  • 9 README translations (English, French, German, Spanish, Portuguese, Indonesian, Japanese, Simplified Chinese, Traditional Chinese) [README]

Pricing: SaaS vs Self-Hosted Math

YAMLResume itself is free and MIT-licensed. The relevant pricing comparison is against the commercial resume builder market it competes with.

Common commercial resume builders:

  • Resume.io: ~$25/mo to export PDFs
  • Zety: ~$23/mo for full access
  • Canva Pro: ~$13/mo (resume builder included)
  • Novoresume: ~$16/mo
  • PPResume (the parent company): pricing not verified from available sources — check ppresume.com directly

YAMLResume self-hosted:

  • Software: $0 (MIT)
  • If you run it locally (npm or brew install): $0 ongoing
  • If you run Docker for PDF builds: $0 for the container
  • If you add a GitHub Action to automate builds: $0 (within GitHub’s free tier)
  • Optional VPS to host the generated HTML resume: $3–6/mo

Annual math: If you’re paying $25/mo for Resume.io, that’s $300/year to access a tool that holds your resume data and charges you to export it. YAMLResume costs you an afternoon of setup and nothing after that. The LaTeX output is arguably higher quality than what most commercial builders produce anyway.

The one genuine cost is the LaTeX dependency. If you install locally (not via Docker), you need a full TeX distribution — texlive-full on Linux is a several-gigabyte install. The Docker route avoids this, but Docker itself needs to be running.


Deployment Reality Check

There are three realistic installation paths, with meaningfully different complexity:

Option 1: Docker (recommended for non-LaTeX users)

docker run --rm -v $(pwd):/home/yamlresume yamlresume/yamlresume new
docker run --rm -v $(pwd):/home/yamlresume yamlresume/yamlresume build resume.yml

No local dependencies beyond Docker. This is the cleanest path if you don’t want to install a LaTeX distribution [README]. The Docker image handles everything. Time to first PDF: under 5 minutes if Docker is already installed.

Option 2: npm/brew (for developers already on Node.js)

npm install -g yamlresume
yamlresume new resume.yml
yamlresume build resume.yml

This works immediately for generating Markdown and HTML. For PDF output, it calls xelatex under the hood — meaning you need XeLaTeX installed separately. On macOS this means MacTeX (~4GB download). On Linux, texlive-xetex and related packages. If LaTeX isn’t installed, the PDF step fails; you get a clear error message [README].

Option 3: GitHub Actions (for CI/CD) A GitHub Action was released for automating resume builds in CI/CD pipelines. Documented at yamlresume.dev/docs/ecosystem/action. Every push to your resume repo produces a fresh PDF artifact [README].

What can go sideways:

  • The LaTeX dependency is the single biggest pain point for a non-Docker install. First-time LaTeX users often hit font issues or missing packages. The Docker path completely sidesteps this.
  • The zzamboni.org author [3] spent months on a custom pipeline before arriving at a stable setup. YAMLResume is younger than JSON Resume and has fewer theme options and a smaller ecosystem of third-party tools around it.
  • With 1,276 stars, the project is active but not yet at the scale where you’d find extensive community troubleshooting threads for every edge case.

Realistic time estimate for a developer: 15–30 minutes via Docker to a working PDF. 45–90 minutes for a native npm install including LaTeX setup on a fresh machine.


Pros and Cons

Pros

  • LaTeX output quality is genuine. Pixel-perfect spacing, professional kerning, consistent margins. Not achievable with HTML-to-PDF converters or Word [README][2].
  • MIT license — no strings. You own the tool, the data, and the output. No per-export fee, no premium tier required for full functionality [README][3].
  • Multi-format from one source. One build command produces PDF, HTML, and Markdown simultaneously. This is directly useful for portfolios and LLM workflows [2].
  • Schema validation with useful errors. Line-number and column-number feedback before PDF generation prevents wasted compile cycles [README][website].
  • Version control native. Plain text YAML means git diff, PR reviews, and branching strategies for resume management all work cleanly [2].
  • No LaTeX knowledge required. The whole point is that you write YAML and get LaTeX output without touching a .tex file [README].
  • Docker removes the hard dependency. The LaTeX install (4GB+) is hidden inside the Docker image [README].
  • Multi-language support covers 9+ locales out of the box [website].
  • 100% test coverage is a genuine signal of engineering discipline for a tool this size [README][website].

Cons

  • Developer-only tool. Requires terminal comfort and basic YAML literacy. There’s no GUI. Non-technical job seekers will not use this [3].
  • LaTeX install is painful outside Docker. MacTeX or texlive-full is a large, slow install with its own gotchas [README].
  • Limited template selection. Two LaTeX templates and one HTML template as of v0.12 [website]. JSON Resume has a larger third-party theme ecosystem [3].
  • Tied to a commercial product. PPResume is the commercial backer. The zzamboni.org review [3] specifically cited concern about “drift or lock-in over time” because the project’s direction follows a commercial entity’s roadmap. This is a risk for anyone building a long-term workflow around it.
  • Small community. 1,276 stars means fewer community plugins, fewer troubleshooting answers, and fewer third-party themes than more established alternatives [website].
  • No browser-based preview. The workflow is edit YAML → rebuild → open PDF. The dev watch mode helps, but you’re still looking at a PDF viewer, not a live WYSIWYG editor.
  • Stars and downloads are modest. 5,447 total downloads is encouraging for a young project but not the indicator of deep community adoption that would give confidence in long-term maintenance [website].

Who Should Use This / Who Shouldn’t

Use YAMLResume if:

  • You’re a developer who keeps their resume in a git repo and wants the tooling to match that workflow.
  • You want LaTeX-quality typesetting without learning LaTeX.
  • You’re tired of paying monthly fees to export your own resume from a commercial builder.
  • You want to generate a Markdown version of your resume for LLM-assisted cover letter work.
  • You need multi-language resume support (particularly CJK locales).
  • You’re comfortable with Docker or have Node.js already installed.

Skip it if:

  • You’re a non-technical user who doesn’t want to touch a terminal. The tool is genuinely not designed for you.
  • You want a large selection of visual templates to choose from — the current library is minimal.
  • You need a GUI-based preview workflow where you can see changes instantly.
  • You’re evaluating it as a long-term dependency and PPResume’s commercial involvement creates governance concerns for you [3].

Alternatives Worth Considering

From the broader “resume as code” ecosystem surfaced in the research [3]:

  • JSON Resume — the most mature semantic resume standard. Large ecosystem of themes, validators, exporters. Schema is neutral and not tied to any commercial product. The zzamboni.org author [3] chose this over YAMLResume specifically for its neutrality and ecosystem depth. If you want portability above all else, start here.
  • RenderCV — similar concept (YAML input, professional PDF output). Also noted by zzamboni.org [3] as commercial-adjacent.
  • Overleaf — browser-based LaTeX editor with resume templates. Requires LaTeX knowledge but gives you full template control. Free tier available.
  • HackMyResume / resume-cli — the official JSON Resume CLI. Less polished typesetting than YAMLResume, but wider theme selection.
  • Traditional LaTeX — if you’re already comfortable with LaTeX and want full control, \documentclass{moderncv} directly is still valid.
  • Word / Google Docs — if the version control argument doesn’t matter to you and you want zero setup friction, these are still fine. The typesetting is worse, but the barrier to entry is zero.

For the specific audience of developers who want LaTeX quality without LaTeX syntax, the realistic shortlist is YAMLResume vs JSON Resume. YAMLResume wins on YAML ergonomics (more readable than JSON, with comment support) and PDF output quality from its LaTeX engine. JSON Resume wins on ecosystem size and vendor neutrality.


Bottom Line

YAMLResume solves a real and specific problem: developers want their resumes in git, want professional typesetting, and don’t want to pay a monthly fee to export their own data. For that audience, it delivers. The LaTeX output quality is genuinely better than what commercial drag-and-drop builders produce, the YAML format version-controls cleanly, and the multi-format output (PDF + HTML + Markdown from one source) is practically useful for modern job-search workflows.

The caveats are real too. It’s a developer tool that requires developer comfort. The template selection is thin. And the commercial backing from PPResume introduces a governance dependency that a neutral evaluator like the zzamboni.org author [3] explicitly flagged as a concern. For a long-lived workflow, that’s worth thinking about.

For a developer doing a job search today: the Docker install path gets you a professional PDF in under half an hour. That’s a better investment than a $25/mo Resume.io subscription.


Sources

  1. Nemanja Mitic — Personal Bookmarks Collection. https://nemanjamitic.com/links/
  2. Hot-Chemistry7557 (YAMLResume author), r/selfhosted“YAMLResume v0.8: Resume as Code, now with Markdown output (LLM friendly) and multiple layouts”. https://www.reddit.com/r/selfhosted/comments/1pct9dm/yamlresume_v08_resume_as_code_now_with_markdown/
  3. Diego Zamboni, zzamboni.org“Porting my CV from Org+LaTeX to JSON Resume”. https://zzamboni.org/post/porting-my-cv-from-org-latex-to-json-resume/

Primary sources:

Features

Integrations & APIs

  • Plugin / Extension System
  • REST API