YAMLResume

Installation

YAMLResume is a Node.js tool, under the hood, it transform your resumes from the YAML format to LaTeX code and then call a LaTeX typesetting engine to compile the generated LaTeX code to PDF. Besides, to get optimal PDF output, we also suggest to install some fonts. In a nutshell, you need to install the followings to get started with YAMLResume:

This sounds a bit complicated, but don't worry, we have your back.

Docker Users

If you are a docker user, you are in luck, we have a docker image for you. This image has everything pre-packaged, including:

You can create a new resume instantly with the following command:

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

How does this docker magic work?

This command will create a new resume called my-resume.yml in your current directory. Steps:

  1. docker run ... yamlresume/yamlresume - runs a new container from the yamlresume/yamlresume image, if this image is not existed in your local machine, it will pull it from the docker hub.
  2. --rm - automatically removes the container when it exits
  3. -v $(pwd):/home/yamlresume - mounts the current directory ($(pwd)) into the container at /home/yamlresume, allowing the container to access local files
  4. new my-resume.yml - run yamlresume CLI new sub-command to create a new resume with the filename my-resume.yml

Edit my-resume.yml accordingly and then build the resume from yaml to pdf:

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

Basically, you can call all of the yamlresume CLI sub-commands in this way—just append the sub-command after yamlresume/yamlresume and then follow the corresponding usage guide.

The -v flag here is quite important here because it mounts the current directory ($(pwd)) into the container at /home/yamlresume, allowing a two way file sync between the local directory and the container.

Github Mirror

If you have trouble to pull down yamlresume/yamlresume image from docker hub, don't worry, we have a github mirror for you.

You can get the ghcr image by:

docker pull ghcr.io/yamlresume/yamlresume

Non-Docker Users

If you are not a docker user, please follow the appropriate instructions below to install yamlresume CLI and all the necessary dependencies based on your operating system. At the time of writing, our guide covers macOS, Windows, and some Linux distros (Ubuntu and and RHEL based distros).

Node.js

Node.js 20.x or newer is required.

Why Node.js 20.x or newer?

Theoretically yamlresume should work with Node.js 18, however it is highly recommended to use Node.js 20 or newer because Node.js 18 LTS is scheduled to reach End-of-Life on 30 April 2025.

There may be like 100+ methods to install Node.js on different OS, you can check the official Node.js Download to get started.

We recommend using a package manager to install Node.js.

For Homebrew users:

brew install node

For Chocolatey users:

choco install nodejs.install

For Ubuntu 24.10 or newer:

sudo apt install nodejs

For Ubuntu 24.04 or older, please take a look at NodeSource to get Node.js 20 or newer.

For RHEL-based linux like Fedora, AlmaLinux, Rocky Linux, etc.:

sudo dnf install nodejs

YAMLResume CLI

Installing yamlresume is a breeze. You can install it using your favourite Node.js package manager:

npm install -g yamlresume
pnpm add -g yamlresume
yarn global add yamlresume
bun add -g yamlresume

Verify that yamlresume is installed successfully:

$ yamlresume help
Usage: yamlresume [options] [command]

YAMLResume — Resume as Code in YAML

 __   __ _    __  __ _     ____
 \ \ / // \  |  \/  | |   |  _ \ ___  ___ _   _ ___  ___   ___
  \ V // _ \ | |\/| | |   | |_) / _ \/ __| | | / _ \/ _ \ / _ \
   | |/ ___ \| |  | | |___|  _ <  __/\__ \ |_| | | | | | |  __/
   |_/_/   \_\_|  |_|_____|_| \_\___||___/\____|_| |_| |_|\___|


Options:
  -V, --version   output the version number
  -v, --verbose   verbose output
  -h, --help      display help for command

Commands:
  new [filename]  create a new resume
  build <source>  build a resume to LaTeX and PDF
  languages       i18n and l10n support
  templates       manage resume templates
  help [command]  display help for command

If you just want to give yamlresume a try without installing it, you can use npx, pnpx or other similar tools:

npx yamlresume help
yarn dlx yamlresume help
pnpx yamlresume help
bun exec yamlresume help

Typesetting Engine

Under the hood, yamlresume does the job of a compiler, parsing a YAML resume to an AST and then transforming the AST to LaTeX code.

As a mini-compiler, yamlresume relies on a typesetting engine to compile the generated LaTeX code to PDFs. Therefore you must first install a typesetting engine first before you can use yamlresume to generate resume PDFs.

YAMLResume currently supports two typesetting engines: XeTeX and Tectonic.

Why LaTeX?

At the time of writing, LaTeX is still the best choice of typesetting engine for producing professional looking PDFs. Typst is a great alternative, but it is still in its early stage and its CJK support is not mature and production ready yet. Previously I wrote a post On Typesetting Engines explaining the reasons why I chose LaTeX over other typesetting engines when I founded PPResume.

XeTeX

XeTeX is a TeX typesetting engine using Unicode and supporting modern font technologies such as OpenType, Graphite and Apple Advanced Typography (AAT).

It is a very mature, stable typesetting engine that is widely used by many academic and scientific people.

The easiest way is to install the MacTeX distribution.

It includes XeTeX along with many other TeX-related programs and packages. You can download it from the MacTeX website or install it via homebrew:

brew install mactex

MiKTeX distribution is a popular choice for Windows and includes XeTeX. You can download it from the MiKTeX website.

Alternatively, you can install TeX Live for Windows, which also includes XeTeX. Download it from the TeX Live website.

Most Linux distributions offer TeX Live through their package managers. XeTeX is typically included in the texlive-xetex package or a larger texlive-full meta-package.

For Ubuntu, if your network is good and you have around 10GB of disk spaces, you can install the full texlive distribution:

sudo apt install texlive-full

Otherwise, you can install the minimum required packages:

sudo apt install texlive-xetex texlive-fonts-extra texlive-lang-all

For RHEL-based linux like Fedora, AlmaLinux, Rocky Linux, you can install the full TeX Live distribution if you have enough disk space and good network:

sudo dnf install texlive-scheme-full

Otherwise you can install the minimum required packages:

sudo dnf install \
  texlive-scheme-medium \
  texlive-moderncv \
  texlive-ctex \
  texlive-academicons

Alternatively, you can always install TeX Live directly from the TeX Live website using their installer, which works across different Linux distributions.

Verify that XeTeX is installed successfully:

$ xetex -v
XeTeX 3.141592653-2.6-0.999994 (TeX Live 2022)
kpathsea version 6.3.4
Copyright 2022 SIL International, Jonathan Kew and Khaled Hosny.
There is NO warranty.  Redistribution of this software is
covered by the terms of both the XeTeX copyright and
the Lesser GNU General Public License.
For more information about these matters, see the file
named COPYING and the XeTeX source.
Primary author of XeTeX: Jonathan Kew.
Compiled with ICU version 70.1; using 70.1
Compiled with zlib version 1.2.11; using 1.2.11
Compiled with FreeType2 version 2.11.1; using 2.11.1
Compiled with Graphite2 version 1.3.14; using 1.3.14
Compiled with HarfBuzz version 3.4.0; using 3.4.0
Compiled with libpng version 1.6.37; using 1.6.37
Compiled with pplib version v2.05 less toxic i hope
Using Mac OS X Core Text and Cocoa frameworks

Tectonic

Tectonic is a modernized, complete, self-contained TeX/LaTeX engine, powered by XeTeX and TeXLive.

A full TeX Live distribution typically takes up several GB of disk space, while tectonic's initial installation takes up only 10+ MB. It automatically downloads support files, so you don't have to install a complete LaTeX distribution. When you start using a new LaTeX package, Tectonic simply downloads the files it needs and continues processing.

Tectonic provides an official installation guide, but this would just put tectonic in the directory where you ran the installation command, yamlresume needs a global tectonic command in your $PATH, so you need to figure that out with some shell hacks on your own.

If you're a macOS user, you're in luck because Homebrew provides prebuilt package:

brew install tectonic

In to my experience, tectonic still has some minor compatibility issues with official XeTeX, so if you do not mind the long download tim eof a full TeX Live distribution, XeTeX is still the recommended choice here.

Font

Linux Libertine

YAMLResume adopts Linux Libertine as the default font for Latin characters. It is highly recommended to install it in order to get an optimal PDF output.

For Homebrew users:

brew install font-linux-libertine

Otherwise you can download the latest version of Linux Libertine from the website and install the font with macOS's Font Book.

Download the latest version of Linux Libertine from the website and extract the archive and install the font.

For Ubuntu users, Linux Libertine font is already included in texlive-fonts-extra package, however, if you want to install it manually, you can do so by:

sudo apt install fonts-linuxlibertine

For RHEL-based linux like Fedora, AlmaLinux, Rocky Linux, you can install the Linux Libertine font by:

sudo dnf install linux-libertine-fonts

Google Noto

If you need CJK resumes, you will also need to install Google Noto fonts for best unicode coverage.

For Homebrew users:

brew install font-noto-sans-cjk font-noto-serif-cjk

Download Noto fonts and follow the official guide to install on Windows.

For Ubuntu users:

sudo apt install fonts-noto-cjk fonts-noto-cjk-extra

For RHEL-based linux like Fedora, AlmaLinux, Rocky Linux, you can install the Noto fonts by:

sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts

Troubleshooting

You can raise an issue if you have trouble to install yamlresume or its dependencies.

You can enable verbose logging by passing a --verbose flag to yamlresume or its subcommands.

Getting Tired?

If you are getting tired of the installation process, you can try PPResume, which is a hosted, commercial resume builder solution who open sourced YAMLResume.