# YAMLResume: Resumes as Code in YAML
YAMLResume allows people to create and version control resumes using YAML and generate pixel perfect PDFs with professional layout and typesetting in a breeze.
# CLI
URL: (/en/docs/cli)
YAMLResume provides a CLI tool to help you manage your resume. You can follow
the [installation guide](/docs/installation) to install it.
Please note that we have a [docker image](/docs/installation#docker-users)
for you, which has `yamlresume` CLI installed with all the necessary
dependencies.
For each sub-command in this guide, you can run it in docker by appending the
sub-command after `yamlresume/yamlresume`.
For example, to create a new resume in yamlresume CLI:
```sh
yamlresume new my-resume.yml
```
You can also run it in docker by:
```sh
docker run --rm -v $(pwd):/home/yamlresume yamlresume/yamlresume new my-resume.yml
```
## Help
Show CLI help and all available commands:
```console
$ 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 [options] build a resume to LaTeX and PDF
dev [options] build a resume on file changes (watch mode)
languages i18n and l10n support
templates manage resume templates
validate validate a resume against the YAMLResume schema
help [command] display help for command
```
Show YAMLResume CLI version:
```console
$ yamlresume -V
0.5.0
```
## New
Create a new resume. The default resume filename is `resume.yml`, but you
can specify a custom filename:
```console
$ yamlresume new --help
Usage: yamlresume new [options] [filename]
create a new resume
Arguments:
filename output filename (default: "resume.yml")
Options:
-h, --help display help for command
$ yamlresume new my-resume.yml
✔ Created my-resume.yml successfully.
```
## Build
Build a resume from YAML to PDF. It will generate the latex code and PDF at the
same time, with some intermediate files `.aux`, `.log` etc, if you use
[XeTeX](/docs/installation#xetex) as the typesetting engine.
```console
$ yamlresume build --help
Usage: yamlresume build [options]
build a resume to LaTeX, PDF, Markdown, or HTML
Arguments:
resume-path the resume file path
Options:
--no-pdf only generate TeX file without PDF (for LaTeX layouts)
--no-validate skip resume schema validation
-o, --output output directory for generated files
-t, --timeout timeout for LaTeX compilation in seconds (default: 30, 0 to disable)
-h, --help display help for command
$ yamlresume build my-resume.yml
◐ Generating resume PDF file with command: xelatex -halt-on-error my-resume.tex...
✔ Generated resume PDF file successfully.
```
### `--no-pdf`
If you only want to generate the LaTeX file without PDF, you can use `--no-pdf`
option.
```console
$ yamlresume build --no-pdf my-resume.yml
```
### `--no-validate`
If you want to skip the resume schema validation, you can use `--no-validate`
option.
```console
$ yamlresume build --no-validate my-resume.yml
```
### `--output`
If you want to specify a custom output directory for the generated files, you can
use the `-o, --output` option.
```console
$ yamlresume build -o ./output my-resume.yml
```
### `--timeout`
If you want to customize the timeout for LaTeX compilation, you can use the
`--timeout` option. The default timeout is 30 seconds. You can disable the
timeout by setting it to 0.
```console
$ yamlresume build --timeout 60 my-resume.yml
```
## Dev
Build a resume from YAML to PDF on file changes. It accepts the same options as
[`build`](#build) however it will automatically rebuild the resume when the YAML
file is changed (aka, watch mode). This would be very convenient for you to
preview your resume changes in real time.
```console
$ yamlresume dev --help
Usage: yamlresume dev [options]
build a resume on file changes (watch mode)
Arguments:
resume-path the resume file path
Options:
--no-pdf only generate TeX file without PDF
--no-validate skip resume schema validation
-h, --help display help for command
```
## Validate
Validate a resume against the YAMLResume [schema](/docs/compiler/schema).
```console
$ yamlresume validate --help
Usage: yamlresume validate [options]
validate a resume against the YAMLResume schema
Arguments:
resume-path the resume file path
Options:
-h, --help display help for command
```
For example, for the following resume:
```yml lineNumbers
# yaml-language-server: $schema=https://yamlresume.dev/schema.json
---
content:
basics:
name: Andy Dufresne
headline: Headed for the Pacific
phone: "(213) 555-9876"
email: hi@pp
url: https://ppresume.com/gallery
summary: |
- Computer Science major with strong foundation in data structures, algorithms, and software development
- Pixel perfect full stack web developer, specialised in creating high-quality, visually appealing websites
- Experiened in databases (SQL, NoSQL), familiar with server-side technologies (Node.js, Express, etc.)
- Team player, with detail-oriented mindset and a keen eye for design and user experiences
location:
address: 123 Main Street
region: California
city: S
country: United States
postalCode: "95814"
education:
- institution: University of Southern California
url: https://www.cs.usc.edu/
degree: Bachelor
area: Computer Engineering and Computer Science
score: "3.8"
startDate: Sep 1, 2016
endDate:
courses:
- D
- Programming Language Concepts
summary: |
- Developed proficiency in programming languages such as Java, C++, and Python
- Gained hands-on experience in software development through various projects and assignments
- Strong communication and teamwork skills acquired through group projects and presentations
layouts:
- engine: latex
typography:
fontSize: 13pt
```
`yamlresume validate` will give you a list of potential errors, with clear
positional information
```console
$ yamlresume validate my-resume.yml
invalid-resume.yml:9:12: warning: email is invalid.
email: hi@pp
^
invalid-resume.yml:19:11: warning: city should be 2 characters or more.
city: S
^
invalid-resume.yml:31:11: warning: courses should be 2 characters or more.
- D
^
invalid-resume.yml:41:17: warning: font size option is invalid, it must be one of the following: ["10pt", "11pt", "12pt"]
fontSize: 13pt
^
✖ Resume validation failed.
```
## Doctor
Check your environment for YAMLResume dependencies. This command helps diagnose
setup issues by verifying that all required tools and fonts are properly
installed.
```console
$ yamlresume doctor
System:
OS: macOS 14.6.1
CPU: (10) arm64 Apple M1 Max
Binaries:
Node: 25.6.0 - /opt/homebrew/bin/node
Yarn: 1.22.22 - /Users/hanyu/Library/pnpm/yarn
npm: 11.8.0 - /opt/homebrew/bin/npm
pnpm: 10.6.3 - /opt/homebrew/bin/pnpm
ℹ Checking XeTeX...
XeTeX: XeTeX 3.141592653-2.6-0.999994 (TeX Live 2022)
ℹ Checking Tectonic...
Tectonic: tectonic 0.15.0
ℹ Checking Fonts...
Linux Libertine O: Not Installed
Linux Libertine: Installed
Noto Serif CJK SC: Installed
Noto Sans CJK SC: Installed
```
The doctor command checks:
* **System information**: OS, CPU architecture
* **Binaries**: Node.js, npm, pnpm, Yarn, Bun
* **LaTeX engines**: XeTeX and Tectonic availability
* **Fonts**: Required fonts for optimal resume rendering (Linux Libertine for
Latin text, Noto CJK for Chinese/Japanese/Korean)
This is particularly helpful when setting up YAMLResume on a new machine or
troubleshooting resume build issues.
## Languages
List all available languages. The language code follows the spec in [ISO
639 specification](https://www.iso.org/iso-639-language-code). You can specify
the language code in `locale.language` in order to change the language of
your resume. Changing the language of your resume will automatically translate
all fixed terms. You can check more details in our [content -> multi
languages](/docs/locale) section.
```console
$ yamlresume languages list
| locale.language | Language Name | 1:03:48 PM
| --------------- | ------------------------------- |
| en | English |
| zh-hans | Simplified Chinese |
| zh-hant-hk | Traditional Chinese (Hong Kong) |
| zh-hant-tw | Traditional Chinese (Taiwan) |
| es | Spanish |
| fr | French |
| no | Norwegian |
| nl | Dutch |
| ja | Japanese |
| de | German |
```
## Templates
List all available templates. You can change the resume template by setting
`layouts.[].template` in your YAML resume. [PPResume
Templates](https://docs.ppresume.com/typesetting/templates) for more details.
```console
$ yamlresume templates list
| layouts.[].template | Engine | Template Name | Description |
| ------------------- | ------ | ---------------- | ------------------------------------------------------------------- |
| jake | latex | Jake's Resume | A simple, straight-forward resume template based on Jake's Resume |
| moderncv-banking | latex | ModernCV Banking | ModernCV template with banking style |
| moderncv-casual | latex | ModernCV Casual | ModernCV template with casual style |
| moderncv-classic | latex | ModernCV Classic | ModernCV template with classic style |
| calm | html | Calm | Clean and minimalist design suitable for all professionals. |
| vscode | html | VS Code | Dark theme inspired by Visual Studio Code, tailored for developers. |
```
# Comparisons
URL: (/en/docs/comparisons)
## JSON Resume
[JSON Resume](https://jsonresume.org) is a pioneer in building a open standard
for a structured data format for resumes. Its first [official
release](https://jsonresume.org/blog/first-official-release) was in July 31,
2014, which is more than 10 years ago.
From its official website:
```markdown
## Origins and Conceptualization
JSON Resume was conceived as a solution to the fragmented and inconsistent
landscape of resume formats. Traditional resumes, typically created in formats
like Microsoft Word or PDF, often suffer from compatibility issues when parsed
by different systems. Recognizing this problem, Thomas Davis and Roland Sharp
initiated JSON Resume as an open-source project to create a universal,
machine-readable format for resumes.
## Development Milestones
The project began gaining momentum in the early 2010s, with significant
milestones such as the creation of the JSON Resume schema, the development of
the first CLI tools, and the establishment of the JSON Resume registry. These
milestones were driven by community contributions and the growing recognition of
the need for a standardized resume format in the tech industry.
```
JSON Resume did an excellent job in building a open standard for a structured
data format for resumes. However, it lacks some features that YAMLResume has.
YAMLResume is highly inspired by [JSON Resume](https://jsonresume.org/), and
more opinionated in some aspects. For example, JSON Resumes says nothing about
how to convert the machine readable data to a beautiful, human-readable resume.
Here are some notable differences:
| Feature | YAMLResume | JSON Resume |
| ------------------ | --------------------- | ------------------- |
| Data Format | YAML | JSON |
| Data Structure | All top-level objects | Some nested objects |
| Typesetting Engine | LaTeX | None |
| Layout Spec | Built-in | Not specified |
| Rich Text Support | Yes | No |
We are going to offer a tool to import JSON Resume to YAMLResume in the future.
# Quick Start
URL: (/en/docs)
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
import { Step, Steps } from "fumadocs-ui/components/steps";
## Introduction
Creating a resume may not be difficult, but it is definitely a boring, lengthy
and tedious process.
With YAMLResume, you can create and version control your resumes with YAML and
create pixel perfect PDFs with professional layout and typesetting in a breeze.
YAMLResume is the core engine of [PPResume](https://ppresume.com), a LaTeX based
builder. It has helped [thousands of
people](https://blog.ppresume.com/posts/2024-recap) around the world create
pixel perfect, professional looking resumes and land their dream jobs. Here we
decided to open source the engine, in order to give people the right and freedom
to say [no to vendor lock-in](https://blog.ppresume.com/posts/no-vendor-lock-in)
## Getting Started
### Docker Users
If you are a docker user, you are in luck, we have a [docker
image](https://hub.docker.com/r/yamlresume/yamlresume) for you, which has
[yamlresume cli](https://www.npmjs.com/package/yamlresume) installed with all
its dependencies, such as [XeTeX](https://www.tug.org/xetex/) and some
[recommended fonts](/docs/installation#font).
You can just create a new resume with the following command:
```sh
docker run --rm -v $(pwd):/home/yamlresume yamlresume/yamlresume new my-resume.yml
```
Edit `my-resume.yml` accordingly and then build the resume from yaml to pdf:
```sh
docker run --rm -v $(pwd):/home/yamlresume yamlresume/yamlresume build my-resume.yml
```
### macOS Users
Let's assume that you're using macOS with [Homebrew](https://brew.sh/) as the
package manager. If you are not, please see the
[Installation](/docs/installation) guide for detailed instructions for your
operating system.
#### Install Node.js
You need to [install
Node.js](https://nodejs.org/en/download/package-manager/all#macos) 20.x or
newer.
```sh
brew install node
```
#### Install Typesetting Engine
YAMLResume needs a [typesetting
engine](/docs/installation#typesetting-engine) to generate PDF. Currently it
supports two typesetting engines:
* [XeTeX](/docs/installation#xetex)
* [Tectonic](/docs/installation#tectonic)
<>
```sh
brew install mactex
```
```sh
brew install tectonic
```
>
#### Install YAMLResume
Installing `yamlresume` is a breeze. You can install it using your favourite
Node.js package manager:
<>
```sh
npm install -g yamlresume
```
```sh
pnpm add -g yamlresume
```
```sh
yarn global add yamlresume
```
```sh
bun add -g yamlresume
```
>
You can also install [`yamlresume` via
Homebrew](http://formulae.brew.sh/formula/yamlresume):
```sh
brew install yamlresume
```
Verify `yamlresume` is installed successfully:
```console
$ 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 [options] build a resume to LaTeX and PDF
dev [options] build a resume on file changes (watch mode)
languages i18n and l10n support
templates manage resume templates
validate validate a resume against the YAMLResume schema
help [command] display help for command
```
#### \[Optional] Install Fonts
##### Linux Libertine Font
We also recommend installing the [Linux
Libertine font](/docs/installation#linux-libertine) for the best looking PDF
output, but this is optional.
```sh
brew install font-linux-libertine
```
##### Noto Fonts
If you need to create a CJK (Chinese, Japanese, Korean) resume, we recommend
that you install the [Noto font](https://fonts.google.com/noto):
```sh
brew install font-noto-sans-cjk font-noto-serif-cjk
```
#### Create Your First YAML Resume
OK, we have everything ready, we can now create a yaml resume now with
`yamlresume new`:
```console
$ yamlresume new my-resume.yml
✔ Created my-resume.yml successfully.
```
Edit `resume.yml` accordingly, then you can generate a PDF with `yamlresume
build`:
```console
$ yamlresume build my-resume.yml
◐ Generating resume PDF file with command: xelatex -halt-on-error my-resume.tex...
✔ Generated resumep PDF file successfully.
```
You can also use `yamlresume dev` to build the resume on file changes:
```console
$ yamlresume dev my-resume.yml
◐ Generating resume PDF file with command: xelatex -halt-on-error my-resume.tex...
✔ Generated resume PDF file successfully.
◐ Watching file changes: my-resume.yml...
```
## Sample Resume
Here is the complete YAML code for a two-page sample resume, tailored for a
[software
engineer](https://github.com/yamlresume/yamlresume/blob/main/packages/cli/resources/resume.yml):
```yml lineNumbers
---
content:
basics:
name: Andy Dufresne
headline: Headed for the Pacific
phone: "(213) 555-9876"
email: hi@ppresume.com
url: https://ppresume.com/gallery
# All summary fields supports a limited rich text capabilities in markdown
# syntax:
#
# - bold, (e.g, `**bold**`)
# - italic, (e.g, `*italic*`)
# - ordered list, unordored list and nested sub list
# - links (e.g. `[link](https://ppresume.com)`)
summary: |
- Computer Science major with strong foundation in data structures, algorithms, and software development
- Pixel perfect full stack web developer, specialised in creating high-quality, visually appealing websites
- Experiened in databases (SQL, NoSQL), familiar with server-side technologies (Node.js, Express, etc.)
- Team player, with detail-oriented mindset and a keen eye for design and user experiences
location:
address: 123 Main Street
city: Sacramento
region: California
country: United States
postalCode: "95814"
profiles:
- network: Line
url: https://line.com/PPResumeX
username: PPResumeX
- network: Twitter
url: https://twitter.com/PPResumeX
username: PPResumeX
education:
- institution: University of Southern California
url: https://www.cs.usc.edu/
# Valid degree options:
#
# - 'Middle School'
# - 'High School'
# - 'Diploma'
# - 'Associate'
# - 'Bachelor'
# - 'Master'
# - 'Doctor'
degree: Bachelor
area: Computer Engineering and Computer Science
score: "3.8"
# Should be a valid date string that can be parsed by `new Date(dateStr)`
# in JavaScript, eg. '2020-01', '2020-02-03', 'Jul 1, 2023' etc.
#
# The date part would be removed in the final output as most of the time
# people won't really care about the exact date for your working
# experience or education background, etc.
# ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date
startDate: Sep 1, 2016
# Leave endDate blank to indicate "Present"
endDate: Jul 1, 2020
courses:
- Discrete Methods in Computer Science
- Programming Language Concepts
- Data Structures and Object-Oriented Design
- Operating Systems
- Computer Architecture
- Database Systems
- Computer Networking
- Introduction to the Theory of Computing
summary: |
- Developed proficiency in programming languages such as Java, C++, and Python
- Gained hands-on experience in software development through various projects and assignments
- Strong communication and teamwork skills acquired through group projects and presentations
work:
- name: PPResume
url: https://ppresume.com
startDate: Dec 1, 2022
endDate: ""
position: Senior Software Engineer
summary: |
- Developed and implemented efficient and scalable code, ensuring high-quality and maintainable web applications
- Collaborated with cross-functional teams to gather project requirements and translate them into technical solutions
- Conducted thorough testing and debugging to identify and resolve any issues or bugs in the software
- Actively participated in code reviews, providing valuable feedback to improve code quality and adherence to best practices
- Mentored and guided junior developers, fostering a collaborative and growth-oriented team environment
keywords:
- Scalibility
- Growth
- Quality
- Mentorship
- name: PPResume
url: https://ppresume.com
startDate: Sep 1, 2020
endDate: Dec 1, 2022
position: Software Engineer
summary: |
- Created reusable React components to ensure code efficiency and maintainability
- Integrated with RESTful APIs to fetch and display dynamic data on the frontend
- Implemented client-side routing using React Router for smooth navigation between pages
- Actively participated in Agile development methodologies, attending daily stand-up meetings and sprint planning sessions
keywords:
- RESTful
- React
- Agile
languages:
# Valid language fluency options:
#
# - 'Elementary Proficiency'
# - 'Limited Working Proficiency'
# - 'Minimum Professional Proficiency'
# - 'Full Professional Proficiency'
# - 'Native or Bilingual Proficiency'
- language: English
fluency: Native or Bilingual Proficiency
keywords:
- TOEFL 110
- IELTS 7.5
- language: Chinese
fluency: Elementary Proficiency
keywords: []
skills:
# Valid skill level options:
#
# - 'Novice'
# - 'Beginner'
# - 'Intermediate'
# - 'Advanced'
# - 'Expert'
# - 'Master'
- name: Web Development
level: Expert
keywords:
- Python
- Ruby
- CSS
- React
- JavaScript
- name: DevOps
level: Intermediate
keywords:
- Python
- Kubernetes
- Docker
- Shell
- Ansible
- name: Design
level: Intermediate
keywords:
- Sketch
- Figma
- Photoshop
awards:
- title: Dean's List
awarder: University of Southern California
date: Oct 2016
summary: |
Awarded to students who achieve a high academic standing by maintaining a specified grade point average (GPA) during a semester.
certificates:
- name: AWS Certified Developer - Associate
url: https://aws.amazon.com/certification/
issuer: AWS
date: Mar 2021
publications:
- publisher: ACM Transactions on Interactive Intelligent Systems
url: https://dl.acm.org/journal/tiis
name: Enhancing Human-Computer Interaction through Augmented Reality
releaseDate: Dec 2017
summary: |
- Explores the potential of augmented reality (AR) in improving interaction between humans and computers
- Highlights benefits of AR in various areas such as gaming, education, healthcare, and design
- Discusses challenges and future directions of AR technology in enhancing user experience
references:
- name: Dr. Amanda Reynolds
phone: "(555) 123-4567"
relationship: Computer Science Professor
email: amanda.reynolds@usc.edu
summary: |
Andy Dufresne shows exceptional problem-solving skills and a solid understanding of programming concepts, he would bring immense value to any team or organization he becomes a part of.
projects:
- name: EduWeb
url: https://www.eduweb.xyz/
description: A web-based educational platform for interactive learning
startDate: Sep 2016
endDate: Dec 2016
summary: |
- Designed to enhance online learning experiences
- Facilitates students' engagement and collaboration through interactive features and user-friendly interface
- Offers a wide range of courses across various subjects
- Aims to improve the way students learn through the power of the web
keywords:
- Education
- Online Learning
- HCI
interests:
- name: Sports
keywords:
- Soccer
- Swimming
- Bicycling
- Hiking
- name: Music
keywords:
- Piano
- Guitar
volunteer:
- organization: USC Computer Science and Engineering Society
url: https://www.usccsesociety.org/
position: Tech Mentor
startDate: Sep 2015
endDate: Jul 2023
summary: |
- Volunteered as a Tech Mentor at USC Computer Science and Engineering Society
- Provided guidance and assistance to fellow students in their technical projects and coursework
- Assisted in organizing workshops, coding competitions, and networking events for the society members
- Contributed to fostering a collaborative and supportive environment within the student community
locale:
# Use `yamlresume languages list` to get the list of supported languages
language: en
layouts:
- engine: latex
page:
margins:
top: 2.5cm
left: 1.5cm
right: 1.5cm
bottom: 2.5cm
showPageNumbers: true
# Use `yamlresume templates list` to get the list of available templates
template: moderncv-banking
typography:
# LaTeX engine only supports 10pt, 11pt, and 12pt
fontSize: 11pt
- engine: markdown
- engine: html
# Use `yamlresume templates list` to get the list of available templates
template: calm
typography:
# HTML engine only supports font size in px unit, from 14px to 20px
fontSize: 16px
```
Here are the screenshots of the [generated
PDF](https://github.com/yamlresume/yamlresume/blob/main/packages/cli/resources/resume.pdf):
You can check [PPResume Gallery](https://ppresume.com/gallery) for more
examples, with support for different
[templates](https://ppresume.com/gallery/templates) and
[multi-languages](https://ppresume.com/gallery/languages).
## Learn More
# Installation
URL: (/en/docs/installation)
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
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:
* Node.js
* [yamlresume package](https://www.npmjs.com/package/yamlresume)
* a typesetting engine
* \[optional] some fonts
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](https://hub.docker.com/r/yamlresume/yamlresume) for you. This image has
everything pre-packaged, including:
* [Node.js](/docs/installation#nodejs)
* [yamlresume CLI](/docs/installation#yamlresume)
* [XeTeX](/docs/installation#xetex)
* [some recommended fonts](/docs/installation#font)
You can create a new resume instantly with the following command:
```sh
docker run --rm -v $(pwd):/home/yamlresume yamlresume/yamlresume new my-resume.yml
```
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](https://hub.docker.com/r/yamlresume/yamlresume).
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](/docs/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:
```sh
docker run --rm -v $(pwd):/home/yamlresume yamlresume/yamlresume build my-resume.yml
```
Basically, you can call all of the `yamlresume` [CLI sub-commands](/docs/cli) 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.
If you have trouble to pull down `yamlresume/yamlresume` image from [Docker
Hub](https://hub.docker.com/r/yamlresume/yamlresume), don't worry, we have a
[github mirror](https://github.com/yamlresume/yamlresume/pkgs/container/yamlresume)
for you.
You can get the [ghcr
image](https://github.com/yamlresume/yamlresume/pkgs/container/yamlresume) by:
```sh
docker pull ghcr.io/yamlresume/yamlresume
```
### Permission Issues
Sometimes you may run into [permission
issues](https://github.com/yamlresume/yamlresume/issues/24) when running the
Docker container because the `yamlresume/yamlresume` image is built with a `USER
yamlresume` instruction, which by default runs with less privilege.
There are two ways to solve this issue:
1. Use your host username/group ID to run the container:
```sh
docker run --rm -v $(pwd):/home/yamlresume -u $(id -u):$(id -g) yamlresume/yamlresume new my-resume.yml
```
This is the recommended way to run the container. As long as your host user has
access to the current directory, you can run the container with your host
username/group ID.
2. Use `-u root` to run the container with root access:
```sh
docker run --rm -v $(pwd):/home/yamlresume -u root yamlresume/yamlresume new my-resume.yml
```
This is the least recommended way to run the container. It is not recommended
because it may cause security issues, so you should only do this if you
are sure about what you are doing.
Last but not least, if you are running the `yamlresume` Docker container in GitHub
Actions, then root access may be required as per [GitHub's
documentation](https://docs.github.com/en/actions/reference/runners/github-hosted-runners#docker-container-filesystem):
> Note: GitHub Actions must be run by the default Docker user (root). Ensure
> your Dockerfile does not set the USER instruction, otherwise you will not be
> able to access GITHUB\_WORKSPACE.
Ref: [Understanding the Docker USER Instruction](https://www.docker.com/blog/understanding-the-docker-user-instruction/)
## 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.
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](https://nodejs.org/en/blog/release/v18.20.8).
There may be like 100+ methods to install Node.js on different OS, you can check
the official [Node.js Download](https://nodejs.org/en/download) to get started.
We recommend using a [package
manager](https://nodejs.org/en/download/package-manager/all) to install Node.js.
For [Homebrew](https://brew.sh/) users:
```sh
brew install node
```
For [Chocolatey](https://chocolatey.org/) users:
```sh
choco install nodejs.install
```
For Ubuntu 24.10 or newer:
```sh
sudo apt install nodejs
```
For Ubuntu 24.04 or older, please take a look at
[NodeSource](https://downloads.nodesource.com/#debian) to get Node.js 20 or
newer.
For RHEL-based linux like Fedora, AlmaLinux, Rocky Linux, etc.:
```sh
sudo dnf install nodejs
```
### YAMLResume CLI
Installing `yamlresume` is a breeze. You can install it using your favourite
Node.js package manager:
<>
```console
npm install -g yamlresume
```
```console
pnpm add -g yamlresume
```
```console
yarn global add yamlresume
```
```console
bun add -g yamlresume
```
>
If you're a macOS user and you use [Homebrew](https://brew.sh/), you can also
install [yamlresume via Homebrew](http://formulae.brew.sh/formula/yamlresume):
```sh
brew install yamlresume
```
Verify that `yamlresume` is installed successfully:
```console
$ 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 [options] build a resume to LaTeX and PDF
dev [options] build a resume on file changes (watch mode)
languages i18n and l10n support
templates manage resume templates
validate validate a resume against the YAMLResume schema
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:
<>
```console
npx yamlresume help
```
```console
yarn dlx yamlresume help
```
```console
pnpx yamlresume help
```
```console
bun exec yamlresume help
```
>
### Typesetting Engine
Under the hood, `yamlresume` does the job of a compiler, parsing a YAML resume
to an
[AST](https://github.com/yamlresume/yamlresume/blob/main/packages/core/src/compiler/ast.ts)
and then [transforming the AST to LaTeX
code](https://github.com/yamlresume/yamlresume/blob/main/packages/core/src/compiler/codegen/latex.ts).
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](#xetex) and
[Tectonic](#tectonic).
At the time of writing, [LaTeX](https://www.latex-project.org/) is still the
best choice of typesetting engine for producing professional looking PDFs.
[Typst](https://typst.app/) 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](https://blog.ppresume.com/posts/on-typesetting-engines) explaining
the reasons why I chose LaTeX over other typesetting engines when I founded
[PPResume](https://ppresume.com).
#### XeTeX
[XeTeX](https://tug.org/xetex/) is a [TeX](https://en.wikipedia.org/wiki/TeX)
typesetting engine using [Unicode](https://en.wikipedia.org/wiki/Unicode) and
supporting modern font technologies such as
[OpenType](https://en.wikipedia.org/wiki/OpenType),
[Graphite](https://fonts.adobe.com/fonts/graphite) and [Apple Advanced
Typography (AAT)](https://en.wikipedia.org/wiki/Apple_Advanced_Typography).
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](https://www.tug.org/mactex/) or
install it via homebrew:
```sh
# install the full mactex
brew install mactex
# or if you want to save some disk space
brew install mactex-no-gui
```
MacTeX is a large distribution, so it may take some time to download and install
and it takes up around 5GB of disk space. If you want a smaller distribution,
you can install **BasicTeX**, which is a minimal version of MacTeX:
```sh
brew install --cask basictex
```
After installing BasicTeX, you may need to install additional packages manually
using the `tlmgr` command:
```sh
sudo tlmgr update --self
sudo tlmgr install moderncv fontawesome5 collection-fontsrecommended
```
You can check Kostiantyn Lysenko's blog, [YAMLResume - Resume as
Code](https://lysenko.dev/posts/2025-01-yamlresume-resume-as-code/) for more
details about basictex with YAMLResume.
[MiKTeX distribution](https://miktex.org) is a popular choice for Windows and
includes XeTeX. You can download it from the [MiKTeX
website](https://miktex.org/download).
Alternatively, you can install **TeX Live** for Windows, which also includes
XeTeX. Download it from the [TeX Live
website](https://www.tug.org/texlive/acquire-netinstall.html).
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:
```sh
sudo apt install texlive-full
```
Otherwise, you can install the minimum required packages:
```sh
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:
```sh
sudo dnf install texlive-scheme-full
```
Otherwise you can install the minimum required packages:
```sh
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](https://www.tug.org/texlive/acquire-netinstall.html) using their
installer, which works across different Linux distributions.
Verify that XeTeX is installed successfully:
```console
$ 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](https://tectonic-typesetting.github.io) is a modernized, complete,
self-contained
[TeX](https://en.wikipedia.org/wiki/TeX)/[LaTeX](https://www.latex-project.org/)
engine, powered by [XeTeX](https://tug.org/xetex/) and
[TeXLive](https://www.tug.org/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](https://tectonic-typesetting.github.io/en-US/install.html), 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:
```sh
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](https://www.dafont.com/linux-libertine.font)
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:
```sh
brew install font-linux-libertine
```
Otherwise you can download the latest version of [Linux
Libertine](https://www.dafont.com/linux-libertine.font) from the website and
install the font with macOS's [Font
Book](https://support.apple.com/en-gb/guide/font-book/fntbk1000/mac).
Download the latest version of [Linux
Libertine](https://www.dafont.com/linux-libertine.font) 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:
```sh
sudo apt install fonts-linuxlibertine
```
For RHEL-based linux like Fedora, AlmaLinux, Rocky Linux, you can install the
Linux Libertine font by:
```sh
sudo dnf install linux-libertine-fonts
```
#### Google Noto
If you need CJK resumes, you will also need to install [Google Noto
fonts](https://fonts.google.com/noto/) for [best unicode
coverage](https://github.com/ppresume/community/issues/63).
For Homebrew users:
```sh
brew install font-noto-sans-cjk font-noto-serif-cjk
```
Download Noto fonts and follow the [official
guide](https://fonts.google.com/noto/use#use-noto-fonts) to install on
Windows.
For Ubuntu users:
```sh
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:
```sh
sudo dnf install google-noto-sans-cjk-fonts google-noto-serif-cjk-fonts
```
## Troubleshooting
You can [raise an issue](https://github.com/yamlresume/yamlresume/issues/new) 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](https://ppresume.com), which is a hosted, commercial resume builder
solution who open sourced YAMLResume.
# Architecture
URL: (/en/docs/compiler/architecture)
Like any compiler, YAMLResume also contains a pipeline that transforms resume
data from input to output with multiple phases.
* **Input Phase**: accepts YAML and JSON resume files as input.
* **Parsing Phase**: parses and validates the resume content and layout from the
input files.
* **Transformation Phase**: transforms the resume content and layout
data with a pipeline.
* **Codegen Phase**: renders the resume content and layout data using LaTeX,
HTML, or Markdown templates.
* **Output Phase**: generates the final PDF, HTML, or Markdown documents.
Here is a high-level architecture diagram of YAMLResume from 30000 feet:
## Data Processing Pipeline
The transformation pipeline is responsible for processing raw resume data from
YAML files and preparing it for rendering. It operates in two main phases:
content transformation and layout transformation:
* The content transformation phase processes all textual data, applies
localization rules, escapes LaTeX special characters, and computes derived
values.
* The layout transformation phase merges user-provided layout settings with
defaults and applies locale-specific typography rules.
For a long data processing pipeline like this, code speaks more than words, you
can check
[transform.ts](https://github.com/yamlresume/yamlresume/blob/main/packages/core/src/preprocess/transform.ts)
for details if you are interested in the implementation.
# Compiler
URL: (/en/docs/compiler)
## Overview
YAMLResume is a resume compiler that enables users to create resumes using YAML,
then generate professional PDF documents with precise typography.
YAMLResume adopts [Separation of
Concerns](https://en.wikipedia.org/wiki/Separation_of_concerns) as the core
design principles, which allows users to focus on resume content, without the
worry about styling/layout too much, swap templates without changing content,
and maintain consistency across different output formats.
That being said, users could and should only focus on the content of the resume,
and YAMLResume will take care of the rest like typesetting, layout,
localization, PDF generation, etc.
Key capabilities:
* Defines a [standard structured YAML format](/docs/compiler/types) that covers
both [content](/docs/compiler/types#resumecontent) and
[layout](/docs/compiler/types#resumecontent)
* Validates resume content with [zod](https://zod.dev) or [JSON
Schema](https://json-schema.org)
* Transform resume content data with a
[pipeline](/docs/compiler/architecture#data-processing-pipeline)
* Render content using [LaTeX layouts](/docs/layouts/latex), [HTML
layouts](/docs/layouts/html), or [Markdown layout](/docs/layouts/markdown)
* Generate PDFs via [XeTeX](/docs/installation#xetex) or
[Tectonic](/docs/installation#tectonic) compilation engines
* Support [multiple languages](/docs/locale) and localization
* Provide [CLI](/docs/cli) commands for project management and build automation
Check the following live demo to see why I call YAMLResume a **resume compiler**:
[](https://asciinema.org/a/728098)
## Learn More
# Types
URL: (/en/docs/compiler/types)
This document outlines the TypeScript types that define the structure of a
resume with YAMLResume. As a TypeScript project, YAMLResume employs static
typing to ensure data consistency. This file provides an overview of the core
data structures used to represent resume information, including personal
details, education, experience, skills and more.
You can check
[types/index.ts](https://github.com/yamlresume/yamlresume/blob/main/packages/core/src/models/types/index.ts)
for the source of truth details.
Understanding these types is essential for contributors and developers who want
to customize or extend YAMLResume's functionality.
This document serves as a definitive reference for users seeking to create a
valid YAMLResume, clarifying the distinction between optional and mandatory
fields. To guarantee successful compilation within YAMLResume, a minimal resume
must incorporate the following essential fields:
* `content.basics.name`
* `education[number].area`
* `education[number].degree`
* `education[number].institution`
* `education[number].startDate`
So theoretically a minimum viable resumes looks like the following:
```yml lineNumbers
content:
basics:
name: Xiao Hanyu
education:
- area: Computer Science and Technology
degree: Bachelor
institution: Zhejiang University
startDate: Sep, 2007
```
## Resume
Defines the overall resume structure, including content and layout.
| Prop | Type | Required | Description |
| ---------- | --------------------- | -------- | ---------------------------------------------------- |
| `content` | [`Content`](#content) | ✅ | Defines the structure for the entire resume content. |
| `layouts?` | [`Layouts`](#layouts) | ⬜ | Defines the overall layout configuration. |
| `locale?` | [`Locale`](#locale) | ⬜ | Defines the overall locale configuration. |
Here is a high-level diagram of the resume structure:
### Content
Defines the structure for the entire resume content.
| Prop | Type | Required | Description |
| --------------- | --------------------------------------- | -------- | -------------------------------------------------------------------- |
| `basics` | [`BasicsItem`](#basicsitem) | ✅ | Represents the core personal and contact information. |
| `education` | [`EducationItem[]`](#educationitem) | ✅ | Contains a collection of educational experiences. |
| `awards?` | [`AwardItem[]`](#awarditem) | ⬜ | Contains a collection of awards and recognitions. |
| `certificates?` | [`CertificateItem[]`](#certificateitem) | ⬜ | Contains a collection of certifications and credentials. |
| `interests?` | [`InterestItem[]`](#interestitem) | ⬜ | Contains a collection of interests, hobbies, or personal activities. |
| `languages?` | [`LanguageItem[]`](#languageitem) | ⬜ | Contains a collection of language proficiencies. |
| `location?` | [`LocationItem`](#locationitem) | ⬜ | Contains location information. |
| `projects?` | [`ProjectItem[]`](#projectitem) | ⬜ | Contains a collection of projects. |
| `profiles?` | [`ProfileItem[]`](#profileitem) | ⬜ | Contains a collection of online profiles. |
| `publications?` | [`PublicationItem[]`](#publicationitem) | ⬜ | Contains a collection of publications. |
| `references?` | [`ReferenceItem[]`](#referenceitem) | ⬜ | Contains a collection of references. |
| `skills?` | [`SkillItem[]`](#skillitem) | ⬜ | Contains a collection of skills. |
| `volunteer?` | [`VolunteerItem[]`](#volunteeritem) | ⬜ | Contains a collection of volunteer experiences. |
| `work?` | [`WorkItem[]`](#workitem) | ⬜ | Contains a collection of work experiences and employment history. |
#### AwardItem
Represents a single award, honor, or recognition received.
| Prop | Type | Required | Description |
| ---------- | -------- | -------- | ----------------------------------------------------------- |
| `awarder` | `string` | ✅ | The organization or entity that gave the award. |
| `title` | `string` | ✅ | The name or title of the award. |
| `date?` | `string` | ⬜ | The date the award was received (e.g., "2020", "Oct 2020"). |
| `summary?` | `string` | ⬜ | A short description or details about the award. |
#### BasicsItem
Represents the core personal and contact information.
| Prop | Type | Required | Description |
| ----------- | -------- | -------- | ------------------------------------------------------------------- |
| `name` | `string` | ✅ | Full name. |
| `email?` | `string` | ⬜ | Email address. |
| `headline?` | `string` | ⬜ | A brief professional headline or title (e.g., "Software Engineer"). |
| `phone?` | `string` | ⬜ | Phone number. |
| `summary?` | `string` | ⬜ | A professional summary or objective statement. |
| `url?` | `string` | ⬜ | Personal website or portfolio URL. |
#### CertificateItem
Represents a single certification, credential, or professional qualification.
| Prop | Type | Required | Description |
| -------- | -------- | -------- | ----------------------------------------------------------------- |
| `issuer` | `string` | ✅ | The organization that issued the certificate. |
| `name` | `string` | ✅ | The name of the certificate. |
| `date?` | `string` | ⬜ | The date the certificate was obtained (e.g., "2021", "Nov 2021"). |
| `url?` | `string` | ⬜ | URL related to the certificate (e.g., verification link). |
#### EducationItem
Represents a single educational experience or degree program.
| Prop | Type | Required | Description |
| ------------- | ------------------- | -------- | ---------------------------------------------------------------------- |
| `area` | `string` | ✅ | Area of study (e.g., "Computer Science"). |
| `degree` | [`Degree`](#degree) | ✅ | The type of degree obtained. |
| `institution` | `string` | ✅ | Name of the institution. |
| `startDate` | `string` | ✅ | Start date of study (e.g., "2016", "Sep 2016"). |
| `courses?` | `string[]` | ⬜ | List of courses taken. |
| `endDate?` | `string` | ⬜ | End date of study (e.g., "2020", "May 2020"), empty implies "Present". |
| `summary?` | `string` | ⬜ | Description of accomplishments or details. |
| `score?` | `string` | ⬜ | GPA or academic score. |
| `url?` | `string` | ⬜ | URL related to the institution or degree. |
#### InterestItem
Represents a single interest, hobby, or personal activity.
| Prop | Type | Required | Description |
| ----------- | ---------- | -------- | --------------------------------------------------------------- |
| `name` | `string` | ✅ | Name of the interest category (e.g., "Reading", "Photography"). |
| `keywords?` | `string[]` | ⬜ | Keywords related to the interest. |
#### LanguageItem
Represents a single language proficiency item.
| Prop | Type | Required | Description |
| ----------- | ----------------------- | -------- | ------------------------------------------------------------------- |
| `fluency` | [`Fluency`](#fluency) | ✅ | The level of proficiency of the language. |
| `language` | [`Language`](#language) | ✅ | The language. |
| `keywords?` | `string[]` | ⬜ | Specific keywords related to language skills (e.g., "Translation"). |
#### LocationItem
Represents location and address information.
| Prop | Type | Required | Description |
| ------------- | --------------------- | -------- | --------------------------- |
| `city` | `string` | ✅ | City name. |
| `address?` | `string` | ⬜ | Street address. |
| `country?` | [`Country`](#country) | ⬜ | Country code or name. |
| `postalCode?` | `string` | ⬜ | Postal or ZIP code. |
| `region?` | `string` | ⬜ | State, province, or region. |
#### ProfileItem
Represents a single online profile or social media presence.
| Prop | Type | Required | Description |
| ---------- | --------------------- | -------- | ------------------------------------ |
| `network` | [`Network`](#network) | ✅ | The name of the network or platform. |
| `username` | `string` | ✅ | The username on the platform. |
| `url?` | `string` | ⬜ | The URL of the profile. |
#### ProjectItem
Represents a single project, portfolio piece, or technical work.
| Prop | Type | Required | Description |
| -------------- | ---------- | -------- | --------------------------------------------------------- |
| `name` | `string` | ✅ | Name of the project. |
| `startDate` | `string` | ✅ | Start date of the project (e.g., "2021", "Jan 2021"). |
| `summary` | `string` | ✅ | Detailed accomplishments for the project. |
| `description?` | `string` | ⬜ | Description of the project. |
| `endDate?` | `string` | ⬜ | End date of the project (e.g., "2022", "Jul 2022"). |
| `keywords?` | `string[]` | ⬜ | Keywords or technologies used in the project. |
| `url?` | `string` | ⬜ | URL related to the project (e.g., repository, live demo). |
#### PublicationItem
Represents a single publication, research work, or academic paper.
| Prop | Type | Required | Description |
| -------------- | -------- | -------- | ------------------------------------------------- |
| `name` | `string` | ✅ | Name or title of the publication. |
| `publisher` | `string` | ✅ | Publisher of the work. |
| `releaseDate?` | `string` | ⬜ | Date of publication (e.g., "2023", "Mar 2023"). |
| `summary?` | `string` | ⬜ | Summary or abstract of the publication. |
| `url?` | `string` | ⬜ | URL related to the publication (e.g., DOI, link). |
#### ReferenceItem
Represents a single professional reference or recommendation.
| Prop | Type | Required | Description |
| --------------- | -------- | -------- | ------------------------------------------------------- |
| `name` | `string` | ✅ | Name of the reference. |
| `summary` | `string` | ✅ | A brief note about the reference. |
| `email?` | `string` | ⬜ | Email address of the reference. |
| `phone?` | `string` | ⬜ | Phone number of the reference. |
| `relationship?` | `string` | ⬜ | Relationship to the reference (e.g., "Former Manager"). |
#### SkillItem
Represents a single skill, competency, or technical ability.
| Prop | Type | Required | Description |
| ----------- | ----------------- | -------- | ------------------------------------------------------- |
| `level` | [`Level`](#level) | ✅ | Proficiency level in the skill. |
| `name` | `string` | ✅ | Name of the skill. |
| `keywords?` | `string[]` | ⬜ | Specific keywords or technologies related to the skill. |
#### VolunteerItem
Represents a single volunteer experience or community service.
| Prop | Type | Required | Description |
| -------------- | -------- | -------- | ------------------------------------------------------------ |
| `organization` | `string` | ✅ | Name of the organization. |
| `position` | `string` | ✅ | Role or position held. |
| `startDate` | `string` | ✅ | Start date of the volunteer work (e.g., "2019", "Jun 2019"). |
| `summary` | `string` | ✅ | Summary of responsibilities or achievements. |
| `endDate?` | `string` | ⬜ | End date of the volunteer work (e.g., "2020", "Dec 2020"). |
| `url?` | `string` | ⬜ | URL related to the organization or work. |
#### WorkItem
Represents a single work experience or employment position.
| Prop | Type | Required | Description |
| ----------- | ---------- | -------- | ---------------------------------------------------- |
| `name` | `string` | ✅ | Name of the company or employer. |
| `position` | `string` | ✅ | Job title or position held. |
| `startDate` | `string` | ✅ | Start date of employment (e.g., "2021", "Apr 2021"). |
| `summary` | `string` | ✅ | Summary of responsibilities and accomplishments. |
| `endDate?` | `string` | ⬜ | End date of employment (e.g., "2023", "Aug 2023"). |
| `keywords?` | `string[]` | ⬜ | Keywords related to the role or technologies used. |
| `url?` | `string` | ⬜ | URL related to the company or work. |
### Locale
Defines locale settings for internationalization and localization.
| Prop | Type | Required | Description |
| ----------- | ----------------------------------- | -------- | ---------------------------------------------------------------- |
| `language?` | [`LocaleLanguage`](#localelanguage) | ⬜ | The selected language for the resume content and template terms. |
### Layouts
Array of layout items supporting multiple output formats.
| Prop | Type | Required | Description |
| ----------- | -------------------------------------------------------------------- | -------- | -------------------------------------- |
| `layouts[]` | [`LatexLayout`](#latexlayout) \| [`MarkdownLayout`](#markdownlayout) | ⬜ | Multiple output layout configurations. |
#### Common Layout Types
##### Margins
Defines page margin settings for document layout.
| Prop | Type | Required | Description |
| --------- | -------- | -------- | ------------------------------------ |
| `top?` | `string` | ⬜ | Top margin value (e.g., "2.5cm"). |
| `bottom?` | `string` | ⬜ | Bottom margin value (e.g., "2.5cm"). |
| `left?` | `string` | ⬜ | Left margin value (e.g., "1.5cm"). |
| `right?` | `string` | ⬜ | Right margin value (e.g., "1.5cm"). |
##### Sections
Defines section alias settings for customizing section names.
| Prop | Type | Required | Description |
| ---------- | --------------------------- | -------- | ------------------------------------------------------------------ |
| `aliases?` | `Record` | ⬜ | Custom aliases for section names, overriding default translations. |
| `order?` | `OrderableSectionID[]` | ⬜ | Custom order for sections in the final output. |
#### HtmlLayout
HTML layout configuration.
| Prop | Type | Required | Description |
| ------------- | ----------------------------------- | -------- | ---------------------------------------------------- |
| `engine` | `'html'` | ✅ | The engine to generate the resume. |
| `advanced?` | [`HtmlAdvanced`](#htmladvanced) | ⬜ | Defines advanced configuration options. |
| `sections?` | [`Sections`](#sections) | ⬜ | Defines section customization settings. |
| `template?` | [`HtmlTemplate`](#htmltemplate) | ⬜ | Defines the selected template. |
| `typography?` | [`HtmlTypography`](#htmltypography) | ⬜ | Defines typography settings for document formatting. |
##### HtmlAdvanced
Defines advanced HTML configuration options.
| Prop | Type | Required | Description |
| -------------- | --------- | -------- | ------------------------------------------------ |
| `showIcons?` | `boolean` | ⬜ | Whether to display icons for links and profiles. |
| `title?` | `string` | ⬜ | Custom title for the HTML document. |
| `footer?` | `string` | ⬜ | Custom footer for the HTML document. |
| `description?` | `string` | ⬜ | Meta description for the HTML document. |
| `keywords?` | `string` | ⬜ | Meta keywords for the HTML document. |
##### HtmlTypography
Defines HTML typography settings for document formatting.
| Prop | Type | Required | Description |
| -------------- | ------------------------------- | -------- | ----------------------------------------------- |
| `fontSize?` | [`HtmlFontSize`](#htmlfontsize) | ⬜ | Base font size for the document. |
| `fontFamily?` | `string` | ⬜ | A comma-separated list of font families to use. |
| `lineSpacing?` | [`LineSpacing`](#linespacing) | ⬜ | Line spacing for the document. |
#### LatexLayout
LaTeX layout configuration.
| Prop | Type | Required | Description |
| ------------- | ------------------------------------- | -------- | ------------------------------------------------------ |
| `engine` | `'latex'` | ✅ | The engine to generate the resume. |
| `advanced?` | [`LatexAdvanced`](#latexadvanced) | ⬜ | Defines advanced configuration options. |
| `page?` | [`LatexPage`](#latexpage) | ⬜ | Defines page-level settings for document presentation. |
| `sections?` | [`Sections`](#sections) | ⬜ | Defines section customization settings. |
| `template?` | [`LatexTemplate`](#latextemplate) | ⬜ | Defines the selected template. |
| `typography?` | [`LatexTypography`](#latextypography) | ⬜ | Defines typography settings for document formatting. |
##### LatexAdvanced
Defines advanced latex configuration options.
| Prop | Type | Required | Description |
| ------------ | ------------------------------------ | -------- | ------------------------------------------------------------- |
| `fontspec?` | `{ numbers?: LatexFontspecNumbers }` | ⬜ | LaTeX fontspec package configurations. |
| `showIcons?` | `boolean` | ⬜ | Whether to display icons for links and profiles. |
| `showUrls?` | `boolean` | ⬜ | Whether to show raw URLs or hide them behind reasonable text. |
##### LatexPage
Defines latex page-level settings for document presentation.
| Prop | Type | Required | Description |
| ------------------ | ------------------------- | -------- | -------------------------------- |
| `margins?` | [`Margins`](#margins) | ⬜ | Defines page margin settings. |
| `paperSize?` | [`PaperSize`](#papersize) | ⬜ | Defines the paper size. |
| `showPageNumbers?` | `boolean` | ⬜ | Whether to display page numbers. |
##### LatexTypography
Defines latex typography settings for document formatting.
| Prop | Type | Required | Description |
| -------------- | --------------------------------- | -------- | ----------------------------------------------- |
| `fontSize?` | [`LatexFontSize`](#latexfontsize) | ⬜ | Base font size for the document. |
| `fontFamily?` | `string` | ⬜ | A comma-separated list of font families to use. |
| `lineSpacing?` | [`LineSpacing`](#linespacing) | ⬜ | Line spacing for the document. |
| `links?` | `{ underline?: boolean }` | ⬜ | Link styling settings. |
#### MarkdownLayout
Markdown layout configuration.
| Prop | Type | Required | Description |
| ----------- | ----------------------- | -------- | --------------------------------------- |
| `engine` | `'markdown'` | ✅ | The engine to generate the resume. |
| `sections?` | [`Sections`](#sections) | ⬜ | Defines section customization settings. |
## Enum Types
### Content Enums
#### Country
A union type for all possible countries and regions in the world.
#### Degree
A union type for all possible degrees.
* `Associate`
* `Bachelor`
* `Diploma`
* `Doctor`
* `High School`
* `Master`
* `Middle School`
#### Fluency
A union type for all possible language fluency levels.
* `Elementary Proficiency`
* `Full Professional Proficiency`
* `Limited Working Proficiency`
* `Minimum Professional Proficiency`
* `Native or Bilingual Proficiency`
#### Language
A union type for all supported languages.
#### Level
A union type for all possible skill proficiency levels.
* `Advanced`
* `Beginner`
* `Expert`
* `Intermediate`
* `Master`
* `Novice`
#### Network
A union type for all possible social network options.
### Layout Enums
#### HtmlFontSize
A union type for all possible HTML font size options.
HTML engine supports font sizes from 14px to 20px:
* `14px`, `15px`, `16px` (default), `17px`, `18px`, `19px`, `20px`
#### HtmlTemplate
A union type for all possible HTML template options.
See also: [templates](/docs/layouts/html/templates)
* `calm`
#### LatexFontSize
A union type for all possible LaTeX font size options.
For now only 3 options are supported:
* `10pt` - 10pt font size (default)
* `11pt` - 11pt font size
* `12pt` - 12pt font size
#### LineSpacing
A union type for all possible line spacing options.
These semantic values follow Tailwind CSS's leading scale:
* `tight` - Compact spacing for fitting more content
* `snug` - Slightly more space than tight
* `normal` - Balanced readability (default)
* `relaxed` - More breathing room between lines
* `loose` - Very spacious layout
#### LatexFontspecNumbers
A union type for all possible latex fontspec numbers options.
* `Auto` - allowing the style to be automatically determined based on the
selected `LocaleLanguage` (default)
* `Lining` - standard lining figures (default for CJK languages)
* `OldStyle` - old style figures with varying heights (default for Latin
languages)
#### LatexTemplate
A union type for all possible LaTeX template options.
See also: [templates](/docs/layouts/latex/templates)
* `moderncv-banking`
* `moderncv-casual`
* `moderncv-classic`
#### PaperSize
A union type for all possible LaTeX paper size options.
* `a4` (default)
* `letter`
### Locale Enums
#### LocaleLanguage
A union type for all possible locale languages.
See also: [multi-languages](/docs/locale)
* `en`
* `es`
* `zh-hans`
* `zh-hant-hk`
* `zh-hant-tw`
# Content
URL: (/en/docs/content)
This chapter delves into the heart of your resume: the content.
Content is the core of your resume. It's what makes your resume stand out from
the rest, with [layouts](/docs/layouts) and design being the icing on the cake.
We'll cover two key aspects of content creation in YAMLResume:
* **Rich Text**: How to use Markdown to add formatting like bold, italics,
links, and lists to your descriptions.
* **Multi-Language Support**: How to create resumes in different languages,
taking into account linguistic and cultural nuances.
Explore the guides below to master your resume's content.
# Rich Text
URL: (/en/docs/content/rich-text)
In YAMLResume, you're not limited to plain text. The `summary` fields across
different sections (like `work`, `education`, `projects`, etc.), support a
limited set of [Markdown](https://en.wikipedia.org/wiki/Markdown) syntax to
allow for rich text formatting. This enables you to create more expressive and
readable resume content.
## Supported Syntax
Here's a quick rundown of the Markdown features you can use:
### Bold and Italic
You can emphasize text using bold or italic styling.
* **Bold:** `**your bold text**`
* **Italic:** `*your italic text*`
* **Both:** `***your bold and italic text***`
### Links
You can embed hyperlinks within your text.
* **Syntax:** `[link text](https://example.com)`
### Lists
Both ordered and unordered lists are supported, including nesting.
The `|` (pipe) character in YAML is used to create a "literal block scalar,"
which is a way to write [multi-line
strings](https://stackoverflow.com/a/21699210/2310396) while preserving
newlines. This is particularly useful for fields like `summary` where you
might want to include lists or paragraphs. Everything indented under the `|`
will be treated as a single string, with line breaks maintained.
#### Unordered Lists
Use a hyphen (`-`) or an asterisk (`*`) for each list item.
```yml lineNumbers
summary: |
- First item
- Second item
- Third item
```
#### Ordered Lists
Use numbers followed by a period for ordered lists.
```yml lineNumbers
summary: |
1. First item
2. Second item
3. Third item
```
#### Nested Lists
You can indent lists to create nested structures.
```yml lineNumbers
summary: |
- Team player with a detail-oriented mindset.
- Experienced in databases (SQL, NoSQL).
- Proficient in PostgreSQL and MongoDB.
- Familiar with Redis for caching.
- Strong foundation in data structures and algorithms.
```
## A Complete Example
Here is a `summary` field from a `work` entry that combines several of the
supported syntax features:
```yml lineNumbers
---
content:
basics:
# ...
summary: |
This is a sample YAML resume that support limited set of markdown rich text syntax (bold, italics, links, lists):
- Computer Science major with **strong foundation** in data structures, *algorithms*, and software development
1. Pixel perfect full stack web developer, specialised in creating high-quality, visually appealing websites
2. Experiened in databases (SQL, NoSQL), familiar with server-side technologies ([Node.js](https://nodejs.org/en), Express, etc.)
- Team player, with detail-oriented mindset and a keen eye for design and user experiences
```
Here is the generated PDF:
## What's Not Supported?
YAMLResume only supports the syntax listed above. Other common Markdown features
such as headings, blockquotes, images, horizontal rules, and tables are **not
supported and will be ignored during processing**.
# CLI
URL: (/en/docs/contributing/cli)
YAMLResume adopts a mono-repo structure, which means all packages are contained
within a single repository. Thanks to [pnpm
workspace](https://pnpm.io/workspaces), this approach simplifies dependency
management and versioning across packages.
At the time of writing, YAMLResume repo has two packages:
* [yamlresume/cli](https://github.com/yamlresume/yamlresume/tree/main/packages/cli):
the CLI interface for YAMLResume.
* [yamlresume/core](https://github.com/yamlresume/yamlresume/tree/main/packages/core):
contains the core engine for YAMLResume. It handles parsing, validating, and
rendering resumes based on the official [schema](/docs/compiler/schema).
## yamlresume/core build
`yamlresume/cli` depends on `yamlresume/core` to function properly. So when you
want to test `yamlresume/cli`, you need to ensure that `yamlresume/core` is also
built and available.
You can do this with the following commands:
```bash
# build for dev purpose
pnpm core build
# build for production, which will minify the output and generate TypeScript
# DTS files `.d.ts`
pnpm core build:prod
# watch for file changes and build automatically
pnpm core build:watch
```
## yamlresume/cli build
Once `yamlresume/core` is built, you can run the CLI commands in two ways:
1. build `yamlresume/cli` local and run node.js with `dist/cli.js`:
```bash
pnpm cli build
node packages/cli/dist/cli.js [options]
```
2. run `yamlresume/cli` directly with the help of [tsx](https://tsx.is/):
```bash
pnpm cli dev [options]
# this command will translate to
# tsx src/cli.ts
```
## Demo
`yamlresume/core` build:
```console
$ pnpm core build
> @yamlresume/yamlresume@0.7.1 core /Users/hanyu/work/yamlresume/yamlresume
> pnpm --filter @yamlresume/core build
> @yamlresume/core@0.7.1 build /Users/hanyu/work/yamlresume/yamlresume/packages/core
> tsup
CLI Building entry: src/index.ts
CLI Using tsconfig: tsconfig.json
CLI tsup v8.4.0
CLI Using tsup config: /Users/hanyu/work/yamlresume/yamlresume/packages/core/tsup.config.ts
CLI Target: esnext
CLI Cleaning output folder
ESM Build start
ESM dist/index.js 160.91 KB
ESM ⚡️ Build success in 111ms
```
`yamlresume/cli` build:
```console
$ pnpm cli build
> @yamlresume/yamlresume@0.7.1 cli /Users/hanyu/work/yamlresume/yamlresume
> pnpm --filter yamlresume build
> yamlresume@0.7.1 build /Users/hanyu/work/yamlresume/yamlresume/packages/cli
> tsup
CLI Building entry: src/cli.ts
CLI Using tsconfig: tsconfig.json
CLI tsup v8.4.0
CLI Using tsup config: /Users/hanyu/work/yamlresume/yamlresume/packages/cli/tsup.config.ts
CLI Target: esnext
CLI Cleaning output folder
ESM Build start
ESM dist/cli.js 11.36 KB
ESM ⚡️ Build success in 42ms
```
Test `yamlresume/cli` with tsx by `pnpm cli dev`:
```console
$ pnpm cli dev help
> @yamlresume/yamlresume@0.7.1 cli /Users/hanyu/work/yamlresume/yamlresume
> pnpm --filter yamlresume dev help
> yamlresume@0.7.1 dev /Users/hanyu/work/yamlresume/yamlresume/packages/cli
> tsx src/cli.ts 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 [options] build a resume to LaTeX and PDF
dev [options] build on file changes (watch mode)
languages i18n and l10n support
templates manage resume templates
validate validate a resume against the YAMLResume schema
help [command] display help for command
```
Test `yamlresume/cli` with Node.js:
```console
$ node packages/cli/dist/cli.js -V
0.7.1
```
# Docker
URL: (/en/docs/contributing/docker)
Besides the [CLI package](https://www.npmjs.com/package/yamlresume), YAMLResume
also provides a [docker image](https://hub.docker.com/r/yamlresume/yamlresume)
for easy onboarding.
As we've [documented](/docs/installation#docker-users), you can run yamlresume
docker container with the following command:
```bash
docker run --rm -v $(pwd):/app -w /app yamlresume/yamlresume
```
However if you are interested, you can customize the Docker image to suit your
needs.
## Build Docker Image
YAMLResume's Docker image is defined and generated in two phases:
### Dockerfile.base
[Dockerfile.base](https://github.com/yamlresume/yamlresume/blob/main/Dockerfile.base)
contains the base environment for running YAMLResume, including all
necessary dependencies like [XeTeX](/docs/installation#xetex) from [TeX
Live](https://www.tug.org/texlive/) and [Google Noto
Font](/docs/installation#google-noto).
This is a base image mostly used for accelerating the build process on Github
Actions—installing texlive by `apt install texlive-xetex` thing takes about [30
minutes](https://github.com/yamlresume/yamlresume/actions/runs/15438395862),
which is too long to run for every docker build, so that we decided to build and
[publish this base image
once](https://hub.docker.com/r/yamlresume/yamlresume-base) and re-use this for
every further build.
Generally you don't need to build this image yourself, you can just reuse
the published image on dockerhub.
### Dockerfile
[Dockerfile](https://github.com/yamlresume/yamlresume/blob/main/Dockerfile)
defined how `yamlresume/yamlresume` image is built, it is very simple and
straightforward, just installed `yamlresume` from npmjs by `npm install -g
yamlresume@latest` and create necessary users and groups as per Docker's
[security best
practices](https://www.docker.com/blog/understanding-the-docker-user-instruction/).
Building the yamlresume image locally is a trivial task. You just need to run
```bash
docker build -t yamlresume/yamlresume .
```
You may need to take a look at [docker multi-platform
build](https://docs.docker.com/build/building/multi-platform/) if you, for example, run
into issues building docker images for different architectures.
I wrote [some tips on
X](https://x.com/xiaohanyu1988/status/1931178628785778722), you can take a look
if you are interested.
# Contributing
URL: (/en/docs/contributing)
First off, thank you for considering contributing to YAMLResume! It's people
like you that make open source great. We welcome any type of contribution, not
only code. You can help with:
* Reporting a bug
* Discussing the current state of the code
* Submitting a fix
* Proposing new features
* Improving documentation
Here are some shortcuts for some specific jobs:
## Getting Started
### Prerequisites
* [Node.js](https://nodejs.org/) (version >= 20, check `.nvmrc` or
`package.json` engines field)
* [pnpm](https://pnpm.io/) (version >= 10, check `package.json` packageManager
field)
* Git
### Setup
1. **Fork the repository:** Click the "Fork" button on the [YAMLResume GitHub
page](https://github.com/yamlresume/yamlresume). This creates your own copy
of the project.
2. **Clone your fork:**
```bash
git clone https://github.com//yamlresume.git
cd yamlresume
```
3. **Install dependencies:**
```bash
pnpm install
```
This command installs all necessary dependencies for the entire workspace.
## Development Workflow
### Building Packages
* Build all packages once:
```bash
pnpm build
```
* Build all packages and watch for changes:
```bash
pnpm build:watch
```
* Build for production (including type definitions, minification):
```bash
pnpm build:prod
```
### Running Tests
* Run tests for all packages:
```bash
pnpm test
```
* Run tests in watch mode:
```bash
pnpm test:watch
```
* Run tests with coverage report:
```bash
pnpm test:cov
```
Check [Test](./contributing/test) for more details and use cases.
### Code Formatting and Linting
We use [Biome](https://biomejs.dev/) for code formatting and linting. Ensure
your code adheres to the project's style guides before committing.
* Check and automatically fix issues:
```bash
pnpm check
```
* Run checks without applying fixes (useful for CI):
```bash
pnpm check:ci
```
We also use [addlicense](https://github.com/google/addlicense) to ensure source
files have the correct license header. You need to install it in order to run
the following commands.
* Add missing license headers:
```bash
pnpm license:add
```
* Check for missing license headers:
```bash
pnpm license:check
```
## Submitting Contributions
### Reporting Issues
If you find a bug or have a feature request, please
[open an issue](https://github.com/yamlresume/yamlresume/issues) on GitHub.
Provide as much detail as possible, including:
* A clear and descriptive title.
* Steps to reproduce the bug (if applicable).
* Expected behavior and actual behavior.
* Screenshots or code snippets (if helpful).
* Your environment details (OS, Node version, pnpm version).
### Pull Requests (PRs)
We love pull requests! Here's a quick guide:
1. **Create a branch:** Start from the `main` branch and create a descriptive
branch name (e.g., `fix/login-bug`, `feat/new-template-option`).
```bash
git checkout main
git pull origin main
git checkout -b your-branch-name
```
2. **Make your changes:** Write your code or documentation improvements.
3. **Test your changes:** Ensure all tests pass:
```bash
pnpm test
```
4. **Check code quality:** Ensure formatting and linting checks pass:
```bash
pnpm check
```
5. **Commit your changes:** We use
[Conventional Commits](https://www.conventionalcommits.org/) for commit
messages, enforced by `commitlint`. This helps automate changelogs and
versioning. A typical commit message looks like
`feat: add new command` or `fix: resolve issue with parsing`. You can use
`pnpm commitlint` to help format your message if needed, or use tools like
[git cz](https://github.com/commitizen/cz-cli) if you have it installed.
```bash
git add .
git commit -m "feat: your descriptive commit message"
```
6. **Push your branch:**
```bash
git push origin your-branch-name
```
7. **Open a Pull Request:** Go to the YAMLResume repository on GitHub and click
the "New pull request" button. Compare your branch with the `main` branch.
8. **Describe your PR:** Provide a clear description of the changes you've made.
Link any relevant issues (e.g., "Closes #123").
9. **Review:** A maintainer will review your PR. Address any feedback or
requested changes.
10. **Merge:** Once approved, your PR will be merged. Thank you for your
contribution!
## License
By contributing to YAMLResume, you agree that your contributions will be
licensed under its [MIT License](LICENSE).
# New Language
URL: (/en/docs/contributing/new-language)
import { Step, Steps } from "fumadocs-ui/components/steps";
YAMLResume is designed to support [multi
languages](/docs/locale) bottom up, allowing users to create
resumes in their preferred language.
At the time of writing, YAMLResume supports the following languages:
* [English](/docs/locale/english)
* [Chinese](/docs/locale/chinese)
* [Norwegian](/docs/locale/norwegian)
* [Spanish](/docs/locale/spanish)
If your preferred language is not listed, you can contribute by following the
steps below to add support for a new language.
## Register Your Language
To add a new `locale.language` option to YAMLResume, first register your
language in
[models/resume.ts](https://github.com/yamlresume/yamlresume/blob/main/packages/core/src/models/resume.ts)
by adding a new entry to `LOCALE_LANGUAGE_OPTIONS`.
**Checklist:**
* [ ] Add your language to `LOCALE_LANGUAGE_OPTIONS`.
* [ ] Build and test the new CLI]\(/docs/contributing/cli#yamlresumecli-build)
with `pnpm cli dev languages list`, making sure your language appears in
the list.
## Add Translations
Provide translations for all relevant
[options](https://github.com/yamlresume/yamlresume/blob/main/packages/core/src/translations/options.ts),
[punctuations and
terms](https://github.com/yamlresume/yamlresume/blob/main/packages/core/src/translations/template.ts)
used in YAMLResume. This ensures users can generate resumes in the new language
with accurate labels, options, terms translations, and section names. Here is
a reference [PR](https://github.com/yamlresume/yamlresume/pull/44) for adding
translations for the Norwegian language.
**Checklist:**
* [ ] Add translations to [country
names](https://github.com/yamlresume/yamlresume/blob/main/packages/core/src/models/country.ts)
* [ ] Add option translations for `degrees`, `fluency`, `languages`, `sections`,
and `skills`
* [ ] Add punctuation translations for `comma`, `colon`, and `separator`
* [ ] Add terms translations for `courses`, `keywords`, and `score`
## Update Babel Configuration
YAMLResume uses LaTeX for PDF generation, and to get best typesetting results,
we need to set proper [babel package
configuration](https://latex3.github.io/babel/). Here is a reference
[commit](https://github.com/yamlresume/yamlresume/commit/b72a4441ad2542873f449bc35a265e7208eafbe7)
for norwegian language.
**Checklist:**
* [ ] Update `renderBabelConfig()` function in
[preamble.ts](https://github.com/yamlresume/yamlresume/blob/main/packages/core/src/renderer/preamble.ts)
to include the babel package for your new language.
## Test with New Language
[Build](/docs/contributing/cli#yamlresumecore-build) `yamlresume/core` and `yamlresume/cli` packages, then:
* [ ] Create a new resume `pnpm cli dev new my-resume.yml`
* [ ] Set `locale.language` to the new language you've just added
* [ ] Test your changes by generating a resume in the new language
by `pnpm cli dev build my-resume.yml`
* [ ] Make sure both PDF outputs work as expected.
## Submitting Your PR
Once you have completed the above steps, submit your pull request with a clear
description of the changes and the language you are adding. The maintainers will
review your PR and may request changes or clarifications.
Thank you for helping make YAMLResume accessible to more people around the world!
# Test
URL: (/en/docs/contributing/test)
To have a smooth development experience, it is important to have a
solid testing strategy in place. This includes unit tests, integration tests,
and end-to-end tests to ensure that all aspects of the application are
functioning as expected.
## Unit Test
You can run unit tests using the following command:
```bash
# run tests for yamlresume/cli package
pnpm cli test
# run tests for yamlresume/core package
pnpm core test
# run tests for all packages
pnpm test
```
If you're working on a new feature, you can run tests on file changes:
```bash
# watch and test for changes in yamlresume/cli package
pnpm cli test:watch
# watch and test for changes in yamlresume/core package
pnpm core test:watch
# watch and test for changes in all packages
pnpm test:watch
```
Don't forget to [build](./contributing/cli#yamlresumecore-build)
`yamlresume/core` package if you are working on a CLI feature that depends on
`yamlresume/core` package.
## Test Coverage
YAMLResume keeps a **[100% unit test
coverage](https://app.codecov.io/gh/yamlresume/yamlresume)** in order to pursue
high code quality and prevent regressions. You can check the test coverage
report by running:
```bash
# check test coverage for yamlresume/cli package
pnpm cli test:cov
# check test coverage for yamlresume/core package
pnpm core test:cov
# check test coverage for all packages
pnpm test:cov
```
# yamlresume/action
URL: (/en/docs/ecosystem/action)
[yamlresume/action](https://github.com/marketplace/actions/yamlresume) is a GitHub Action to
build professional resumes from YAML files using the YAMLResume CLI. It
seamlessly integrates YAMLResume into your CI/CD pipelines, allowing you to
treat your resume as code and automate PDF, LaTeX, HTML, and Markdown generation
directly on GitHub.
## Features
* **Automated Builds**: Build your resume automatically on every push or pull
request.
* **Multiple Resumes**: Build multiple resumes (e.g., in different languages or
variants) in a single workflow step.
* **Customizable Options**: Skip schema validation or PDF generation if needed.
* **Workflow Integration**: Outputs generated file paths for use in subsequent
steps.
* **Artifact Upload**: Works seamlessly with `actions/upload-artifact` to save
generated files.
## Usage
### Basic Usage
Build a single resume:
```yaml
- uses: yamlresume/action@v0.2.3
with:
resumes: resume.yml
```
### Multiple Resumes
Build multiple resumes using a newline-separated list:
```yaml
- uses: yamlresume/action@v0.2.3
with:
resumes: |
resume-en.yml
resume-zh.yml
resume-fr.yml
```
### Skip PDF Generation
Generate only LaTeX files (useful for custom PDF pipelines):
```yaml
- uses: yamlresume/action@v0.2.3
with:
resumes: resume.yml
no-pdf: true
```
### Skip Validation
Skip schema validation during build:
```yaml
- uses: yamlresume/action@v0.2.3
with:
resumes: resume.yml
no-validate: true
```
### Complete Workflow Example
Here is a complete example of a GitHub Actions workflow that builds multiple
resumes and uploads the generated PDFs as artifacts:
```yaml title=".github/workflows/resume.yml"
name: Build Resume
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Build resumes
id: build
uses: yamlresume/action@v0.2.3
with:
resumes: |
resume-en.yml
resume-zh.yml
verbose: true
- name: Upload PDF artifacts
uses: actions/upload-artifact@v4
with:
name: resumes
path: |
*.pdf
*.tex
```
## Inputs
| Input | Description | Required | Default |
| ------------- | ---------------------------------------------------- | -------- | --------- |
| `resumes` | Newline-separated list of resume YAML files to build | Yes | - |
| `no-validate` | Skip schema validation | No | `false` |
| `no-pdf` | Skip PDF generation (generate only LaTeX) | No | `false` |
| `verbose` | Enable verbose output | No | `false` |
| `version` | YAMLResume Docker image version | No | `v0.12.3` |
## Outputs
The action provides the following outputs, which are newline-separated lists of
generated files:
* `pdf-files`
* `tex-files`
* `html-files`
* `md-files`
### Using Outputs
You can use the outputs in subsequent steps:
```yaml
- uses: yamlresume/action@v0.2.3
id: build
with:
resumes: resume.yml
- run: |
echo "Generated PDFs:"
echo "${{ steps.build.outputs.pdf-files }}"
```
## Requirements
* **Runner**: Linux (Ubuntu recommended) - Docker is required.
* **Docker**: Must be available on the runner (GitHub-hosted Ubuntu runners
include Docker by default).
# Community
URL: (/en/docs/ecosystem/community)
## Projects
[resumes-as-code](https://github.com/zhiweio/resume-as-code) leveraging LLMs
(Large Language Models) and structured data to automate the creation of highly
tailored, professional resumes.
## Powershell
[@webJose](https://github.com/webJose) shared a [Powershell
module](https://github.com/yamlresume/yamlresume/issues/64#issuecomment-3193433716)
to create and build resumes with YAMLResume.
# create-yamlresume
URL: (/en/docs/ecosystem/create-yamlresume)
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
[create-yamlresume](https://yamlresume.dev/docs/ecosystem/create-yamlresume)
helps you create a new [YAMLResume](https://yamlresume.dev) project with a
one-liner command.
## Usage
<>
```console
npx create-yamlresume my-resume
# or
npm init yamlresume my-resume
```
```console
pnpm create yamlresume my-resume
```
```console
yarn create yamlresume my-resume
```
```console
bun create yamlresume my-resume
```
>
## What it does
This tool will:
1. Create a new directory with your project name
2. Create a basic Node.js project structure with:
* `package.json` with YAMLResume dependency and useful scripts
* `.gitignore` file with appropriate excludes
* `README.md` with basic usage instructions
3. Install all necessary dependencies
4. Create a new sample resume file using `yamlresume new`
5. Show available commands and next steps
## Sample Session
```
$ pnpm create yamlresume
✔ What is your project name? … yamlresume
ℹ Using pnpm.
✔ What should your resume file be called? (without .yml extension) … resume
◐ Creating YAMLResume project in /private/tmp/yamlresume...
◐ Installing dependencies with pnpm...
Packages: +59
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Progress: resolved 59, reused 59, downloaded 0, added 59, done
dependencies:
+ yamlresume 0.7.5
Done in 4s using pnpm v10.6.3
✔ Dependencies installed successfully!
◐ Creating resume file resume.yml...
✔ Created resume.yml successfully.
◐ Initializing git repository...
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint:
hint: git config --global init.defaultBranch
hint:
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint:
hint: git branch -m
Initialized empty Git repository in /tmp/yamlresume/.git/
✔ Git repository initialized!
[master (root-commit) 53c6210] init a new YAMLResume project
4 files changed, 421 insertions(+)
create mode 100644 .gitignore
create mode 100644 README.md
create mode 100644 package.json
create mode 100644 resume.yml
✔ Initial commit created!
ℹ
✨ Project created successfully!
ℹ
Next steps:
ℹ 1. cd yamlresume
ℹ 2. Edit your resume: resume.yml
ℹ 3. Build your resume: pnpm run build
ℹ 4. Watch for changes: pnpm run dev
ℹ 5. Show all commands: pnpm run yamlresume help
ℹ
Learn more:
ℹ 🏠 Homepage: https://yamlresume.dev
ℹ 📖 Documentation: https://yamlresume.dev/docs/
ℹ 🎨 Templates: https://yamlresume.dev/docs/layouts/latex/templates
ℹ 📝 Schema: https://yamlresume.dev/docs/compiler/schema
```
## Project Structure
The generated project looks like this:
```
my-resume/
├── package.json # Project configuration with yamlresume dependency
├── .gitignore # Git ignore rules
├── README.md # Project documentation
└── resume.yml # Your YAML resume (filename you choose)
```
## Available Commands
In the generated project, you can run:
* `npm run build` - Build your resume to PDF
* `npm run dev` - Watch for changes and rebuild automatically
* `npm run validate` - Validate your resume against the schema
* `npm run yamlresume` - Run the YAMLResume CLI
# Ecosystem
URL: (/en/docs/ecosystem)
YAMLResume provides a set of tools to help you create, convert and manage your
resumes more efficiently. Here are some of the key utilities available:
## create-yamlresume
[create-yamlresume](./ecosystem/create-yamlresume) makes it easy to start a new
YAMLResume project with a one-liner command. It will scaffold your project
directory, installs necessary dependencies, and generates a sample resume file
so you can get started right away.
* Scaffold a new project with `npx create-yamlresume my-resume` or similar
commands for `npm`, `yarn`, or `pnpm`.
* Includes a ready-to-use project structure, scripts for building and validating
resumes, and a sample YAML resume file.
## json2yamlresume
[json2yamlresume](./ecosystem/json2yamlresume) is a CLI tool for converting
[JSON Resume](https://jsonresume.org/) files to the YAMLResume format.
* Converts JSON Resume files to YAMLResume, transforming fields and structure as
needed.
* Ensures your data is validated against the YAMLResume schema.
These tools help you migrate from other formats, automate project setup, and
streamline your workflow with YAMLResume.
## Learn More
# json2yamlresume
URL: (/en/docs/ecosystem/json2yamlresume)
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
[json2yamlresume](https://yamlresume.dev/docs/ecosystem/json2yamlresume) is a
[command-line tool](https://npmjs.com/package/json2yamlresume) to convert [JSON
Resume](https://jsonresume.org/) to [YAMLResume](https://yamlresume.dev/)
format.
## Features
* **Format Conversion**: seamlessly convert JSON Resume to YAMLResume format
* **[Structure Transformation](#conversion-rules)**
* **CLI Interface**: simple command-line interface for easy conversion
* **Validation**: built on top of YAMLResume's robust [schema
validation](/docs/compiler/schema)
## Installation
<>
```console
npm install -g json2yamlresume
```
```console
pnpm add -g json2yamlresume
```
```console
yarn global add json2yamlresume
```
```console
bun add -g json2yamlresume
```
>
## Usage
### Convert a JSON Resume to YAMLResume
```bash
$ json2yamlresume input.json output.yaml
# or call the command without the optional output path, in which case the
# output will be written to the same directory as the input file with the same
# name but with a .yml extension
$ json2yamlresume input.json
```
### Show help
```bash
$ json2yamlresume --help
Usage: json2yamlresume [options] [output-file]
Convert JSON Resume to YAMLResume format
Arguments:
input-file Input JSON Resume file path
output-file Output YAMLResume file path
Options:
-V, --version output the version number
-h, --help display help for command
```
### Show version
```bash
$ json2yamlresume --version
0.7.4
```
## Example
Here is an example resume in JSON Resume format:
```json lineNumbers title="json-resume.json"
{
"basics": {
"name": "John Doe",
"label": "Software Engineer",
"email": "john@example.com",
"location": {
"city": "San Francisco",
"countryCode": "US"
},
"profiles": [
{
"network": "GitHub",
"username": "johndoe",
"url": "https://github.com/johndoe"
}
]
},
"work": [
{
"name": "Tech Corp",
"position": "Senior Developer",
"startDate": "2020-01",
"summary": "Led development of web applications.",
"highlights": [
"Increased performance by 40%",
"Mentored 5 junior developers"
]
}
],
"education": [
{
"institution": "University of California",
"area": "Computer Science",
"studyType": "Bachelor of Science",
"startDate": "2018"
}
]
}
```
You can call the following command to convert the JSON Resume to YAMLResume:
```bash
$ json2yamlresume json-resume.json yamlresume.yml
```
Here is the output in YAMLResume format:
```yaml lineNumbers title="yamlresume.yml"
---
content:
basics:
name: John Doe
headline: Software Engineer
email: john@example.com
education:
- institution: University of California
area: Computer Science
degree: Bachelor of Science
startDate: "2018"
location:
city: San Francisco
country: US
profiles:
- network: GitHub
username: johndoe
url: https://github.com/johndoe
work:
- name: Tech Corp
position: Senior Developer
startDate: 2020-01
summary: |-
- Increased performance by 40%
- Mentored 5 junior developers
```
## Conversion Rules
### 1. Location and Profiles Movement
* `basics.location` → top-level `location`
* `basics.profiles` → top-level `profiles`
* `basics.label` → `basics.headline`
### 2. Education Field Mapping
* `education[].studyType` → `education[].degree`
### 3. Highlights Integration
The converter merges `highlights` arrays into `summary` fields as markdown
unordered lists for these sections:
* `work[]`
* `volunteer[]`
* `projects[]`
Example:
```json
{
"summary": "Led development team.",
"highlights": ["Increased performance", "Mentored developers"]
}
```
Becomes:
```yaml
summary: |-
Led development team.
- Increased performance
- Mentored developers
```
Remember that YAMLResume's summary field supports [rich
text](/docs/content/rich-text)!
### 4. References
* `references[].reference` → `references[].summary`
## Supported JSON Resume Sections
The converter supports all standard JSON Resume sections:
* ✅ `basics`
* ✅ `work`
* ✅ `volunteer`
* ✅ `education`
* ✅ `awards`
* ✅ `certificates`
* ✅ `publications`
* ✅ `skills`
* ✅ `languages`
* ✅ `interests`
* ✅ `references`
* ✅ `projects`
# Font
URL: (/en/docs/guide/font)
If text is the vehicle for the transmission of information, then the visual
characteristics of the text itself—that is, the font—influence the quality of
the message.
In principle, the typesetting of a resume should be concise and clear. As for
font, first you should never use fonts that are too fancy, second the types of
fonts should not be too many—best limited in three. Here we will discuss some
basics of fonts and main points in typesetting.
## Font classification
### Serif vs. sans-serif
In terms of serifs, fonts for Latin alphabet are divided into two families:
serif and sans-serif[^1].
A serif is a tiny line attached to the end of a stroke in a letter. A font with
serifs is called serif font, or serifed font. In contrast, a font without serifs
is called sans-serif font, where *sans* is the French word for "without".
### Proportional vs. monospaced
According to whether or not the widths of letters are the same, fonts can be
divided into monospaced and proportional. As the name suggests, all letters in a
monospaced font occupy the same amount of horizontal space, while in a
proportional font they don't.
In traditional printing, proportional fonts can improve the legibility of words.
Due to technical limitations, the early computers and typewriters can not adjust
the widths of letters . So all characters are made into the same width, thus
monospaced fonts come into being. With the improvement of computer technology,
the GUI (Graphical User Interface) has become the mainstream and been developing
continuously, technical limitations no longer exist, so proportional fonts have
become quite popular, since they are more naturally legible for human.
### CJK Font
Font styles in [CJK](https://en.wikipedia.org/wiki/CJK_characters) is a bit
complicated. Generally speaking, there're also serif and sans-serif fonts in CJK
languages.
#### Song
**[Song](https://en.wikipedia.org/wiki/Ming_typefaces)**: known as 宋体/明体 in
Simplified Chinese, 宋體/明體 in Traditional Chinese, みんちょうたい/明朝体 in Japanese,
명조체/明朝體 in Korean, is the serif font in CJK.
Song is usually used for body text, headings and notes. When used for headings,
the weight of the characters is often increased to differentiate them from the
body text. Currently it is the most common used font in printing.
#### Bold
**[Bold](https://en.wikipedia.org/wiki/Sans-serif)**, known as 黑体 in Simplified
Chinese, 黑體 in Traditional Chinese, is the sans-serif font in CJK.
Bold is often used for headlines, introductions, logos, etc. Bold is also used
in body text to emphasize specific words. Due to the large number of strokes in
Chinese characters and the poor clarity of bold in small characters, traditional
printing rarely uses bold as the body text; however, with the refinement of
character creation technology, coupled with the development of the Internet and
digital publishing, many bold fonts have been developed for body text, and a
small number of books have begun to use bold as the body text font.
Besides Song and Bold, *Chinese also has two additional font styles that are
widely used*.
#### Regular
**[Regular](https://en.wikipedia.org/wiki/Regular_script)**: known as 楷体 in
Simplified Chinese, 楷體 in Traditional Chinese, is the most common style used in
modern Chinese writings.
Regular are mainly used for headings, introductions, dialogues, summaries and
other paragraphs that are different from the main text. However, regular are
less frequently used for emphasis because of their proximity to Song.
#### Fangsong
**[Fangsong](https://en.wikipedia.org/wiki/Fangsong)**, known as 仿宋体 in
Simplified Chinese, 仿宋體 in Traditional Chinese, is a type of regular script
typeface. It is mostly used in the introduction, summary and other paragraphs
that are different from the main text. Meanwhile, it is also the standard font
used in official documents produced by the Chinese government.
## Font design and usage
Digital publishing has been developing for many years, and western lanauges has
a very small character set, so there are many kinds of fonts designed by
different people with various demands.
For a monospaced font, the main focus is on the design of each single letter,
other than that, in a proportional font, the space between letters should also
be seriously considered.
### Letter composition
Letters in every font have a consistent structure, font users are supposed to
know these basic concepts:
* baseline: the invisible line on which "H" or "n" stands
* cap height: the distance from baseline to the top of a linear uppercase letter
like "H" or "E"
* x-height: the distance from the bottom to the top of lowercase "x"
* ascender: the ascending parts of lowercase letters like "b", "d", "f", "h",
"k", "l" over the top of "x" , its height is called the ascender height, the top
line which ascenders align is called the ascender line
* descender: the descending parts of lowercase letters like "g", "j", "p", "q",
"y" below the baseline, its height is called the descender height, the bottom
line which descenders align is called the descender line
### Letter-spacing
Letter-spacing, or tracking, refers to the space between letters.
Letter-spacing adjustment is divided into font designers' side and font users'
side; it affects the density in a line or block of text.
For font designers, the adjustment of letter-spacing is an important procedure
in designing. In a proportional font, the spacing on the left side of a single
letter is not necessarily the same as on the right side. The purpose is to
ensure legibility when the letter is next to whatever other letters on both
sides.
For font users, the adjustment of letter-spacing means manually rearranging the
space between letters by software after the original typesetting, in order to
obtain special alignment[^2], or a better layout effect[^3].
### Kerning
Kerning refers to the process of increasing or decreasing the space between
specific letter pairs in a proportional font. These pairs of letters are called
kerning pairs. Kerning is more concerned about the visual spacing rather than
the actual spacing.
Designers of many fonts will pay attention to kerning pairs while designing, and
store kerning adjustment values in the font file. In this way, typesetting
software can automatically adjust spacing for kerning pairs according to the
values, thus produce a better layout effect.
Every letter has a unique shape, so during the design and implementation of a
font, letters in all kerning pairs must cooperate to produce the best visual
effect. In fact, this is where the key procedure and difficulties lie[^4].
### Ligature
A ligature is a glyph that joins two or more letters together.
Ligatures in print originate from hyphenated characters in handwriting. After
the birth of movable-type printing, many ligatures were directly made into type.
However, after the widespread use of sans-serif fonts in the 1950s and
phototypesetting in the 1970s, the use of block letters became rare. The
earliest digital typesetting software that could use ligatures for digital
typesetting is TeX created by [Donald
Knuth](https://en.wikipedia.org/wiki/Donald_Knuth). This trend also affected the
desktop publishing after 1985. In early times, software could not replace
letters with ligatures (but TeX could), and most of the newly made fonts for
computers did not include ligatures. Furthermore, in the early days of personal
computers, most of the computers were in English, and there was no practical
need for the use of ligature, as it was not mandatory to use it in the English
language. With the development of digital typesetting technology such as
[OpenType](https://en.wikipedia.org/wiki/OpenType), ligatures have
gradually returned to practice[^5].
In normal day-to-day business documents, the lack of ligatures is not treated as
spelling error, but for professional typesetting in advertising, book publishing
and other fields, ligatures are essentially required.
### Italics
Italic is a font style achieved by tilting the font on top of the normal font
style; it can refer to italic type or oblique type[^6].
There are two types of tilted fonts in western font: oblique type and italic
type. The one that is tilted with a change in the shape of the characters is
"Italic Type", while the one that simply tilts the original font to the right
without a change in the shape of the characters is known as oblique type. Since
oblique italics, which are simply tilted and distorted by software algorithms,
have loose strokes, more and more designs have recently favored the use of newly
designed, specialized italic types.
Theoretically, italics include italic type and oblique type, but it should be
noticed that actually not all italic type are slanted .
In practice, italics are usually applied to one piece of text to emphasize or
distinguish it from the main body that is in serif fonts.
### Old style numbers
Old style numbers, also known as [text
figures](https://en.wikipedia.org/wiki/Text_figures), designed with varying
heights for latin script languages in a fashion that resembles a typical line of
running text, hence the name.
In contrast, lining style numbers (also called lining, titling or modern
figures), have the same height as upper-case characters.
YAMLResume defaults to old style numbers for latin script language resumes and
lining style numbers for others.
> High-quality typesetting generally prefers text figures in body text: they
> integrate better with lowercase letters and small capitals, unlike runs of
> lining figures. Lining figures are called for in all-capitals settings (hence
> the alternative name titling figures), and may work better in tables and
> spreadsheets.
>
> — [Text figures](https://en.wikipedia.org/wiki/Text_figures#Design)
### Recommended Western Font
There are tons of fonts out there nowadays, so recommending a universal western
font scheme for your resume is not an easy task.
* RECOMMEND, using serif fonts for the main body text
* RECOMMEND, using sans-serif fonts for titles, but serif fonts can be used as
well
* RECOMMEND, using italic font style to emphasize text in main body,
corresponding bold style can be used as well
Here is a list of commonly used serif fonts:
* [Garamond](https://en.wikipedia.org/wiki/Garamond)
* [Palatino](https://en.wikipedia.org/wiki/Palatino)
* [Geogria](https://en.wikipedia.org/wiki/Georgia_\(typeface\))
* [Baskerville](https://en.wikipedia.org/wiki/Baskerville)
* [Minion](https://en.wikipedia.org/wiki/Minion_\(typeface\))
* [Hoefler Text](https://en.wikipedia.org/wiki/Hoefler_Text)
* [Linux Libertine](https://en.wikipedia.org/wiki/Linux_Libertine)
A list of commonly used sans-serif fonts:
* [Helvetica](https://en.wikipedia.org/wiki/Helvetica)
* [Gill Sans](https://en.wikipedia.org/wiki/Gill_Sans)
* [Optima](https://en.wikipedia.org/wiki/Optima)
***
[^1]: [Serif vs Sans: The Final Battle](http://designreviver.com/inspiration/serif-vs-sans-the-final-battle/)
[^2]: When the width of layout is small, usually it's not suitable to
use justified alignment, because applying justified alignment will
force most software to adjust the letter-spacing, and often, the
final layout effect will be very bad.
[^3]: For example, the innovation of TeX typesetting system lies in its
excellent
[justification](https://en.wikipedia.org/wiki/TeX#Hyphenation_and_justification)
algorithm, the principle of which is to adjust the letter-spacing to
make the layout more
[justified](https://en.wikipedia.org/wiki/Typographic_alignment#Justified).
[^4]: A Beginner's [Guide](https://designschool.canva.com/blog/kerning/) to Kerning Like a Designer
[^5]: [Ligature](https://en.wikipedia.org/wiki/Ligature)
[^6]: [Italic Type](https://en.wikipedia.org/wiki/Italic_type)
# Grammar
URL: (/en/docs/guide/grammar)
## Content
Being concise is the most important for a resume. Basic objective information is
the core of a resume:
* personal information
* important contact information such as telephone, e-mail must be clear
* education backgrounds
* if you are a fresh graduate, you can add education background of high school
* professional skills
* awards
* work (internship) experiences
Be cautious to add subjective information:
* self-evaluation
* personal hobbies
* social activities, volunteer experiences, etc., which have no clear
relations with the applied position
Be cautious to add objective information that are unrelated with the applied
position:
* photos
* birthday
* home address
* nationality
* political identity
* marital and family status
Prohibited contents:
* "My Resume" as the title
* watermarks of logos on resume templates from different sources
## Spelling
Spelling errors in a resume are a big no-no in a job search. Too many elementary
spelling errors can affect an employer's first impression of an applicant. Most
software have a spell checker, so use it appropriately to avoid many primary
spelling errors. Of course, don't rely too much on the software's spelling
check, it's better to find a trusted friend for a proof-reading.
### Proper nouns
In addition to common spelling errors, there are highly frequent spelling errors
in proper nouns, because they are more case sensitive. The same combination of
letters with different capitalization may have completely different meanings in
various fields, so job seekers must be very cautious. For example,
[iOS](http://www.apple.com/ios/) with lowercase "i" represents the mobile
operating system on an Apple iPhone, while
[IOS](https://en.wikipedia.org/wiki/Cisco_IOS) with uppercase "I" is the
dedicated system on Cisco routers.
Limited to our background, this guide summarizes some common spelling errors of
proper nouns within the IT field.
| Typos | Fix |
| ------------------------------ | -------------- |
| ajax | Ajax AJAX |
| android | Android |
| android studio | Android Studio |
| APP | App |
| AppStore, app store | App Store |
| Css, css | CSS |
| eclipse | Eclipse |
| git, GIT | Git |
| Html, html | HTML |
| Http, http | HTTP |
| json, Json | JSON |
| JAVA, java | Java |
| Javascript, javascript, JS, js | JavaScript |
| linux, LINUX | Linux |
| mysql | MySQL |
| node, Node, NodeJS, nodejs | Node.js |
| OC, oc, objective-c | Objective-C |
| python | Python |
| ruby | Ruby |
| sqlite | SQLite |
| xml, Xml | XML |
| xcode, XCODE, XCode | Xcode |
| ios, IOS | iOS |
| iphone, IPHONE | iPhone |
| jquery, JQuery | jQuery |
## Syntax
Compared with ordinary writing, there are some special grammar requirements for
resume writing.
* generally use the past tense, but If you are describing the present work or
education experience, use the present tense
* generally begin an item with a verb in the past tense, omitting the subject
* try to use simple and short sentences that are easy to understand, instead of
long and complex clauses
* list education backgrounds and work experiences in flashbacks, and the time
format should be accurate to month
* use the standard time format like "2015.05", or format that can be definitely
interpreted, such as "June, 2016", instead of year abbreviations like "05/06",
which can be interpreted differently in different countries
Here a list of 100 commonly used words in past tense in resume writing:
| | | | | |
| ------------- | ------------ | ------------ | ------------ | ------------ |
| Accelerated | Accomplished | Accounted | Accumulated | Achieved |
| Administrated | Arbitrated | Articulated | Boosted | Briefed |
| Broadened | Budgeted | Campaigned | Chaired | Championed |
| Clarified | Coached | Collaborated | Coordinated | Corroborated |
| Cultivated | Customized | Decided | Decreased | Delegated |
| Demonstrated | Designated | Developed | Devised | Diagnosed |
| Documented | Doubled | Economized | Edited | Educated |
| Empowered | Enabled | Encouraged | Endorsed | Enhanced |
| Facilitated | Focused | Forecasted | Generated | Harmonized |
| Harnessed | Identified | Illustrated | Impressed | Improved |
| Increased | Justified | Launched | Led | Magnified |
| Managed | Marketed | Mastered | Navigated | Negotiated |
| Observed | Obtained | Organized | Orchestrated | Participated |
| Pinpointed | Performed | Publicized | Published | Realigned |
| Recognized | Recommended | Selected | Separated | Spearheaded |
| Stimulated | Succeeded | Surpassed | Synchronized | Synergized |
| Tabulated | Targeted | Tested | Traded | Translated |
| Triggered | Triumphed | Troubleshot | Uncovered | Underwrote |
| Unearthed | Unified | Upgraded | Urged | Utilized |
| Validated | Verbalized | Verified | Vitalized | Yielded |
# Guide
URL: (/en/docs/guide)
## A Guide for Resume Writing and Typesetting
A resume gives people a first impression of your career.
On an A4 sheet paper (210 mm \* 297 mm), a resume ends the previous stage of
your life and begins the next.
> A nine-storey tower arises from a pile of earth.
>
> — [Laozi](https://en.wikipedia.org/wiki/Laozi), Chapter 64
A pretty-print resume is based on details such as font, punctuation, layout
and grammar.
This guide systematically explains the essentials of resume writing and
typesetting with special emphasis on typography, helping you to make a resume
beautiful in form and spirit. For each topic, it first explains WHAT it is, then
WHY it is so, and finally HOW to do it.
The guide tries to be as concise and clear as possible, there are four priority
levels for the different explanations:
* **MUST**, mandatory in typesetting, serious mistake if violated
* **RECOMMEND**, conform to general typesetting standards, highly recommended
* **SHOULD NOT**, require advanced knowledge or features in typesetting, or diverse
in different languages and cultures, or vary with regulations in companies,
dangerous to use if not informed
* **MUST NOT**, conflict with general typesetting standards, forbidden to apply
# Publishing
URL: (/en/docs/guide/publishing)
## File format
Common file formats for resumes include:
* PDF
* Microsoft Word (doc, docx)
* Plain Text
* HTML
Here we recommend PDF most:
* PDF has excellent cross-platform output quality, ensuring nearly 100%
consistent printing and display
* PDF can be embedded with fonts, allowing great freedom in font selection
* default PDF reader available on most platforms
* Windows 8 and above have a built-in PDF reader
* macOS has
[Preview](https://en.wikipedia.org/wiki/Preview_\(Mac_OS\)), iOS
has [iBooks](http://www.apple.com/ibooks/)
* many browsers (such as Chrome) have built-in
[pdf.js](http://mozilla.github.io/pdf.js/), which can also open PDF by default
It's easier to learn MS Word, but delivering a resume with Word format has great
disadvantages:
* Word documents must be opened with additional office software
installed
* Microsoft Word, [WPS Office](https://wps.com) for Windows
* [iWork](https://en.wikipedia.org/wiki/IWork) for macOS
* [WPS Office](https://wps.com), [LibreOffice](https://www.libreoffice.org/)
for Linux
* many online document editing systems such as [Google
Docs](https://docs.google.com/) can also open and edit Word documents
* Word documents may display quite differently in different software on
different platforms
* in reality not everyone has installed [Microsoft
Word](https://products.office.com/en-us/word) on his computer
* another fact is that a genuine license for Microsoft Word may cost hundreds
of dollars
* in order to try to ensure consistent display and output, Word documents are
best used with only a few fonts that are common to the major operating systems,
which results in Word documents with very little freedom in font selection.
Of course, different HR managers in various companies can have different
requirements and preferences. We recommend that you export the resume to PDF as
an alternative if making it by Word
## Email etiquette
Aside from the company's proprietary recruiting system, the primary method of
submitting resumes for job applications should be email. Some basic e-mail
etiquette is as follows.
* set the correct email nickname, don't use informal overly fancy nicknames, it
will give the employer an impression of being very unprofessional
* use a uniform format in the email header, keep it clear and concise to convey
the most important information
* recommended format: `Apply-Company Position-Name-[University/Education]-[Work Experience]`
* the body of the email should be concise, it is not recommended to write a long
cover letter with a lot of personal subjective evaluation
* best to add the title and a greeting at the beginning of text
* contents in body
* basic personal information, such as work status (in-service or not),
position, education and work experiences, etc.
* applying position
* applying approach, whether recommended by others
* add an inscriber containing name and contact information (telephone/email)
* attach the resume file named with the same format of the header
# Punctuations
URL: (/en/docs/guide/punctuations)
Punctuation is the most inconspicuous but also most error-prone part in resume
writing. Whether or not you can use punctuation correctly and standardized
reflects the job seeker's attitude to apply for the job.
The correct and standardized use of punctuation may look easy, but it is not as
simple as it seems. The main reason is that different language environments
either do not have a clear specification for the use of punctuation, or have a
specification but many places are not clearly defined, or there are several sets
of [style guides](https://en.wikipedia.org/wiki/Style_guide) but they are
incompatible or even conflicting with each other; and secondly, the actual
typesetting often encounters the situation of multi-language mixing, and then
the problem will become even more complicated. This guide tries to summarize
some general rules for the use of punctuation for your reference.
* MUST, adding one space after commas, periods, semicolons, colons, exclamation
marks and question marks
* MUST, adding one space before an open bracket and after a closed bracket, same
as a word, but no space after a closed bracket followed by a comma
* RECOMMEND, adding one space between a number and its unit
* RECOMMEND, not adding spaces around a hyphen, sometimes necessary to fine-tune
the letter-spacing
* RECOMMEND, not adding spaces around a slash which locates two parallel things
like "A or B"
* RECOMMEND, using quotation marks (`‘`、`’`、`“`、`”`), instead of
[apostrophes](https://en.wikipedia.org/wiki/Apostrophe)
* SHOULD NOT, adding any punctuation mark at the end of items in a [Bullet
list](https://en.wikipedia.org/wiki/Bullet_\(typography\))
* MUST NOT, hanging a punctuation mark at the start of a line, which can be
avoided by software's automatic settings or manual adjustment
## Connective mark
Hyphen (-), en-dash (–), and em-dash (—) are three punctuation marks that can be
easily confused and lead to errors. The usage of them is described below.
> for a hyphen, type a hyphen (-);
>
> for an en-dash, type two hyphens (--);
>
> for an em-dash, type three hyphens (---);
>
> for a minus sign, type a hyphen in mathematics mode ($-$).
>
> — Donald Knuth, [The TeXBook](https://en.wikipedia.org/wiki/Computers_and_Typesetting)
### Hyphen (-)
The hyphen is used primarily for:
* compound words such as "upper-case letter"
* separating numbers or characters, such as telephone numbers, "1-888-777-666"
* hyphenating the word at the end of a line to keep the whole layout neat
There are a few rules about hyphenation at the end of a line:
* try not to hyphenate the last word in more than three continuous lines
* avoid dividing proper nouns, personal names, etc.
* avoid cross-page hyphenation
* segment words according to syllables in principle, however the position to
hyphenate varies with words, so it's better to check dictionaries if
necessary[^7]
### En-dash (–)
The length of an en-dash equals the width of uppercase "N", and is half of the
length of an em-dash. It's mainly used for:
* indicating a range of numbers, date time, etc. such as dates in a year, "July–August 1968"
* indicating the start and end points of the navigation path, such as
"Boston–Hartford route"
When using an en-dash, it is generally not necessary to add spaces around it.
### Em-dash (—)
The length of an em-dash equals the width of uppercase "M", and its usage is the
most flexible and complex. It is usually used for:
* explaining something in details, equivalent to parentheses or colons
* segmenting declarative clauses
* indicating that the conversation is interrupted, in which case an
ellipsis may also be used
In addition, there are situations where two or three em-dashes are joined
together, but I won't go into details here.[^8].
***
[^7]: Professional typesetting software generally have automatic
hyphenating function, to some extents it can locate the position for
hyphenation if turned on, but it's best to artificially check
again.
[^8]: [Wikipedia/Dash](https://en.wikipedia.org/wiki/Dash) demonstrates detailed
usage of this symbol and the input methods of it on different operating
systems.
# Typesetting
URL: (/en/docs/guide/typesetting)
Typesetting is "architecture in two dimensions."
If text and its fonts are the materials of the building, then typesetting is
the drawings of the building. Before discussing typesetting, we need to clarify
some basic concepts, especially the system of dimensional units commonly used in
typesetting.
## Font size
Font size is the standard measurement for characters' size. The international
universal unit of font size is the point.
The [point](https://en.wikipedia.org/wiki/Point_\(typography\)) is usually
abbreviated as pt, it's the smallest unit of measure in typesetting. In fact,
the size of the point has varied throughout the history of printing. Since the
18th century, the point's size has varied from 0.18 to 0.4 mm. Following the
advent of [desktop publishing](https://en.wikipedia.org/wiki/Desktop_publishing)
in the 1980s and 1990s, [digital
printing](https://en.wikipedia.org/wiki/Digital_printing) has largely supplanted
the [letterpress printing](https://en.wikipedia.org/wiki/Printing_press) and
gradually established the DTP point as the facto standard.
The DTP point is defined as 1/72 of an
[inch](https://en.wikipedia.org/wiki/Inch).
Most fonts will make the best effects when set to 10-12 pt. In other words, both
the strokes and structure of characters themselves and the spacing between
letters will present relatively good visual effects in such size. The larger the
font size, the looser the text appears, so you need to manually decrease the
letter spacing; on the other hand, the smaller the font size, the more compact
the text appears, so you need to manually increase the letter spacing.
| pt | mm | cm | pica | inch |
| -- | ------ | ------- | ---- | ---- |
| 1 | 0.3528 | 0.03528 | 1/12 | 1/72 |
## Leading
Leading or line-spacing refers to the distance between the baselines of two
consecutive lines.
The ideal leading is at least 120% of the text's font size, generally 1.2-1.5
times are recommended. Different fonts have different x-height, in principle,
the larger the x-height of the font applied, the larger the leading should be,
conversely, the smaller the x-height, the smaller the leading.
## Page layout
Layout is the outline of typesetting, it's like the head-rope of a fishing net,
once the head-rope is raised up, all the meshes spread naturally. In addition to
general typesetting rules for font size and leading, there are some unique
requirements in resume layout design. In principle, it's best to control the
resume in one page.
* Making the language clear and concise
* Adjusting the font size and leading within a reasonable range
* Keeping page margins in 10-25 mm and making the left and right margins
symmetrical
* Using lists rather than parallel sentences to list information
* Using flush left alignment, taking caution to use justified alignment as
justified alignment may cause problems in hyphenation and letter-spacing
because the lengths of words are different
# Layouts
URL: (/en/docs/layouts)
The core of a resume is the content, but the layout is also important. Lots of
JSON/YAML based resume generators only focus on the content, leaving the
layout untouched, which leaves a big problem for the user.
Unlike other resume generators, YAMLResume provides an opinionated layout
solution out of the box , which allows users to focus on the content of the
resume while generate professional looking resumes with pixel perfect layout and
typesetting.
Starting from v0.8.0, YAMLResume supports multiple layouts and multiple output
engines (LaTeX and Markdown) via the `layouts` array.
Here is an example of layout configuration in a `resume.yml` file:
```yml lineNumbers title="resume.yml"
---
content:
# ...
locale:
language: en
layouts:
- engine: latex
template: moderncv-banking
page:
showPageNumbers: true
margins:
top: 2.5cm
left: 1.5cm
right: 1.5cm
bottom: 2.5cm
typography:
fontSize: 11pt
- engine: markdown
- engine: html
template: calm
typography:
fontSize: 16px
```
## Engines
YAMLResume currently supports three engines:
* [HTML](./layouts/html): Generates web-native HTML resumes.
* [LaTeX](./layouts/latex): Generates high-quality PDF resumes.
* [Markdown](./layouts/markdown): Generates plain Markdown resumes.
## Learn More
# Chinese
URL: (/en/docs/locale/chinese)
The [Chinese](https://en.wikipedia.org/wiki/Chinese_language) language belongs
to the [Sino-Tibetan language
family](https://en.wikipedia.org/wiki/Sino-Tibetan_language_family), which is
very much different from the Latin script languages. About 1.4 billion
people, or 17% of the world's population, speak a variety of Chinese as their
first language.
## Linguistics
### Character Set
The [Chinese characters](https://en.wikipedia.org/wiki/Chinese_characters) and
the [Latin
characters](https://en.wikipedia.org/wiki/Western_Latin_character_sets_\(computing\))
represent two fundamentally different approaches to written language.
The Latin characters has a limited character set, where relatively few
characters are needed to represent a large vocabulary, each character represents
a specific sound or [phoneme](https://en.wikipedia.org/wiki/Phoneme), and words
are formed by combining these characters in specific sequences. Chinese, on the
other hand, has tens of thousands of characters in order to express the full
range of the Chinese language, each character represents a
[morpheme](https://en.wikipedia.org/wiki/Morpheme) or word, often conveying
meaning directly, and words are formed by combining individual characters, each
with its own meaning and pronunciation.
This fundamental difference in writing systems has significant implications for
language learning, text processing, and cultural exchange. While the Latin
characters are relatively easy to learn and use, the Chinese characters
requires significant memorization and practice.
### Variants
While there are many regional variations of the Chinese language, the two
primary written forms are Simplified Chinese and Traditional Chinese.
Here's a breakdown:
**Simplified Chinese**
* Primarily used in mainland China and Singapore.
* Developed in the mid-20th century to increase literacy rates.
* Uses [simplified
characters](https://en.wikipedia.org/wiki/Simplified_Chinese_characters), often
with fewer strokes than traditional characters.
**Traditional Chinese**
* Primarily used in Hong Kong, Macau, Taiwan, and many overseas Chinese communities.
* The older form of written Chinese.
* Uses [traditional
characters](https://en.wikipedia.org/wiki/Traditional_Chinese_characters), with
more and complex strokes.
It's important to note that both Simplified and Traditional Chinese can be used
to write various dialects of Chinese, such as
[Mandarin](https://en.wikipedia.org/wiki/Mandarin_Chinese),
[Cantonese](https://en.wikipedia.org/wiki/Cantonese), and
[Hokkien](https://en.wikipedia.org/wiki/Hokkien).
Meanwhile, Traditional Chinese has at least two variants, namely, the Hong Kong
variant [zh-HK](https://simplelocalize.io/data/locale-code/zh-HK/) and the
Taiwan variant [zh-TW](https://simplelocalize.io/data/locale-code/zh-TW/). Most
of the scripts in zh-HK and zh-TW are identical, with only a few minor
differences.
For example, the word "software", when translated to zh-HK, it is "軟件", while in
zh-TW, it is "軟體". There are about tens of words in English that are translated
differently in zh-HK and zh-TW, details
[here](https://zh.wikipedia.org/wiki/%E7%B9%81%E4%BD%93%E5%AD%97#%E7%94%A8%E8%AA%9E%E5%B7%AE%E7%95%B0).
In general, YAMLResume can't do too much for the difference between zh-HK and
zh-TW, as users have to decide which variant to use when writing resumes and
make sure that the content conforms to the idioms and convensions of zh-HK or
zh-TW. However, there is one thing that YAMLResume needs to handle properly for
zh-HK and zh-TW, as some countries and regions have different names in zh-HK and
zh-TW. [Saudi Arabia](https://en.wikipedia.org/wiki/Saudi_Arabia), for example,
is translated as "沙特阿拉伯" in zh-HK and "沙烏地阿拉伯" in zh-TW. There are also a few
other countries. YAMLResume takes [care](#location-countries-and-regions) of all
countries and regions that has different translations in zh-HK and zh-TW.
## Idioms
### Date
Dates are presented differently in English and Chinese, e.g. "Jun 2018 –
Present" in English should be translated as "2018 年 6 月至今" in Chinese,the
position of the year and month should be reversed, and the en-dash "–" should be
replaced by "至".
Meanwhile, Chinese do not use dedicated words for months, instead, it uses a
combination of an Arabic number and a character "月", making it as simple as a
game of counting.
| English | Chinese |
| --------------- | ------- |
| January (Jan) | 1 月 |
| February (Feb) | 2 月 |
| March (Mar) | 3 月 |
| April (Apr) | 4 月 |
| May (May) | 5 月 |
| June (Jun) | 6 月 |
| July (Jul) | 7 月 |
| August (Aug) | 8 月 |
| September (Sep) | 9 月 |
| October (Oct) | 10 月 |
| November (Nov) | 11 月 |
| December (Dec) | 12 月 |
### Location
Address formats differ between
[English](/docs/locale/english#location) and Chinese conventions.
Unlike English, when presenting a location with address, city, and country, the
general part (country, state, etc.) usually comes first in Chinese, while the
most specific part (town, address, etc.) comes last.
## Typesetting
### Font
Just like Latin script languages, Chinese has its serif font
[Song](/docs/guide/font#song) and sans-serif font [Bold](/docs/guide/font#bold). Besides,
it also has two additional font styles, [Regular](/docs/guide/font#regular) and
[Fangsong](/docs/guide/font#fangsong). You can check [Guide -> Font -> CJK
Font](/docs/guide/font#cjk-font) for more details.
YAMLResume uses Song as the main font for Chinese resumes.
### Punctuations
Chinese punctuations, like the language itself, has its own unique
characteristics. One important distinction to note is the difference between
[half-width and
full-width](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms)
punctuations.
The primary difference between half-width and full-width punctuations in Chinese
lies in their visual width and their intended use.
**Half-width punctuations**
* **Narrower**: these punctuations are typically used in conjunction with Latin
characters or numbers, such as in URLs, email addresses, or code snippets.
* **Less common**: they are less commonly used in standard Chinese text, often
used in a small portion of Latin script language phrases or paragraphs.
**Full-width punctuations**
* **Wider**: these punctuations are designed to match the width of Chinese
characters, ensuring a visually balanced and consistent appearance in Chinese
text.
* **More common**: they are the standard punctuation marks used in Chinese text.
Using the correct type of punctuations is crucial for proper formatting and
readability in Chinese text. Mismatched punctuations can lead to visual
inconsistencies and potential confusion.
By understanding the difference between half-width and full-width punctuations,
you can ensure that your Chinese text is correctly formatted and visually
appealing. Here is a table of punctuations in both half-width and full-width
forms, used in Latin script and Chinese languages respectively.
| | English | Simplified Chinese |
| ---------------------- | ------- | ------------------ |
| Full Stop/Period (句号) | . | 。 |
| Question Mark (问号) | ? | ? |
| Exclamation Mark (感叹号) | ! | ! |
| Comma (逗点) | , | , |
| Colon (冒号) | : | : |
| Semicolon (分号) | ; | ; |
| Parenthesis (小括号) | () | () |
| Bracket (中括号) | \[] | [] |
| Brace (花括号) | \{} | {} |
For resumes, it's the author's duty to use correct punctuations when composing
the content, but YAMLResume can guarantee that our resume templates will always
use the correct punctuations. We have two cases right now:
#### Comma
English uses the comma `,` as a separator to separate parts of a sentence and
items in a list, while Chinese uses a Chinese comma `,` to separate sensences,
and a dedicated enumeration comma
([顿号](https://en.wikipedia.org/wiki/Comma#East_Asia), `、`) to separate items in
a list (e.g. keyword list).
#### Colon
English and Chinese also have
[different](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) colons.
The [English colon](https://www.compart.com/en/unicode/U+003A) is `:`, with
Unicode `U+003A`, while the [Chinese
colon](https://www.compart.com/en/unicode/U+FF1A) is `:`, with Unicode `U+FF1A`.
As you can always trust, YAMLResume also takes care of this. We use correct
colon for various fixed terms like "Keywords:" ("关键字:" in Simplified
Chinese, "關鍵字:" in Traditional Chinese) and "Courses:" ( `课程:` in
Simplified Chinese, `課程:` in Traditional Chinese) in our resume template.
### Old Style Numbers
By default, **YAMLResume do not use [old style
numbers](/docs/guide/font#old-style-numbers) for Chinese resumes**. Why? Because
Chinese characters all have the same height and width (that is why Chinese
characters are also called "方块字", which means square characters), basically all
Chinese characters are titled and monospaced by nature. By adopting numbers in
the lining style, the number style is adapted more closely to the Chinese
characters.
### Italics
By default, **YAMLResume do not use italics in Chinese resumes** because italics
in Chinese is considered as a [bad
practice](https://drwhispers.com/2021/11/16/italics-in-chinese/), why?
In Latin script languages, italics are usually distinguished from body serifs
and are used to emphasise or differentiate parts of the text, however,
italicizing Chinese characters can disrupt the natural flow and readability of
the text.
Unlike Latin characters, Chinese characters are square characters that are not
traditionally written in italics, and many Chinese fonts do not have specific
italic glyphs for each character. When italicizing Chinese text, software often
simply slants the characters, which can result in a visually unpleasant and
unprofessional appearance.
## Translations
YAMLResume adopts the following translations for various options and terms used
in Chinese resumes.
### Education Degrees
| English | Chinese (Simplified) | Chinese (Traditional, Hong Kong) | Chinese (Traditional, Taiwan) |
| ------------- | -------------------- | -------------------------------- | ----------------------------- |
| Middle School | 初中 | 初中 | 初中 |
| High School | 高中 | 高中 | 高中 |
| Diploma | 专科 | 專科 | 專科 |
| Associate | 副学士 | 副學士 | 副學士 |
| Bachelor | 学士 | 學士 | 學士 |
| Master | 硕士 | 碩士 | 碩士 |
| Doctor | 博士 | 博士 | 博士 |
### Languages
| English | Chinese (Simplified) | Chinese (Traditional, Hong Kong) | Chinese (Traditional, Taiwan) |
| ----------- | -------------------- | -------------------------------- | ----------------------------- |
| Afrikaans | 南非荷兰语 | 南非荷蘭語 | 南非荷蘭語 |
| Albanian | 阿尔巴尼亚语 | 阿爾巴尼亞語 | 阿爾巴尼亞語 |
| Amharic | 阿姆哈拉语 | 阿姆哈拉語 | 阿姆哈拉語 |
| Arabic | 阿拉伯语 | 阿拉伯語 | 阿拉伯語 |
| Azerbaijani | 阿塞拜疆语 | 阿塞拜疆語 | 亞塞拜然語 |
| Belarusian | 白俄罗斯语 | 白俄羅斯語 | 白俄羅斯語 |
| Bengali | 孟加拉语 | 孟加拉語 | 孟加拉語 |
| Bhojpuri | 博杰普尔语 | 博傑普爾語 | 博傑普爾語 |
| Bulgarian | 保加利亚语 | 保加利亞語 | 保加利亞語 |
| Burmese | 缅甸语 | 緬甸語 | 緬甸語 |
| Cantonese | 粤语 | 粵語 | 粵語 |
| Catalan | 加泰罗尼亚语 | 加泰羅尼亞語 | 加泰隆尼亞語 |
| Chinese | 中文 | 中文 | 中文 |
| Croatian | 克罗地亚语 | 克羅地亞語 | 克羅埃西亞語 |
| Czech | 捷克语 | 捷克語 | 捷克語 |
| Danish | 丹麦语 | 丹麥語 | 丹麥語 |
| Dutch | 荷兰语 | 荷蘭語 | 荷蘭語 |
| English | 英语 | 英語 | 英語 |
| Estonian | 爱沙尼亚语 | 愛沙尼亞語 | 愛沙尼亞語 |
| Farsi | 波斯语 | 波斯語 | 波斯語 |
| Filipino | 菲律宾语 | 菲律賓語 | 菲律賓語 |
| Finnish | 芬兰语 | 芬蘭語 | 芬蘭語 |
| French | 法语 | 法語 | 法語 |
| German | 德语 | 德語 | 德語 |
| Greek | 希腊语 | 希臘語 | 希臘語 |
| Gujarati | 古吉拉特语 | 古吉拉特語 | 古吉拉特語 |
| Hausa | 豪萨语 | 豪薩語 | 豪薩語 |
| Hebrew | 希伯来语 | 希伯來語 | 希伯來語 |
| Hindi | 印地语 | 印地語 | 印地語 |
| Hungarian | 匈牙利语 | 匈牙利語 | 匈牙利語 |
| Icelandic | 冰岛语 | 冰島語 | 冰島語 |
| Igbo | 伊博语 | 伊博語 | 伊博語 |
| Indonesian | 印度尼西亚语 | 印度尼西亞語 | 印度尼西亞語 |
| Irish | 爱尔兰语 | 愛爾蘭語 | 愛爾蘭語 |
| Italian | 意大利语 | 意大利語 | 意大利語 |
| Japanese | 日语 | 日語 | 日語 |
| Javanese | 爪哇语 | 爪哇語 | 爪哇語 |
| Kazakh | 哈萨克语 | 哈薩克語 | 哈薩克語 |
| Khmer | 高棉语 | 高棉語 | 高棉語 |
| Korean | 韩语 | 韓語 | 韓語 |
| Lahnda | 拉亨达语 | 拉亨達語 | 拉亨達語 |
| Latvian | 拉脱维亚语 | 拉脫維亞語 | 拉脫維亞語 |
| Lithuanian | 立陶宛语 | 立陶宛語 | 立陶宛語 |
| Malay | 马来语 | 馬來語 | 馬來語 |
| Mandarin | 普通话 | 普通話 | 普通話 |
| Marathi | 马拉地语 | 馬拉地語 | 馬拉地語 |
| Nepali | 尼泊尔语 | 尼泊爾語 | 尼泊爾語 |
| Norwegian | 挪威语 | 挪威語 | 挪威語 |
| Oromo | 奥罗莫语 | 奧羅莫語 | 奧羅莫語 |
| Pashto | 普什图语 | 普什圖語 | 普什圖語 |
| Polish | 波兰语 | 波蘭語 | 波蘭語 |
| Portuguese | 葡萄牙语 | 葡萄牙語 | 葡萄牙語 |
| Romanian | 罗马尼亚语 | 羅馬尼亞語 | 羅馬尼亞語 |
| Russian | 俄语 | 俄語 | 俄語 |
| Serbian | 塞尔维亚语 | 塞爾維亞語 | 塞爾維亞語 |
| Shona | 绍纳语 | 紹納語 | 紹納語 |
| Sinhala | 僧伽罗语 | 僧伽羅語 | 僧伽羅語 |
| Slovak | 斯洛伐克语 | 斯洛伐克語 | 斯洛伐克語 |
| Slovene | 斯洛文尼亚语 | 斯洛文尼亞語 | 斯洛文尼亞語 |
| Somali | 索马里语 | 索馬里語 | 索馬里語 |
| Spanish | 西班牙语 | 西班牙語 | 西班牙語 |
| Sundanese | 巽他语 | 巽他語 | 巽他語 |
| Swahili | 斯瓦希里语 | 斯瓦希里語 | 斯瓦希里語 |
| Swedish | 瑞典语 | 瑞典語 | 瑞典語 |
| Tagalog | 他加禄语 | 他加祿語 | 他加祿語 |
| Tamil | 泰米尔语 | 泰米爾語 | 泰米爾語 |
| Telugu | 泰卢固语 | 泰盧固語 | 泰盧固語 |
| Thai | 泰语 | 泰語 | 泰語 |
| Turkish | 土耳其语 | 土耳其語 | 土耳其語 |
| Ukrainian | 乌克兰语 | 烏克蘭語 | 烏克蘭語 |
| Urdu | 乌尔都语 | 烏爾都語 | 烏爾都語 |
| Uzbek | 乌兹别克语 | 烏茲別克語 | 烏茲別克語 |
| Vietnamese | 越南语 | 越南語 | 越南語 |
| Yoruba | 约鲁巴语 | 約魯巴語 | 約魯巴語 |
| Zulu | 祖鲁语 | 祖魯語 | 祖魯語 |
### Language Fluencies
| English | Chinese (Simplified) | Chinese (Traditional, Hong Kong) | Chinese (Traditional, Taiwan) |
| -------------------------------- | -------------------- | -------------------------------- | ----------------------------- |
| Elementary Proficiency | 初级水平 | 初級水平 | 初級水平 |
| Limited Working Proficiency | 有限工作水平 | 有限工作水平 | 有限工作水平 |
| Minimum Professional Proficiency | 最低专业水平 | 最低專業水平 | 最低專業水平 |
| Full Professional Proficiency | 完全专业水平 | 完全專業水平 | 完全專業水平 |
| Native or Bilingual Proficiency | 母语或双语水平 | 母語或雙語水平 | 母語或雙語水平 |
### Location (Countries and Regions)
| English | Chinese (Simplified) | Chinese (Traditional, Hong Kong) | Chinese (Traditional, Taiwan) |
| ------------------------------------ | -------------------- | -------------------------------- | ----------------------------- |
| Afghanistan | 阿富汗 | 阿富汗 | 阿富汗 |
| Aland Islands | 奥兰群岛 | 奧蘭羣島 | 奧蘭群島 |
| Albania | 阿尔巴尼亚 | 阿爾巴尼亞 | 阿爾巴尼亞 |
| Algeria | 阿尔及利亚 | 阿爾及利亞 | 阿爾及利亞 |
| American Samoa | 美属萨摩亚 | 美屬薩摩亞 | 美屬薩摩亞 |
| Andorra | 安道尔 | 安道爾 | 安道爾 |
| Angola | 安哥拉 | 安哥拉 | 安哥拉 |
| Anguilla | 安圭拉 | 安圭拉 | 安圭拉 |
| Antarctica | 南极洲 | 南極洲 | 南極洲 |
| Antigua And Barbuda | 安提瓜和巴布达 | 安提瓜和巴布達 | 安地卡及巴布達 |
| Argentina | 阿根廷 | 阿根廷 | 阿根廷 |
| Armenia | 亚美尼亚 | 亞美尼亞 | 亞美尼亞 |
| Aruba | 阿鲁巴 | 阿魯巴 | 阿魯巴 |
| Australia | 澳大利亚 | 澳大利亞 | 澳大利亞 |
| Austria | 奥地利 | 奧地利 | 奧地利 |
| Azerbaijan | 阿塞拜疆 | 阿塞拜疆 | 亞塞拜然 |
| Bahrain | 巴林 | 巴林 | 巴林 |
| Bangladesh | 孟加拉 | 孟加拉 | 孟加拉 |
| Barbados | 巴巴多斯 | 巴巴多斯 | 巴貝多 |
| Belarus | 白俄罗斯 | 白俄羅斯 | 白俄羅斯 |
| Belgium | 比利时 | 比利時 | 比利時 |
| Belize | 伯利兹 | 伯利茲 | 貝里斯 |
| Benin | 贝宁 | 貝寧 | 貝南 |
| Bermuda | 百慕大 | 百慕大 | 百慕大 |
| Bhutan | 不丹 | 不丹 | 不丹 |
| Bolivia | 玻利维亚 | 玻利維亞 | 玻利維亞 |
| Bonaire, Sint Eustatius and Saba | 博内尔岛、圣尤斯特歇斯和萨巴岛 | 博內爾島、聖尤斯特歇斯和薩巴島 | 博內爾島、聖尤斯特歇斯和薩巴島 |
| Bosnia and Herzegovina | 波斯尼亚和黑塞哥维那 | 波斯尼亞和黑塞哥維那 | 波斯尼亞和黑塞哥維那 |
| Botswana | 博茨瓦纳 | 博茨瓦納 | 波札那 |
| Bouvet Island | 布维岛 | 布維島 | 布維島 |
| Brazil | 巴西 | 巴西 | 巴西 |
| British Indian Ocean Territory | 英属印度洋领地 | 英屬印度洋領地 | 英屬印度洋領地 |
| Brunei | 文莱 | 文萊 | 汶萊 |
| Bulgaria | 保加利亚 | 保加利亞 | 保加利亞 |
| Burkina Faso | 布基纳法索 | 布基納法索 | 布吉納法索 |
| Burundi | 布隆迪 | 布隆迪 | 蒲隆地 |
| Cambodia | 柬埔寨 | 柬埔寨 | 柬埔寨 |
| Cameroon | 喀麦隆 | 喀麥隆 | 喀麥隆 |
| Canada | 加拿大 | 加拿大 | 加拿大 |
| Cape Verde | 佛得角 | 佛得角 | 維德角 |
| Cayman Islands | 开曼群岛 | 開曼羣島 | 開曼群島 |
| Central African Republic | 中非 | 中非 | 中非 |
| Chad | 乍得 | 乍得 | 查德 |
| Chile | 智利 | 智利 | 智利 |
| China | 中国 | 中國 | 中國 |
| Christmas Island | 圣诞岛 | 聖誕島 | 聖誕島 |
| Cocos (Keeling) Islands | 科科斯(基林)群岛 | 科科斯(基林)羣島 | 科科斯(基林)群島 |
| Colombia | 哥伦比亚 | 哥倫比亞 | 哥倫比亞 |
| Comoros | 科摩罗 | 科摩羅 | 葛摩 |
| Congo | 刚果 | 剛果 | 剛果 |
| Cook Islands | 库克群岛 | 庫克羣島 | 庫克群島 |
| Costa Rica | 哥斯达黎加 | 哥斯達黎加 | 哥斯大黎加 |
| Cote D'Ivoire (Ivory Coast) | 科特迪瓦 | 科特迪瓦 | 象牙海岸 |
| Croatia | 克罗地亚 | 克羅地亞 | 克羅埃西亞 |
| Cuba | 古巴 | 古巴 | 古巴 |
| Curaçao | 库拉索 | 庫拉索 | 庫拉索 |
| Cyprus | 塞浦路斯 | 塞浦路斯 | 塞普勒斯 |
| Czech Republic | 捷克 | 捷克 | 捷克 |
| Democratic Republic of the Congo | 刚果(金) | 剛果(金) | 剛果(金) |
| Denmark | 丹麦 | 丹麥 | 丹麥 |
| Djibouti | 吉布提 | 吉布提 | 吉布提 |
| Dominica | 多米尼加 | 多米尼加 | 多明尼加 |
| Dominican Republic | 多明尼加共和国 | 多明尼加共和國 | 多明尼加共和國 |
| East Timor | 东帝汶 | 東帝汶 | 東帝汶 |
| Ecuador | 厄瓜多尔 | 厄瓜多爾 | 厄瓜多 |
| Egypt | 埃及 | 埃及 | 埃及 |
| El Salvador | 萨尔瓦多 | 薩爾瓦多 | 薩爾瓦多 |
| Equatorial Guinea | 赤道几内亚 | 赤道幾內亞 | 赤道幾內亞 |
| Eritrea | 厄立特里亚 | 厄立特里亞 | 厄利垂亞 |
| Estonia | 爱沙尼亚 | 愛沙尼亞 | 愛沙尼亞 |
| Ethiopia | 埃塞俄比亚 | 埃塞俄比亞 | 衣索比亞 |
| Falkland Islands | 福克兰群岛 | 福克蘭羣島 | 福克蘭群島 |
| Faroe Islands | 法罗群岛 | 法羅羣島 | 法羅群島 |
| Fiji Islands | 斐济 | 斐濟 | 斐濟 |
| Finland | 芬兰 | 芬蘭 | 芬蘭 |
| France | 法国 | 法國 | 法國 |
| French Guiana | 法属圭亚那 | 法屬圭亞那 | 法屬蓋亞那 |
| French Polynesia | 法属波利尼西亚 | 法屬波利尼西亞 | 法屬波利尼西亞 |
| French Southern Territories | 法属南部领地 | 法屬南部領地 | 法屬南部領地 |
| Gabon | 加蓬 | 加蓬 | 加彭 |
| Gambia The | 冈比亚 | 岡比亞 | 甘比亞 |
| Georgia | 格鲁吉亚 | 格魯吉亞 | 喬治亞 |
| Germany | 德国 | 德國 | 德國 |
| Ghana | 加纳 | 加納 | 迦納 |
| Gibraltar | 直布罗陀 | 直布羅陀 | 直布羅陀 |
| Greece | 希腊 | 希臘 | 希臘 |
| Greenland | 格陵兰岛 | 格陵蘭島 | 格陵蘭島 |
| Grenada | 格林纳达 | 格林納達 | 格瑞那達 |
| Guadeloupe | 瓜德罗普岛 | 瓜德羅普島 | 瓜德羅普島 |
| Guam | 关岛 | 關島 | 關島 |
| Guatemala | 危地马拉 | 危地馬拉 | 瓜地馬拉 |
| Guernsey and Alderney | 根西岛 | 根西島 | 根西島 |
| Guinea | 几内亚 | 幾內亞 | 幾內亞 |
| Guinea-Bissau | 几内亚比绍 | 幾內亞比紹 | 幾內亞比索 |
| Guyana | 圭亚那 | 圭亞那 | 蓋亞那 |
| Haiti | 海地 | 海地 | 海地 |
| Heard Island and McDonald Islands | 赫德·唐纳岛及麦唐纳岛 | 赫德·唐納島及麥唐納島 | 赫德·唐納島及麥唐納島 |
| Honduras | 洪都拉斯 | 洪都拉斯 | 宏都拉斯 |
| Hong Kong S.A.R. | 中国香港 | 中國香港 | 中國香港 |
| Hungary | 匈牙利 | 匈牙利 | 匈牙利 |
| Iceland | 冰岛 | 冰島 | 冰島 |
| India | 印度 | 印度 | 印度 |
| Indonesia | 印度尼西亚 | 印度尼西亞 | 印度尼西亞 |
| Iran | 伊朗 | 伊朗 | 伊朗 |
| Iraq | 伊拉克 | 伊拉克 | 伊拉克 |
| Ireland | 爱尔兰 | 愛爾蘭 | 愛爾蘭 |
| Israel | 以色列 | 以色列 | 以色列 |
| Italy | 意大利 | 意大利 | 義大利 |
| Jamaica | 牙买加 | 牙買加 | 牙買加 |
| Japan | 日本 | 日本 | 日本 |
| Jersey | 泽西岛 | 澤西島 | 澤西島 |
| Jordan | 约旦 | 約旦 | 約旦 |
| Kazakhstan | 哈萨克斯坦 | 哈薩克斯坦 | 哈薩克 |
| Kenya | 肯尼亚 | 肯尼亞 | 肯亞 |
| Kiribati | 基里巴斯 | 基里巴斯 | 吉里巴斯 |
| Kosovo | 科索沃 | 科索沃 | 科索沃 |
| Kuwait | 科威特 | 科威特 | 科威特 |
| Kyrgyzstan | 吉尔吉斯斯坦 | 吉爾吉斯斯坦 | 吉爾吉斯斯坦 |
| Laos | 寮人民民主共和国 | 寮人民民主共和國 | 寮人民民主共和國 |
| Latvia | 拉脱维亚 | 拉脫維亞 | 拉脫維亞 |
| Lebanon | 黎巴嫩 | 黎巴嫩 | 黎巴嫩 |
| Lesotho | 莱索托 | 萊索托 | 賴索托 |
| Liberia | 利比里亚 | 利比里亞 | 賴比瑞亞 |
| Libya | 利比亚 | 利比亞 | 利比亞 |
| Liechtenstein | 列支敦士登 | 列支敦士登 | 列支敦斯登 |
| Lithuania | 立陶宛 | 立陶宛 | 立陶宛 |
| Luxembourg | 卢森堡 | 盧森堡 | 盧森堡 |
| Macau S.A.R. | 中国澳门 | 中國澳門 | 中國澳門 |
| Madagascar | 马达加斯加 | 馬達加斯加 | 馬達加斯加 |
| Malawi | 马拉维 | 馬拉維 | 馬拉維 |
| Malaysia | 马来西亚 | 馬來西亞 | 馬來西亞 |
| Maldives | 马尔代夫 | 馬爾代夫 | 馬爾地夫 |
| Mali | 马里 | 馬裏 | 馬裡 |
| Malta | 马耳他 | 馬耳他 | 馬耳他 |
| Man (Isle of) | 马恩岛 | 馬恩島 | 馬恩島 |
| Marshall Islands | 马绍尔群岛 | 馬紹爾羣島 | 馬紹爾群島 |
| Martinique | 马提尼克岛 | 馬提尼克島 | 馬提尼克島 |
| Mauritania | 毛里塔尼亚 | 毛里塔尼亞 | 茅利塔尼亞 |
| Mauritius | 毛里求斯 | 毛里求斯 | 模里西斯 |
| Mayotte | 马约特 | 馬約特 | 馬約特 |
| Mexico | 墨西哥 | 墨西哥 | 墨西哥 |
| Micronesia | 密克罗尼西亚 | 密克羅尼西亞 | 密克羅尼西亞 |
| Moldova | 摩尔多瓦 | 摩爾多瓦 | 摩爾多瓦 |
| Monaco | 摩纳哥 | 摩納哥 | 摩納哥 |
| Mongolia | 蒙古 | 蒙古 | 蒙古 |
| Montenegro | 黑山 | 黑山 | 黑山 |
| Montserrat | 蒙特塞拉特 | 蒙特塞拉特 | 蒙特塞拉特 |
| Morocco | 摩洛哥 | 摩洛哥 | 摩洛哥 |
| Mozambique | 莫桑比克 | 莫桑比克 | 莫三比克 |
| Myanmar | 缅甸 | 緬甸 | 緬甸 |
| Namibia | 纳米比亚 | 納米比亞 | 奈米比亞 |
| Nauru | 瑙鲁 | 瑙魯 | 諾魯 |
| Nepal | 尼泊尔 | 尼泊爾 | 尼泊爾 |
| Netherlands | 荷兰 | 荷蘭 | 荷蘭 |
| New Caledonia | 新喀里多尼亚 | 新喀里多尼亞 | 新喀里多尼亞 |
| New Zealand | 新西兰 | 新西蘭 | 紐西蘭 |
| Nicaragua | 尼加拉瓜 | 尼加拉瓜 | 尼加拉瓜 |
| Niger | 尼日尔 | 尼日爾 | 尼日 |
| Nigeria | 尼日利亚 | 尼日利亞 | 奈及利亞 |
| Niue | 纽埃 | 紐埃 | 紐埃 |
| Norfolk Island | 诺福克岛 | 諾福克島 | 諾福克島 |
| North Korea | 朝鲜 | 朝鮮 | 朝鮮 |
| North Macedonia | 北馬其頓 | 北馬其頓 | 北馬其頓 |
| Northern Mariana Islands | 北马里亚纳群岛 | 北马里亞納羣島 | 北马里亞納群島 |
| Norway | 挪威 | 挪威 | 挪威 |
| Oman | 阿曼 | 阿曼 | 阿曼 |
| Pakistan | 巴基斯坦 | 巴基斯坦 | 巴基斯坦 |
| Palau | 帕劳 | 帕勞 | 帛琉 |
| Palestinian Territory Occupied | 巴勒斯坦 | 巴勒斯坦 | 巴勒斯坦 |
| Panama | 巴拿马 | 巴拿馬 | 巴拿馬 |
| Papua new Guinea | 巴布亚新几内亚 | 巴布亞新幾內亞 | 巴布亞紐幾內亞 |
| Paraguay | 巴拉圭 | 巴拉圭 | 巴拉圭 |
| Peru | 秘鲁 | 祕魯 | 秘魯 |
| Philippines | 菲律宾 | 菲律賓 | 菲律賓 |
| Pitcairn Island | 皮特凯恩群岛 | 皮特凱恩羣島 | 皮特凱恩群島 |
| Poland | 波兰 | 波蘭 | 波蘭 |
| Portugal | 葡萄牙 | 葡萄牙 | 葡萄牙 |
| Puerto Rico | 波多黎各 | 波多黎各 | 波多黎各 |
| Qatar | 卡塔尔 | 卡塔爾 | 卡達 |
| Reunion | 留尼汪岛 | 留尼汪島 | 留尼汪島 |
| Romania | 罗马尼亚 | 羅馬尼亞 | 羅馬尼亞 |
| Russia | 俄罗斯联邦 | 俄羅斯聯邦 | 俄羅斯聯邦 |
| Rwanda | 卢旺达 | 盧旺達 | 盧安達 |
| Saint Helena | 圣赫勒拿 | 聖赫勒拿 | 聖赫勒拿 |
| Saint Kitts And Nevis | 圣基茨和尼维斯 | 聖基茨和尼維斯 | 聖克里斯多福及尼維斯 |
| Saint Lucia | 圣卢西亚 | 聖盧西亞 | 聖露西亞 |
| Saint Pierre and Miquelon | 圣皮埃尔和密克隆 | 聖皮埃爾和密克隆 | 聖皮埃爾和密克隆 |
| Saint Vincent And The Grenadines | 圣文森特和格林纳丁斯 | 聖文森特和格林納丁斯 | 聖文森及格瑞那丁 |
| Saint-Barthelemy | 圣巴泰勒米 | 聖巴泰勒米 | 聖巴泰勒米 |
| Saint-Martin (French part) | 密克罗尼西亚 | 密克羅尼西亞 | 密克羅尼西亞 |
| Samoa | 萨摩亚 | 薩摩亞 | 薩摩亞 |
| San Marino | 圣马力诺 | 聖馬力諾 | 聖馬利諾 |
| Sao Tome and Principe | 圣多美和普林西比 | 聖多美和普林西比 | 聖多美和普林西比 |
| Saudi Arabia | 沙特阿拉伯 | 沙特阿拉伯 | 沙烏地阿拉伯 |
| Senegal | 塞内加尔 | 塞內加爾 | 塞內加爾 |
| Serbia | 塞尔维亚 | 塞爾維亞 | 塞爾維亞 |
| Seychelles | 塞舌尔 | 塞舌爾 | 塞席爾 |
| Sierra Leone | 塞拉利昂 | 塞拉利昂 | 獅子山 |
| Singapore | 新加坡 | 新加坡 | 新加坡 |
| Sint Maarten (Dutch part) | 圣马丁岛(荷兰部分) | 聖馬丁島(荷蘭部分) | 聖馬丁島(荷蘭部分) |
| Slovakia | 斯洛伐克 | 斯洛伐克 | 斯洛伐克 |
| Slovenia | 斯洛文尼亚 | 斯洛文尼亞 | 斯洛維尼亞 |
| Solomon Islands | 所罗门群岛 | 所羅門羣島 | 索羅門群島 |
| Somalia | 索马里 | 索馬里 | 索馬利亞 |
| South Africa | 南非 | 南非 | 南非 |
| South Georgia | 南乔治亚 | 南喬治亞 | 南喬治亞 |
| South Korea | 韩国 | 韓國 | 韓國 |
| South Sudan | 南苏丹 | 南蘇丹 | 南蘇丹 |
| Spain | 西班牙 | 西班牙 | 西班牙 |
| Sri Lanka | 斯里兰卡 | 斯里蘭卡 | 斯里蘭卡 |
| Sudan | 苏丹 | 蘇丹 | 蘇丹 |
| Suriname | 苏里南 | 蘇里南 | 蘇利南 |
| Svalbard And Jan Mayen Islands | 斯瓦尔巴和扬马延群岛 | 斯瓦爾巴和揚馬延羣島 | 斯瓦爾巴和揚馬延群島 |
| Swaziland | 斯威士兰 | 斯威士蘭 | 史瓦濟蘭 |
| Sweden | 瑞典 | 瑞典 | 瑞典 |
| Switzerland | 瑞士 | 瑞士 | 瑞士 |
| Syria | 叙利亚 | 敘利亞 | 敘利亞 |
| Taiwan | 中国台湾 | 中國臺灣 | 中國臺灣 |
| Tajikistan | 塔吉克斯坦 | 塔吉克斯坦 | 塔吉克 |
| Tanzania | 坦桑尼亚 | 坦桑尼亞 | 坦尚尼亞 |
| Thailand | 泰国 | 泰國 | 泰國 |
| The Bahamas | 巴哈马 | 巴哈馬 | 巴哈馬 |
| Togo | 多哥 | 多哥 | 多哥 |
| Tokelau | 托克劳 | 托克勞 | 托克勞 |
| Tonga | 汤加 | 湯加 | 湯加 |
| Trinidad And Tobago | 特立尼达和多巴哥 | 特立尼達和多巴哥 | 千里達及托巴哥 |
| Tunisia | 突尼斯 | 突尼斯 | 突尼西亞 |
| Türkiye | 土耳其 | 土耳其 | 土耳其 |
| Turkmenistan | 土库曼斯坦 | 土庫曼斯坦 | 土庫曼 |
| Turks And Caicos Islands | 特克斯和凯科斯群岛 | 特克斯和凱科斯羣島 | 特克斯和凱科斯群島 |
| Tuvalu | 图瓦卢 | 圖瓦盧 | 吐瓦魯 |
| Uganda | 乌干达 | 烏干達 | 烏干達 |
| Ukraine | 乌克兰 | 烏克蘭 | 烏克蘭 |
| United Arab Emirates | 阿拉伯联合酋长国 | 阿拉伯聯合酋長國 | 阿拉伯聯合大公國 |
| United Kingdom | 英国 | 英國 | 英國 |
| United States | 美国 | 美國 | 美國 |
| United States Minor Outlying Islands | 美国本土外小岛屿 | 美國本土外小島嶼 | 美國本土外小島嶼 |
| Uruguay | 乌拉圭 | 烏拉圭 | 烏拉圭 |
| Uzbekistan | 乌兹别克斯坦 | 烏茲別克斯坦 | 烏茲別克 |
| Vanuatu | 瓦努阿图 | 瓦努阿圖 | 萬那杜 |
| Vatican City State (Holy See) | 梵蒂冈 | 梵蒂岡 | 梵蒂岡 |
| Venezuela | 委内瑞拉 | 委內瑞拉 | 委內瑞拉 |
| Vietnam | 越南 | 越南 | 越南 |
| Virgin Islands (British) | 圣文森特和格林纳丁斯 | 聖文森特和格林納丁斯 | 聖文森及格瑞那丁 |
| Virgin Islands (US) | 维尔京群岛(美国) | 維爾京羣島(美國) | 維爾京群島(美國) |
| Wallis And Futuna Islands | 瓦利斯群岛和富图纳群岛 | 瓦利斯羣島和富圖納羣島 | 瓦利斯群島和富圖納群島 |
| Western Sahara | 西撒哈拉 | 西撒哈拉 | 西撒哈拉 |
| Yemen | 也门 | 也門 | 葉門 |
| Zambia | 赞比亚 | 贊比亞 | 尚比亞 |
| Zimbabwe | 津巴布韦 | 津巴布韋 | 辛巴威 |
### Section Names
| English | Chinese (Simplified) | Chinese (Traditional, Hong Kong) | Chinese (Traditional, Taiwan) |
| ------------ | -------------------- | -------------------------------- | ----------------------------- |
| Awards | 荣誉 | 榮譽 | 榮譽 |
| Basics | 简介 | 簡介 | 簡介 |
| Certificates | 证书 | 證書 | 證書 |
| Education | 教育背景 | 教育背景 | 教育背景 |
| Interests | 兴趣爱好 | 興趣愛好 | 興趣愛好 |
| Languages | 语言 | 語言 | 語言 |
| Location | 地址 | 地址 | 地址 |
| Profiles | 社交信息 | 社交信息 | 社交信息 |
| Projects | 项目 | 項目 | 項目 |
| Publications | 出版刊物 | 出版刊物 | 出版刊物 |
| References | 引荐 | 引薦 | 引薦 |
| Skills | 专业技能 | 專業技能 | 專業技能 |
| Volunteer | 志愿服务 | 志願服務 | 志願服務 |
| Work | 工作经历 | 工作經歷 | 工作經歷 |
### Skill Levels
| English | Chinese (Simplified) | Chinese (Traditional, Hong Kong) | Chinese (Traditional, Taiwan) |
| ------------ | -------------------- | -------------------------------- | ----------------------------- |
| Novice | 新手 | 新手 | 新手 |
| Beginner | 初级 | 初級 | 初級 |
| Intermediate | 中级 | 中級 | 中級 |
| Advanced | 高级 | 高級 | 高級 |
| Expert | 专家 | 專家 | 專家 |
| Master | 大师 | 大師 | 大師 |
### Terms
| English | Chinese (Simplified) | Chinese (Traditional, Hong Kong) | Chinese (Traditional, Taiwan) |
| -------- | -------------------- | -------------------------------- | ----------------------------- |
| Courses | 课程 | 課程 | 課程 |
| Keywords | 关键字 | 關鍵字 | 關鍵字 |
| Score | 成绩 | 成績 | 成績 |
# Dutch
URL: (/en/docs/locale/dutch)
English and Dutch are both
[Germanic languages](https://en.wikipedia.org/wiki/Germanic_languages), with
Dutch being part of the West Germanic branch. While both languages share some
common foundations, Dutch has distinct characteristics that require specific
considerations for YAMLResume.
## Linguistics
### Character Set
The character sets of English and Dutch are similar—both languages primarily use
the [Latin alphabet](https://en.wikipedia.org/wiki/Latin_alphabet). However,
Dutch has additional features. Here's a detailed comparison:
| Feature | English Character Set | Dutch Character Set |
| :--------------------- | :-------------------------------- | :------------------------------------------------------------------------------------------------------------------------- |
| **Alphabet** | 26 letters (`a-z`) | 26 letters (`a-z`). The digraph `ij` is sometimes treated as a single letter. |
| **Diacritics** | None | Uses diacritics such as the trema (`ë`, `ï`) to separate vowels (e.g., *coöperatie*) and acute accents (`é`) for emphasis. |
| **Special Characters** | Limited to basic Latin characters | Includes standard characters but treats `ij` specially in capitalization (e.g., *IJsselmeer*). |
The main differences between the English and Dutch writing systems:
* **Digraph `ij`**: In Dutch, `ij` combined is often treated as a single letter.
When capitalized at the start of a sentence or proper noun, both I and J are
capitalized (e.g., *IJmuiden*).
* **Diacritics**: The trema (diaeresis) is used to indicate that two vowels are
pronounced separately (hiatus), rather than as a diphthong.
## Idioms
### Date
Days of the week and months are not capitalized in Dutch (unlike English),
unless they appear at the beginning of a sentence. For example, "Sep 2021" is
translated as "sep. 2021" or "sept. 2021" in Dutch, with a lowercase month.
### Capitalization
Dutch capitalization rules are generally similar to English but with exceptions:
* **Days/Months**: Written in lowercase (*maandag*, *januari*).
* **Languages/Nationalities**: Capitalized (*Nederlands*, *Engels*).
* **Pronoun "I"**: The Dutch "ik" is written in lowercase, unless at the start
of a sentence.
YAMLResume internally adopts a fixed set of options and terms for all resume
templates. For example, languages in YAMLResume resume templates adopt
[LinkedIn's language fluency options](https://www.linkedin.com/pulse/language-proficiency-linkedin-duaa-ali/):
* Elementary Proficiency
* Limited Working Proficiency
* Minimum Professional Proficiency
* Full Professional Proficiency
* Native or Bilingual Proficiency
These are translated to Dutch as follows:
* Elementaire vaardigheid
* Beperkte werkvaardigheid
* Minimale professionele vaardigheid
* Volledige professionele vaardigheid
* Moedertaal of tweetalige vaardigheid
Only the first word is capitalized, following Dutch capitalization conventions.
## Typesetting
### Punctuations
Dutch has several notable differences in punctuation from English:
* **Decimal separator**: Dutch uses a comma as a decimal separator (e.g., 3,14)
instead of a period like in English (3.14).
* **Thousand separator**: Dutch uses a period or space as a thousand separator
(e.g., 1.000 or 1 000) rather than a comma.
* **Quotation marks**: Dutch officially uses double quotes (often low-high
`„...”` or high-high `"..."`) or single quotes (`'...'`).
## Translations
YAMLResume adopts the following translations for various options and terms used
in Dutch resumes.
### Education Degrees
| English | Dutch |
| :------------ | :--------- |
| Middle School | Middelbaar |
| High School | Hogeschool |
| Diploma | Diploma |
| Associate | Graduaat |
| Bachelor | Bachelor |
| Master | Master |
| Doctor | Doctoraat |
### Languages
| English | Dutch |
| :---------- | :------------- |
| Afrikaans | Afrikaans |
| Albanian | Albanees |
| Amharic | Amhaars |
| Arabic | Arabisch |
| Azerbaijani | Azerbeidzjaans |
| Belarusian | Wit-Russisch |
| Bengali | Bengaals |
| Bhojpuri | Bhojpuri |
| Bulgarian | Bulgaars |
| Burmese | Birmees |
| Cantonese | Kantonees |
| Catalan | Catalaans |
| Chinese | Chinees |
| Croatian | Kroatisch |
| Czech | Tsjechisch |
| Danish | Deens |
| Dutch | Nederlands |
| English | Engels |
| Estonian | Ests |
| Farsi | Persan |
| Filipino | Filipijns |
| Finnish | Fins |
| French | Frans |
| German | Duits |
| Greek | Grieks |
| Gujarati | Gujarati |
| Hausa | Haoussa |
| Hebrew | Hebreeuws |
| Hindi | Hindi |
| Hungarian | Hongaars |
| Icelandic | IJslands |
| Igbo | Igbo |
| Indonesian | Indonesisch |
| Irish | Iers |
| Italian | Italiaans |
| Japanese | Japans |
| Javanese | Javaans |
| Kazakh | Kazachs |
| Khmer | Khmer |
| Korean | Koreaans |
| Lahnda | Lahnda |
| Latvian | Lets |
| Lithuanian | Litouws |
| Malay | Maleis |
| Mandarin | Mandarijn |
| Marathi | Marathi |
| Nepali | Nepalees |
| Norwegian | Noors |
| Oromo | Oromo |
| Pashto | Pasjto |
| Polish | Pools |
| Portuguese | Portugees |
| Romanian | Roemeense |
| Russian | Russisch |
| Serbian | Servisch |
| Shona | Shona |
| Sinhala | Singalees |
| Slovak | Slowaaks |
| Slovene | Sloveens |
| Somali | Somalisch |
| Spanish | Spaans |
| Sundanese | Soendanees |
| Swahili | Swahili |
| Swedish | Zweeds |
| Tagalog | Tagalog |
| Tamil | Tamoul |
| Telugu | Telugu |
| Thai | Thais |
| Turkish | Turks |
| Ukrainian | Oekraïens |
| Urdu | Urdu |
| Uzbek | Oezbeeks |
| Vietnamese | Vietnamees |
| Yoruba | Joruba |
| Zulu | Zoeloe |
### Language Fluencies
| English | Dutch |
| :------------------------------- | :----------------------------------- |
| Elementary Proficiency | Elementaire vaardigheid |
| Limited Working Proficiency | Beperkte werkvaardigheid |
| Minimum Professional Proficiency | Minimale professionele vaardigheid |
| Full Professional Proficiency | Volledige professionele vaardigheid |
| Native or Bilingual Proficiency | Moedertaal of tweetalige vaardigheid |
### Location (Countries and Regions)
| English | Dutch |
| :----------------------------------- | :------------------------------------------------ |
| Afghanistan | Afghanistan |
| Aland Islands | Åland eilanden |
| Albania | Albanië |
| Algeria | Algerije |
| American Samoa | Amerikaans-Samoa |
| Andorra | Andorra |
| Angola | Angola |
| Anguilla | Anguilla |
| Antarctica | Antarctica |
| Antigua And Barbuda | Antigua en Barbuda |
| Argentina | Argentinië |
| Armenia | Armenië |
| Aruba | Aruba |
| Australia | Australië |
| Austria | Oostenrijk |
| Azerbaijan | Azerbeidzjan |
| Bahrain | Bahrein |
| Bangladesh | Bangladesh |
| Barbados | Barbados |
| Belarus | Belarus |
| Belgium | België |
| Belize | Belize |
| Benin | Benin |
| Bermuda | Bermuda |
| Bhutan | Bhutan |
| Bolivia | Bolivia |
| Bonaire, Sint Eustatius and Saba | Bonaire, Sint Eustatius en Saba |
| Bosnia and Herzegovina | Bosnië en Herzegovina |
| Botswana | Botswana |
| Bouvet Island | Bouvet-eiland |
| Brazil | Brazilië |
| British Indian Ocean Territory | Brits Indische Oceaanterritorium |
| Brunei | Brunei |
| Bulgaria | Bulgarije |
| Burkina Faso | Burkina Faso |
| Burundi | Burundi |
| Cambodia | Cambodja |
| Cameroon | Kameroen |
| Canada | Canada |
| Cape Verde | Kaapverdië |
| Cayman Islands | Kaaimaneilanden |
| Central African Republic | Centraal-Afrikaanse Republiek |
| Chad | Tsjaad |
| Chile | Chili |
| China | China |
| Christmas Island | Christmaseiland |
| Cocos (Keeling) Islands | Cocoseilanden |
| Colombia | Colombië |
| Comoros | Comoren |
| Congo | Congo |
| Cook Islands | Cook Eilanden |
| Costa Rica | Costa Rica |
| Cote D'Ivoire (Ivory Coast) | Ivoorkust |
| Croatia | Kroatië |
| Cuba | Cuba |
| Curaçao | Curacao |
| Cyprus | Cyprus |
| Czech Republic | Tsjechische Republiek |
| Democratic Republic of the Congo | Democratische Republiek Congo |
| Denmark | Denemarken |
| Djibouti | Djibouti |
| Dominica | Dominica |
| Dominican Republic | Dominicaanse Republiek |
| East Timor | Oost-Timor |
| Ecuador | Ecuador |
| Egypt | Egypte |
| El Salvador | El Salvador |
| Equatorial Guinea | Equatoriaal-Guinea |
| Eritrea | Eritrea |
| Estonia | Estland |
| Ethiopia | Ethiopië |
| Falkland Islands | Falklandeilanden |
| Faroe Islands | Faeröer eilanden |
| Fiji Islands | Fiji-eilanden |
| Finland | Finland |
| France | Frankrijk |
| French Guiana | Frans-Guyana |
| French Polynesia | Frans-Polynesië |
| French Southern Territories | Franse Zuidelijke Gebieden |
| Gabon | Gabon |
| Gambia The | Gambia De |
| Georgia | Georgië |
| Germany | Duitsland |
| Ghana | Ghana |
| Gibraltar | Gibraltar |
| Greece | Griekenland |
| Greenland | Groenland |
| Grenada | Grenada |
| Guadeloupe | Guadeloupe |
| Guam | Guam |
| Guatemala | Guatemala |
| Guernsey and Alderney | Guernsey en Alderney |
| Guinea | Guinea |
| Guinea-Bissau | Guinee-Bissau |
| Guyana | Guyana |
| Haiti | Haïti |
| Heard Island and McDonald Islands | Heard Island en McDonald Islands |
| Honduras | Honduras |
| Hong Kong | HongKong |
| Hungary | Hongarijë |
| Iceland | Ijsland |
| India | India |
| Indonesia | Indonesië |
| Iran | Iran |
| Iraq | Iraq |
| Ireland | Ierland |
| Israel | Israël |
| Italy | Italië |
| Jamaica | Jamaica |
| Japan | Japan |
| Jersey | Jersey |
| Jordan | Jordanië |
| Kazakhstan | Kazachstan |
| Kenya | Kenia |
| Kiribati | Kiribati |
| Kosovo | Kosovo |
| Kuwait | Koeweit |
| Kyrgyzstan | Kirgizië |
| Laos | Laos |
| Latvia | Letland |
| Lebanon | Libanon |
| Lesotho | Lesotho |
| Liberia | Liberia |
| Libya | Libië |
| Liechtenstein | Liechtenstein |
| Lithuania | Litouwen |
| Luxembourg | Luxemburg |
| Macau | Macau |
| Madagascar | Madagascar |
| Malawi | Malawi |
| Malaysia | Maleisië |
| Maldives | Maldiven |
| Mali | Mali |
| Malta | Malta |
| Man (Isle of) | Man (Eiland van) |
| Marshall Islands | Marshall eilanden |
| Martinique | Martinique |
| Mauritania | Mauritanië |
| Mauritius | Mauritius |
| Mayotte | Mayotte |
| Mexico | Mexico |
| Micronesia | Micronesië |
| Moldova | Moldavië |
| Monaco | Monaco |
| Mongolia | Mongolië |
| Montenegro | Montenegro |
| Montserrat | Montserrat |
| Morocco | Marokko |
| Mozambique | Mozambique |
| Myanmar | Myanmar |
| Namibia | Namibië |
| Nauru | Nauru |
| Nepal | Nepal |
| Netherlands | Nederland |
| New Caledonia | Nieuw-Caledonië |
| New Zealand | Nieuw-Zeeland |
| Nicaragua | Nicaragua |
| Niger | Niger |
| Nigeria | Nigeria |
| Niue | Niue |
| Norfolk Island | Norfolkeiland |
| North Korea | Noord-Korea |
| North Macedonia | Noord-Macedionië |
| Northern Mariana Islands | Noordelijke Marianen |
| Norway | Noorwegen |
| Oman | Oman |
| Pakistan | Pakistan |
| Palau | Palau |
| Palestinian Territory Occupied | Palestijns bezet gebied |
| Panama | Panama |
| Papua new Guinea | Papoea-Nieuw-Guinea |
| Paraguay | Paraguay |
| Peru | Peru |
| Philippines | Philippines |
| Pitcairn Island | Pitcairn-eiland |
| Poland | Polen |
| Portugal | Portugal |
| Puerto Rico | Puerto Rico |
| Qatar | Katar |
| Reunion | Reunion |
| Romania | Roemenië |
| Russia | Rusland |
| Rwanda | Rwanda |
| Saint Helena | Sint-Helena |
| Saint Kitts And Nevis | Saint Kitts en Nevis |
| Saint Lucia | Saint Lucia |
| Saint Pierre and Miquelon | Saint Pierre en Miquelon |
| Saint Vincent And The Grenadines | Saint Vincent en de Grenadines |
| Saint-Barthelemy | Saint-Barthélemy |
| Saint-Martin (French part) | Saint-Martin (Frans deel) |
| Samoa | Samoa |
| San Marino | San Marino |
| Sao Tome and Principe | Sao Tomé en Principe |
| Saudi Arabia | Saoedi-Arabië |
| Senegal | Senegal |
| Serbia | Servië |
| Seychelles | Seychellen |
| Sierra Leone | Sierra Leone |
| Singapore | Singapore |
| Sint Maarten (Dutch part) | Sint Maarten (Nederlands deel) |
| Slovakia | Slowakije |
| Slovenia | Slovenië |
| Solomon Islands | Salomonseilanden |
| Somalia | Somalië |
| South Africa | Zuid-Afrika |
| South Georgia | Zuid-Georgië |
| South Korea | Zuid-Korea |
| South Sudan | Zuid-Sudan |
| Spain | Spanje |
| Sri Lanka | Sri Lanka |
| Sudan | Sudan |
| Suriname | Suriname |
| Svalbard And Jan Mayen Islands | Svalbard- en Jan Mayen-eilanden |
| Swaziland | Swaziland |
| Sweden | Zweden |
| Switzerland | Zwitserland |
| Syria | Syrië |
| Taiwan | Taiwan |
| Tajikistan | Tadzjikistan |
| Tanzania | Tanzania |
| Thailand | Thailand |
| The Bahamas | De Bahama's |
| Togo | Togo |
| Tokelau | Tokelau |
| Tonga | Tonga |
| Trinidad And Tobago | Trinidad en Tobago |
| Tunisia | Tunesië |
| Türkiye | Turkijë |
| Turkmenistan | Turkmenistan |
| Turks And Caicos Islands | Turks- en Caicoseilanden |
| Tuvalu | Tuvalu |
| Uganda | Oeganda |
| Ukraine | Oekraïne |
| United Arab Emirates | Verenigde Arabische Emiraten |
| United Kingdom | Koninkrijk |
| United States | Verenigde Staten |
| United States Minor Outlying Islands | Kleine afgelegen eilanden van de Verenigde Staten |
| Uruguay | Uruguay |
| Uzbekistan | Oezbekistan |
| Vanuatu | Vanuatu |
| Vatican City State (Holy See) | Vaticaanstad (Heilige Stoel) |
| Venezuela | Venezuela |
| Vietnam | Vietnam |
| Virgin Islands (British) | Britse Maagdeneilanden |
| Virgin Islands (US) | Amerikaanse Maagdeneilanden |
| Wallis And Futuna Islands | Wallis en Futuna-eilanden |
| Western Sahara | Westelijke Sahara |
| Yemen | Jemen |
| Zambia | Zambia |
| Zimbabwe | Zimbabwe |
### Section Names
| English | Dutch |
| :----------- | :---------------- |
| Awards | Onderscheidingen |
| Basics | Basis Informatie |
| Certificates | Certificaten |
| Education | Opleidingen |
| Interests | Interesses |
| Languages | Talen |
| Location | Locatie |
| Profiles | Profielen |
| Projects | Projecten |
| Publications | Publicaties |
| References | Referenties |
| Skills | Vaardigheden |
| Volunteer | Vrijwilligerswerk |
| Work | Werkervaring |
### Skill Levels
| English | Dutch |
| :----------- | :----------- |
| Novice | Nieuweling |
| Beginner | Beginner |
| Intermediate | Intermediair |
| Advanced | Geavanceerd |
| Expert | Expert |
| Master | Meester |
### Options and Terms
| English | Dutch |
| :------- | :---------- |
| Courses | Cursussen |
| Keywords | Trefwoorden |
| Score | Score |
# English
URL: (/en/docs/locale/english)
As we all know, English is widely used and spoken all over the world.
Supporting English in YAMLResume is an easy job. There's very little extra setup
to do in order to support English resumes with LaTeX.
## Linguistics
Theoretically, English belongs to [Germanic
languages](https://en.wikipedia.org/wiki/Germanic_languages), which is a branch
of the [Indo-European language
family](https://en.wikipedia.org/wiki/Indo-European_languages) spoken natively
by a population of about 515 million people mainly in Europe, North
America, Oceania, and Southern Africa.
### Character Set
Modern English is written with a Latin alphabet consisting of 26 letters, with
each having both uppercase and lowercase forms.
[Latin alphabet](https://en.wikipedia.org/wiki/Latin_alphabet) is the most
widely used alphabetic writing system in the world.
## Idioms
### Date
English has dedicated words for months, while each has a short form. YAMLResume
adopts the short form for all month fields by default.
| Long Form | Short Form |
| --------- | ---------- |
| January | Jan |
| February | Feb |
| March | Mar |
| April | Apr |
| May | May |
| June | Jun |
| July | Jul |
| August | Aug |
| September | Sep |
| October | Oct |
| November | Nov |
| December | Dec |
### Location
Different languages present locations in different format. In English, when
presenting a location with address, city, and country, the general part
(country, state, etc.) typically comes last, while the most specific part (town,
address, etc.) comes first. In some other languages like Chinese, the order is
totally reversed.
Here's the typical order in English:
1. Address: This includes the street number, street name, apartment number, etc.
2. City: The name of the city or town.
3. State/Province: The state or province, if applicable.
4. Country: The name of the country.
## Typesetting
Lots of typesetting theory and practice can be shared by all Latin script
languages, English is no exception here. We have already prepared a
[guide](/docs/guide) which covers lots of details.
### Font
Check [Guide -> Font](/docs/guide/font) from our guide for details.
* [Serif vs. sans-serif](/docs/guide/font#serif-vs-sans-serif)
* [Proportional vs. monospaced](/docs/guide/font#proportional-vs-monospaced)
* [Kerning](/docs/guide/font#kerning)
* [Ligature](/docs/guide/font#ligature)
* [Italics](/docs/guide/font#italics)
* [Old style numbers](/docs/guide/font#old-style-numbers)
### Punctuations
Check [Guide -> Punctuations](/docs/guide/punctuations) from our guide for details:
* [Hyphen](/docs/guide/punctuations#hyphen--)
* [En-dash](/docs/guide/punctuations#en-dash-)
* [Em-dash](/docs/guide/punctuations#em-dash-)
## Translations
YAMLResume adopts the following translations for various options and terms used
in English resumes.
### Education Degrees
YAMLResume presents the following predefined degrees for Education section.
| English |
| ------------- |
| Middle School |
| High School |
| Diploma |
| Associate |
| Bachelor |
| Master |
| Doctor |
### Languages
YAMLResume presents the following predefined language options for Languages
section.
| English |
| ----------- |
| Afrikaans |
| Albanian |
| Amharic |
| Arabic |
| Azerbaijani |
| Belarusian |
| Bengali |
| Bhojpuri |
| Bulgarian |
| Burmese |
| Cantonese |
| Catalan |
| Chinese |
| Croatian |
| Czech |
| Danish |
| Dutch |
| English |
| Estonian |
| Farsi |
| Filipino |
| Finnish |
| French |
| German |
| Greek |
| Gujarati |
| Hausa |
| Hebrew |
| Hindi |
| Hungarian |
| Icelandic |
| Igbo |
| Indonesian |
| Irish |
| Italian |
| Japanese |
| Javanese |
| Kazakh |
| Khmer |
| Korean |
| Lahnda |
| Latvian |
| Lithuanian |
| Malay |
| Mandarin |
| Marathi |
| Nepali |
| Norwegian |
| Oromo |
| Pashto |
| Polish |
| Portuguese |
| Romanian |
| Russian |
| Serbian |
| Shona |
| Sinhala |
| Slovak |
| Slovene |
| Somali |
| Spanish |
| Sundanese |
| Swahili |
| Swedish |
| Tagalog |
| Tamil |
| Telugu |
| Thai |
| Turkish |
| Ukrainian |
| Urdu |
| Uzbek |
| Vietnamese |
| Yoruba |
| Zulu |
### Language Fluencies
YAMLResume presents the following predefined language fluency options for
Languages section. These options are mirrored from
[Linkedin](https://www.linkedin.com/pulse/language-proficiency-linkedin-duaa-ali/).
| English |
| -------------------------------- |
| Elementary Proficiency |
| Limited Working Proficiency |
| Minimum Professional Proficiency |
| Full Professional Proficiency |
| Native or Bilingual Proficiency |
### Location (Countries and Regions)
YAMLResume provides the following options for countries and regions in Location
section. This list is coming from
[countries-states-cities-database](https://github.com/dr5hn/countries-states-cities-database).
Not all of them are countries, some are regions or
[SAR](https://en.wikipedia.org/wiki/Special_administrative_regions_of_China).
| English |
| ------------------------------------ |
| Afghanistan |
| Aland Islands |
| Albania |
| Algeria |
| American Samoa |
| Andorra |
| Angola |
| Anguilla |
| Antarctica |
| Antigua And Barbuda |
| Argentina |
| Armenia |
| Aruba |
| Australia |
| Austria |
| Azerbaijan |
| Bahrain |
| Bangladesh |
| Barbados |
| Belarus |
| Belgium |
| Belize |
| Benin |
| Bermuda |
| Bhutan |
| Bolivia |
| Bonaire, Sint Eustatius and Saba |
| Bosnia and Herzegovina |
| Botswana |
| Bouvet Island |
| Brazil |
| British Indian Ocean Territory |
| Brunei |
| Bulgaria |
| Burkina Faso |
| Burundi |
| Cambodia |
| Cameroon |
| Canada |
| Cape Verde |
| Cayman Islands |
| Central African Republic |
| Chad |
| Chile |
| China |
| Christmas Island |
| Cocos (Keeling) Islands |
| Colombia |
| Comoros |
| Congo |
| Cook Islands |
| Costa Rica |
| Cote D'Ivoire (Ivory Coast) |
| Croatia |
| Cuba |
| Curaçao |
| Cyprus |
| Czech Republic |
| Democratic Republic of the Congo |
| Denmark |
| Djibouti |
| Dominica |
| Dominican Republic |
| East Timor |
| Ecuador |
| Egypt |
| El Salvador |
| Equatorial Guinea |
| Eritrea |
| Estonia |
| Ethiopia |
| Falkland Islands |
| Faroe Islands |
| Fiji Islands |
| Finland |
| France |
| French Guiana |
| French Polynesia |
| French Southern Territories |
| Gabon |
| Gambia The |
| Georgia |
| Germany |
| Ghana |
| Gibraltar |
| Greece |
| Greenland |
| Grenada |
| Guadeloupe |
| Guam |
| Guatemala |
| Guernsey and Alderney |
| Guinea |
| Guinea-Bissau |
| Guyana |
| Haiti |
| Heard Island and McDonald Islands |
| Honduras |
| Hong Kong S.A.R. |
| Hungary |
| Iceland |
| India |
| Indonesia |
| Iran |
| Iraq |
| Ireland |
| Israel |
| Italy |
| Jamaica |
| Japan |
| Jersey |
| Jordan |
| Kazakhstan |
| Kenya |
| Kiribati |
| Kosovo |
| Kuwait |
| Kyrgyzstan |
| Laos |
| Latvia |
| Lebanon |
| Lesotho |
| Liberia |
| Libya |
| Liechtenstein |
| Lithuania |
| Luxembourg |
| Macau S.A.R. |
| Madagascar |
| Malawi |
| Malaysia |
| Maldives |
| Mali |
| Malta |
| Man (Isle of) |
| Marshall Islands |
| Martinique |
| Mauritania |
| Mauritius |
| Mayotte |
| Mexico |
| Micronesia |
| Moldova |
| Monaco |
| Mongolia |
| Montenegro |
| Montserrat |
| Morocco |
| Mozambique |
| Myanmar |
| Namibia |
| Nauru |
| Nepal |
| Netherlands |
| New Caledonia |
| New Zealand |
| Nicaragua |
| Niger |
| Nigeria |
| Niue |
| Norfolk Island |
| North Korea |
| North Macedonia |
| Northern Mariana Islands |
| Norway |
| Oman |
| Pakistan |
| Palau |
| Palestinian Territory Occupied |
| Panama |
| Papua new Guinea |
| Paraguay |
| Peru |
| Philippines |
| Pitcairn Island |
| Poland |
| Portugal |
| Puerto Rico |
| Qatar |
| Reunion |
| Romania |
| Russia |
| Rwanda |
| Saint Helena |
| Saint Kitts And Nevis |
| Saint Lucia |
| Saint Pierre and Miquelon |
| Saint Vincent And The Grenadines |
| Saint-Barthelemy |
| Saint-Martin (French part) |
| Samoa |
| San Marino |
| Sao Tome and Principe |
| Saudi Arabia |
| Senegal |
| Serbia |
| Seychelles |
| Sierra Leone |
| Singapore |
| Sint Maarten (Dutch part) |
| Slovakia |
| Slovenia |
| Solomon Islands |
| Somalia |
| South Africa |
| South Georgia |
| South Korea |
| South Sudan |
| Spain |
| Sri Lanka |
| Sudan |
| Suriname |
| Svalbard And Jan Mayen Islands |
| Swaziland |
| Sweden |
| Switzerland |
| Syria |
| Taiwan |
| Tajikistan |
| Tanzania |
| Thailand |
| The Bahamas |
| Togo |
| Tokelau |
| Tonga |
| Trinidad And Tobago |
| Tunisia |
| Türkiye |
| Turkmenistan |
| Turks And Caicos Islands |
| Tuvalu |
| Uganda |
| Ukraine |
| United Arab Emirates |
| United Kingdom |
| United States |
| United States Minor Outlying Islands |
| Uruguay |
| Uzbekistan |
| Vanuatu |
| Vatican City State (Holy See) |
| Venezuela |
| Vietnam |
| Virgin Islands (British) |
| Virgin Islands (US) |
| Wallis And Futuna Islands |
| Western Sahara |
| Yemen |
| Zambia |
| Zimbabwe |
### Section Names
YAMLResume supports the following sections, each with a section name.
| English |
| ------------ |
| Awards |
| Basics |
| Certificates |
| Education |
| Interests |
| Languages |
| Location |
| Profiles |
| Projects |
| Publications |
| References |
| Skills |
| Volunteer |
| Work |
### Skill Levels
YAMLResume presents the following skill level options for Skills section.
| English |
| ------------ |
| Novice |
| Beginner |
| Intermediate |
| Advanced |
| Expert |
| Master |
### Terms
YAMLResume uses some fixed terms in our resume template.
| Term | description |
| -------- | ------------------------------------------------------------------- |
| Courses | used in Education section for courses |
| Keywords | used in Work, Projects section where a list of keyword is presented |
| Score | used in Education section for grade/score in school |
# French
URL: (/en/docs/locale/french)
French is a [Romance language](https://en.wikipedia.org/wiki/Romance_languages)
of the Indo-European family. While it shares the Latin alphabet with English, it
has distinct characteristics in typography, punctuation, and grammar that
require specific considerations for YAMLResume.
## Linguistics
### Character Set
French uses the 26 letters of the basic [Latin
alphabet](https://en.wikipedia.org/wiki/Latin_alphabet), with four diacritics
appearing on vowels (circumflex accent, diaeresis, grave accent, acute accent)
and the cedilla appearing in "ç". There are also two ligatures, "œ" and "æ".
| Feature | English Character Set | French Character Set |
| ---------------------- | --------------------------------- | ----------------------------------------------------------------------------------------------------------------------- |
| **Alphabet** | 26 letters (`a-z`) | 26 letters plus letters with diacritics and ligatures |
| **Diacritics** | None | Acute (`é`), grave (`à`, `è`, `ù`), circumflex (`â`, `ê`, `î`, `ô`, `û`), diaeresis (`ë`, `ï`, `ü`, `ÿ`), cedilla (`ç`) |
| **Special Characters** | Limited to basic Latin characters | Includes ligatures `œ` (e.g., "cœur") and `æ` (e.g., "ex æquo") |
### Idioms
#### Date
Days of the week and months are not capitalized in French (unlike English). For
example, "Sep 2021" in English is translated as "sept. 2021" in French.
YAMLResume only uses months, hence the translation table:
| English | French |
| --------------- | ----------------- |
| January (Jan) | janvier (janv.) |
| February (Feb) | février (févr.) |
| March (Mar) | mars (mars) |
| April (Apr) | avril (avr.) |
| May (May) | mai (mai) |
| June (Jun) | juin (juin) |
| July (Jul) | juillet (juil.) |
| August (Aug) | août (août) |
| September (Sep) | septembre (sept.) |
| October (Oct) | octobre (oct.) |
| November (Nov) | novembre (nov.) |
| December (Dec) | décembre (déc.) |
#### Capitalization
French generally follows sentence case for titles and headings, but YAMLResume
provides capitalized terms for consistency with resume standards.
One notable difference is that languages and nationalities used as adjectives
are not capitalized in standard French (e.g., "je parle français"), but they are
capitalized when referring to the noun (the language itself) in lists within
YAMLResume for consistency.
### Typesetting
#### Punctuations
French has specific rules for spacing around punctuation marks:
* **High punctuation**: The colon (`:`), semicolon (`;`), exclamation mark
(`!`), and question mark (`?`) require a non-breaking space before them.
* **Quotation marks**: French uses guillemets (`«` and `»`) with non-breaking
spaces inside them (e.g., `« Bonjour »`).
* **Decimal separator**: French uses a comma as a decimal separator (e.g.,
3,14).
* **Thousand separator**: French uses a non-breaking space as a thousand
separator (e.g., 1 000).
YAMLResume handles the colon spacing specifically for French layouts (e.g., ` :`).
## Translations
YAMLResume adopts the following translations for various options and terms used
in French resumes.
### Education Degrees
| English | French |
| ------------- | ------------------------------------ |
| Middle School | Collège |
| High School | Lycée |
| Diploma | Diplôme |
| Associate | Diplôme universitaire de technologie |
| Bachelor | Licence |
| Master | Master |
| Doctor | Doctorat |
### Languages
| English | French |
| ----------- | ----------- |
| Afrikaans | Afrikaans |
| Albanian | Albanais |
| Amharic | Amharique |
| Arabic | Arabe |
| Azerbaijani | Azéri |
| Belarusian | Biélorusse |
| Bengali | Bengali |
| Bhojpuri | Bhojpuri |
| Bulgarian | Bulgare |
| Burmese | Birman |
| Cantonese | Cantonais |
| Catalan | Catalan |
| Chinese | Chinois |
| Croatian | Croate |
| Czech | Tchèque |
| Danish | Danois |
| Dutch | Néerlandais |
| English | Anglais |
| Estonian | Estonien |
| Farsi | Persan |
| Filipino | Filipino |
| Finnish | Finnois |
| French | Français |
| German | Allemand |
| Greek | Grec |
| Gujarati | Gujarati |
| Hausa | Haoussa |
| Hebrew | Hébreu |
| Hindi | Hindi |
| Hungarian | Hongrois |
| Icelandic | Islandais |
| Igbo | Igbo |
| Indonesian | Indonésien |
| Irish | Irlandais |
| Italian | Italien |
| Japanese | Japonais |
| Javanese | Javanais |
| Kazakh | Kazakh |
| Khmer | Khmer |
| Korean | Coréen |
| Lahnda | Lahnda |
| Latvian | Letton |
| Lithuanian | Lituanien |
| Malay | Malais |
| Mandarin | Mandarin |
| Marathi | Marathi |
| Nepali | Népalais |
| Norwegian | Norvégien |
| Oromo | Oromo |
| Pashto | Pachto |
| Polish | Polonais |
| Portuguese | Portugisisk |
| Romanian | Roumain |
| Russian | Russe |
| Serbian | Serbe |
| Shona | Shona |
| Sinhala | Cingalais |
| Slovak | Slovaque |
| Slovene | Slovène |
| Somali | Somali |
| Spanish | Espagnol |
| Sundanese | Soundanais |
| Swahili | Swahili |
| Swedish | Suédois |
| Tagalog | Tagalog |
| Tamil | Tamoul |
| Telugu | Telugu |
| Thai | Thaï |
| Turkish | Turc |
| Ukrainian | Ukrainien |
| Urdu | Ourdou |
| Uzbek | Ouzbek |
| Vietnamese | Vietnamien |
| Yoruba | Yoruba |
| Zulu | Zoulou |
### Language Fluencies
| English | French |
| -------------------------------- | ---------------------------- |
| Elementary Proficiency | Niveau élémentaire |
| Limited Working Proficiency | Niveau de travail limité |
| Minimum Professional Proficiency | Niveau professionnel minimum |
| Full Professional Proficiency | Niveau professionnel complet |
| Native or Bilingual Proficiency | Niveau natif ou bilingue |
### Location (Countries and Regions)
| English | French |
| ------------------------------------ | ------------------------------------------ |
| Afghanistan | Afghanistan |
| Aland Islands | Îles Åland |
| Albania | Albanie |
| Algeria | Algérie |
| American Samoa | Samoa américaines |
| Andorra | Andorre |
| Angola | Angola |
| Anguilla | Anguilla |
| Antarctica | Antarctique |
| Antigua And Barbuda | Antigua-et-Barbuda |
| Argentina | Argentine |
| Armenia | Arménie |
| Aruba | Aruba |
| Australia | Australie |
| Austria | Autriche |
| Azerbaijan | Azerbaïdjan |
| Bahrain | Bahreïn |
| Bangladesh | Bangladesh |
| Barbados | Barbade |
| Belarus | Biélorussie |
| Belgium | Belgique |
| Belize | Belize |
| Benin | Bénin |
| Bermuda | Bermudes |
| Bhutan | Bhoutan |
| Bolivia | Bolivie |
| Bonaire, Sint Eustatius and Saba | Bonaire, Saint-Eustache et Saba |
| Bosnia and Herzegovina | Bosnie-Herzégovine |
| Botswana | Botswana |
| Bouvet Island | Île Bouvet |
| Brazil | Brésil |
| British Indian Ocean Territory | Territoire britannique de l'océan Indien |
| Brunei | Brunéi |
| Bulgaria | Bulgarie |
| Burkina Faso | Burkina Faso |
| Burundi | Burundi |
| Cambodia | Cambodge |
| Cameroon | Cameroun |
| Canada | Canada |
| Cape Verde | Cap-Vert |
| Cayman Islands | Îles Caïmans |
| Central African Republic | République centrafricaine |
| Chad | Tchad |
| Chile | Chili |
| China | Chine |
| Christmas Island | Île Christmas |
| Cocos (Keeling) Islands | Îles Cocos (Keeling) |
| Colombia | Colombie |
| Comoros | Comores |
| Congo | Congo |
| Cook Islands | Îles Cook |
| Costa Rica | Costa Rica |
| Cote D'Ivoire (Ivory Coast) | Côte d'Ivoire |
| Croatia | Croatie |
| Cuba | Cuba |
| Curaçao | Curaçao |
| Cyprus | Chypre |
| Czech Republic | République tchèque |
| Democratic Republic of the Congo | République démocratique du Congo |
| Denmark | Danemark |
| Djibouti | Djibouti |
| Dominica | Dominique |
| Dominican Republic | République dominicaine |
| East Timor | Timor oriental |
| Ecuador | Équateur |
| Egypt | Égypte |
| El Salvador | Salvador |
| Equatorial Guinea | Guinée équatoriale |
| Eritrea | Érythrée |
| Estonia | Estonie |
| Ethiopia | Éthiopie |
| Falkland Islands | Îles Malouines |
| Faroe Islands | Îles Féroé |
| Fiji Islands | Fidji |
| Finland | Finlande |
| France | France |
| French Guiana | Guyane française |
| French Polynesia | Polynésie française |
| French Southern Territories | Terres australes françaises |
| Gabon | Gabon |
| Gambia The | Gambie |
| Georgia | Géorgie |
| Germany | Allemagne |
| Ghana | Ghana |
| Gibraltar | Gibraltar |
| Greece | Grèce |
| Greenland | Groenland |
| Grenada | Grenade |
| Guadeloupe | Guadeloupe |
| Guam | Guam |
| Guatemala | Guatemala |
| Guernsey and Alderney | Guernesey et Alderney |
| Guinea | Guinée |
| Guinea-Bissau | Guinée-Bissau |
| Guyana | Guyana |
| Haiti | Haïti |
| Heard Island and McDonald Islands | Îles Heard-et-MacDonald |
| Honduras | Honduras |
| Hong Kong S.A.R. | Hong Kong S.A.R. |
| Hungary | Hongrie |
| Iceland | Islande |
| India | Inde |
| Indonesia | Indonésie |
| Iran | Iran |
| Iraq | Irak |
| Ireland | Irlande |
| Israel | Israël |
| Italy | Italie |
| Jamaica | Jamaïque |
| Japan | Japon |
| Jersey | Jersey |
| Jordan | Jordanie |
| Kazakhstan | Kazakhstan |
| Kenya | Kenya |
| Kiribati | Kiribati |
| Kosovo | Kosovo |
| Kuwait | Koweït |
| Kyrgyzstan | Kirghizistan |
| Laos | Laos |
| Latvia | Lettonie |
| Lebanon | Liban |
| Lesotho | Lesotho |
| Liberia | Libéria |
| Libya | Libye |
| Liechtenstein | Liechtenstein |
| Lithuania | Lituanie |
| Luxembourg | Luxembourg |
| Macau S.A.R. | Macao S.A.R. |
| Madagascar | Madagascar |
| Malawi | Malawi |
| Malaysia | Malaisie |
| Maldives | Maldives |
| Mali | Mali |
| Malta | Malte |
| Man (Isle of) | Île de Man |
| Marshall Islands | Îles Marshall |
| Martinique | Martinique |
| Mauritania | Mauritanie |
| Mauritius | Maurice |
| Mayotte | Mayotte |
| Mexico | Mexique |
| Micronesia | Micronésie |
| Moldova | Moldavie |
| Monaco | Monaco |
| Mongolia | Mongolie |
| Montenegro | Monténégro |
| Montserrat | Montserrat |
| Morocco | Maroc |
| Mozambique | Mozambique |
| Myanmar | Myanmar |
| Namibia | Namibie |
| Nauru | Nauru |
| Nepal | Népal |
| Netherlands | Pays-Bas |
| New Caledonia | Nouvelle-Calédonie |
| New Zealand | Nouvelle-Zélande |
| Nicaragua | Nicaragua |
| Niger | Niger |
| Nigeria | Nigéria |
| Niue | Niue |
| Norfolk Island | Île Norfolk |
| North Korea | Corée du Nord |
| North Macedonia | Macédoine du Nord |
| Northern Mariana Islands | Îles Mariannes du Nord |
| Norway | Norvège |
| Oman | Oman |
| Pakistan | Pakistan |
| Palau | Palaos |
| Palestinian Territory Occupied | Palestine |
| Panama | Panama |
| Papua new Guinea | Papouasie-Nouvelle-Guinée |
| Paraguay | Paraguay |
| Peru | Pérou |
| Philippines | Philippines |
| Pitcairn Island | Îles Pitcairn |
| Poland | Pologne |
| Portugal | Portugal |
| Puerto Rico | Porto Rico |
| Qatar | Qatar |
| Reunion | La Réunion |
| Romania | Roumanie |
| Russia | Russie |
| Rwanda | Rwanda |
| Saint Helena | Sainte-Hélène |
| Saint Kitts And Nevis | Saint-Christophe-et-Niévès |
| Saint Lucia | Sainte-Lucie |
| Saint Pierre and Miquelon | Saint-Pierre-et-Miquelon |
| Saint Vincent And The Grenadines | Saint-Vincent-et-les-Grenadines |
| Saint-Barthelemy | Saint-Barthélemy |
| Saint-Martin (French part) | Saint-Martin |
| Samoa | Samoa |
| San Marino | Saint-Marin |
| Sao Tome and Principe | Sao Tomé-et-Principe |
| Saudi Arabia | Arabie saoudite |
| Senegal | Sénégal |
| Serbia | Serbie |
| Seychelles | Seychelles |
| Sierra Leone | Sierra Leone |
| Singapore | Singapour |
| Sint Maarten (Dutch part) | Saint-Martin |
| Slovakia | Slovaquie |
| Slovenia | Slovénie |
| Solomon Islands | Îles Salomon |
| Somalia | Somalie |
| South Africa | Afrique du Sud |
| South Georgia | Géorgie du Sud-et-les Îles Sandwich du Sud |
| South Korea | Corée du Sud |
| South Sudan | Soudan du Sud |
| Spain | Espagne |
| Sri Lanka | Sri Lanka |
| Sudan | Soudan |
| Suriname | Suriname |
| Svalbard And Jan Mayen Islands | Svalbard et Jan Mayen |
| Swaziland | Swaziland |
| Sweden | Suède |
| Switzerland | Suisse |
| Syria | Syrie |
| Taiwan | Taïwan |
| Tajikistan | Tadjikistan |
| Tanzania | Tanzanie |
| Thailand | Thaïlande |
| The Bahamas | Bahamas |
| Togo | Togo |
| Tokelau | Tokelau |
| Tonga | Tonga |
| Trinidad And Tobago | Trinité-et-Tobago |
| Tunisia | Tunisie |
| Türkiye | Turquie |
| Turkmenistan | Turkménistan |
| Turks And Caicos Islands | Îles Turques-et-Caïques |
| Tuvalu | Tuvalu |
| Uganda | Ouganda |
| Ukraine | Ukraine |
| United Arab Emirates | Émirats arabes unis |
| United Kingdom | Royaume-Uni |
| United States | États-Unis |
| United States Minor Outlying Islands | Îles mineures éloignées des États-Unis |
| Uruguay | Uruguay |
| Uzbekistan | Ouzbékistan |
| Vanuatu | Vanuatu |
| Vatican City State (Holy See) | Vatican |
| Venezuela | Venezuela |
| Vietnam | Viêt Nam |
| Virgin Islands (British) | Îles Vierges britanniques |
| Virgin Islands (US) | Îles Vierges américaines |
| Wallis And Futuna Islands | Wallis-et-Futuna |
| Western Sahara | Sahara occidental |
| Yemen | Yémen |
| Zambia | Zambie |
| Zimbabwe | Zimbabwe |
### Section Names
| English | French |
| ------------ | -------------------------- |
| Awards | Récompenses |
| Basics | Informations de base |
| Certificates | Certificats |
| Education | Formation |
| Interests | Centres d'intérêt |
| Languages | Langues |
| Projects | Projets |
| Publications | Publications |
| References | Références |
| Skills | Compétences |
| Volunteer | Bénévolat |
| Work | Expérience professionnelle |
### Skill Levels
| English | French |
| ------------ | ------------- |
| Novice | Novice |
| Beginner | Débutant |
| Intermediate | Intermédiaire |
| Advanced | Avancé |
| Expert | Expert |
| Master | Maître |
### Options and Terms
| English | French |
| -------- | --------- |
| Courses | Cours |
| Keywords | Mots-clés |
| Score | Score |
# German
URL: (/en/docs/locale/german)
German (Deutsch) is a
[West Germanic language](https://en.wikipedia.org/wiki/West_Germanic_languages)
mainly spoken in Central Europe. It is the most widely spoken and official or
co-official language in Germany, Austria, Switzerland, South Tyrol in Italy, the
German-speaking Community of Belgium, and Liechtenstein.
## Linguistics
### Character Set
German uses the Latin alphabet. In addition to the 26 standard letters, German
has three vowels with Umlaut: ä, ö and ü, as well as the Eszett or "sharp S": ß.
| Feature | English Character Set | German Character Set |
| ---------------------- | --------------------------------- | ----------------------------------------------- |
| **Alphabet** | 26 letters (`a-z`) | 26 letters plus letters with umlauts and Eszett |
| **Diacritics** | None | Umlaut (`ä`, `ö`, `ü`) |
| **Special Characters** | Limited to basic Latin characters | Includes Eszett `ß` |
### Idioms
#### Date
German dates are formatted with day, month, and year. Month names are
capitalized.
| English | German |
| --------- | --------- |
| January | Januar |
| February | Februar |
| March | März |
| April | April |
| May | Mai |
| June | Juni |
| July | Juli |
| August | August |
| September | September |
| October | Oktober |
| November | November |
| December | Dezember |
#### Location
In German addresses, the house number typically follows the street name, and the
postal code precedes the city name.
Here is the typical order in German:
1. **Street and House Number**: The street name comes first, followed by the
house number (e.g., "Musterstraße 123").
2. **Postal Code and City**: The 5-digit postal code (*Postleitzahl* or PLZ)
comes *before* the city name (e.g., "10115 Berlin").
3. **State**: Unlike in some other countries, the federal state (*Bundesland*)
is typically omitted in standard addresses.
4. **Country**: The country name is placed on the last line.
#### Capitalization
German is unique among major languages in that it capitalizes **all nouns**,
regardless of whether they are proper nouns or common nouns (e.g., *Haus*,
*Apfel*, *Freiheit*).
Other parts of speech, such as adjectives and verbs, are generally lowercase
unless they are nominalized (used as a noun) or appear at the beginning of a
sentence.
Additionally, the formal "you" (*Sie*) and its possessive forms (*Ihr*) are
always capitalized in correspondence and formal writing.
### Typesetting
#### Punctuations
German punctuation rules differ significantly from English in several areas:
* **Quotation Marks**:
* The standard German style ("Gänsefüßchen") uses a low opening mark and a
high closing mark: `„` (U+201E) and `“` (U+201C). Example: „Zitat“.
* An alternative style (often in books) uses guillemets pointing **inwards**:
`»` (U+00BB) and `«` (U+00AB). Example: »Zitat«. (Contrast with French
`« Zitat »`).
* **Apostrophe**:
* It is generally **not** used for the genitive 's' (e.g., "Deutschland**s**
Hauptstadt", not "Deutschland's").
* It is used to indicate omitted letters (e.g., "Wie geht’s?").
* **Comma**:
* Commas are mandatory for separating dependent clauses (*Nebensätze*) from
main clauses.
* **Numbers**:
* **Decimal separator**: German uses a comma (e.g., `12,34`).
* **Thousand separator**: German uses a dot or space (e.g., `1.234` or
`1 234`).
## Translations
YAMLResume adopts the following translations for various options and terms used
in German resumes.
### Education Degrees
| English | German |
| ------------- | ---------------------- |
| Middle School | Mittlere Reife |
| High School | Abitur |
| Diploma | Diplom |
| Associate | Fachhochschulabschluss |
| Bachelor | Bachelor |
| Master | Master |
| Doctor | Doktor |
| Afrikaans | Afrikaans |
### Languages
| English | German |
| ----------- | ----------------- |
| Afrikaans | Afrikaans |
| Albanian | Albanisch |
| Amharic | Amharisch |
| Arabic | Arabisch |
| Azerbaijani | Aserbaidschanisch |
| Belarusian | Belarussisch |
| Bengali | Bengalisch |
| Bhojpuri | Bhojpuri |
| Bulgarian | Bulgarisch |
| Burmese | Birmanisch |
| Cantonese | Kantonesisch |
| Catalan | Katalanisch |
| Chinese | Chinesisch |
| Croatian | Kroatisch |
| Czech | Tschechisch |
| Danish | Dänisch |
| Dutch | Niederländisch |
| English | Englisch |
| Estonian | Estnisch |
| Farsi | Farsi |
| Filipino | Philippinisch |
| Finnish | Finnisch |
| French | Französisch |
| German | Deutsch |
| Greek | Griechisch |
| Gujarati | Gujarati |
| Hausa | Hausa |
| Hebrew | Hebräisch |
| Hindi | Hindi |
| Hungarian | Ungarisch |
| Icelandic | Isländisch |
| Igbo | Igbo |
| Indonesian | Indonesisch |
| Irish | Irisch |
| Italian | Italienisch |
| Japanese | Japanisch |
| Javanese | Javanisch |
| Kazakh | Kasachisch |
| Khmer | Khmer |
| Korean | Koreanisch |
| Lahnda | Lahnda |
| Latvian | Lettisch |
| Lithuanian | Litauisch |
| Malay | Malaiisch |
| Mandarin | Mandarin |
| Marathi | Marathi |
| Nepali | Nepalesisch |
| Norwegian | Norwegisch |
| Oromo | Oromo |
| Pashto | Paschtu |
| Polish | Polnisch |
| Portuguese | Portugiesisch |
| Romanian | Rumänisch |
| Russian | Russisch |
| Serbian | Serbisch |
| Shona | Shona |
| Sinhala | Singhalesisch |
| Slovak | Slowakisch |
| Slovene | Slowenisch |
| Somali | Somalisch |
| Spanish | Spanisch |
| Sundanese | Sundanesisch |
| Swahili | Suaheli |
| Swedish | Schwedisch |
| Tagalog | Tagalog |
| Tamil | Tamil |
| Telugu | Telugu |
| Thai | Thailändisch |
| Turkish | Türkisch |
| Ukrainian | Ukrainisch |
| Urdu | Urdu |
| Uzbek | Usbekisch |
| Vietnamese | Vietnamesisch |
| Yoruba | Yoruba |
| Zulu | Zulu |
### Language Fluencies
| English | German |
| -------------------------------- | ------------------------------- |
| Elementary Proficiency | Grundkenntnisse |
| Limited Working Proficiency | Gute Kenntnisse |
| Minimum Professional Proficiency | Berufliche Grundkenntnisse |
| Full Professional Proficiency | Verhandlungssichere Kenntnisse |
| Native or Bilingual Proficiency | Muttersprache oder zweisprachig |
### Location (Countries and Regions)
| English | German |
| --------------------------------- | ----------------------------------------- |
| Afghanistan | Afghanistan |
| Aland Islands | Åland |
| Albania | Albanien |
| Algeria | Algerien |
| American Samoa | Amerikanisch-Samoa |
| Andorra | Andorra |
| Angola | Angola |
| Anguilla | Anguilla |
| Antarctica | Antarktis |
| Antigua And Barbuda | Antigua und Barbuda |
| Argentina | Argentinien |
| Armenia | Armenien |
| Aruba | Aruba |
| Australia | Australien |
| Austria | Österreich |
| Azerbaijan | Aserbaidschan |
| Bahrain | Bahrain |
| Bangladesh | Bangladesch |
| Barbados | Barbados |
| Belarus | Belarus |
| Belgium | Belgien |
| Belize | Belize |
| Benin | Benin |
| Bermuda | Bermuda |
| Bhutan | Bhutan |
| Bolivia | Bolivien |
| Bonaire, Sint Eustatius and Saba | Bonaire, Sint Eustatius und Saba |
| Bosnia and Herzegovina | Bosnien und Herzegowina |
| Botswana | Botswana |
| Bouvet Island | Bouvetinsel |
| Brazil | Brasilien |
| British Indian Ocean Territory | Britisches Territorium im Indischen Ozean |
| Brunei | Brunei |
| Bulgaria | Bulgarien |
| Burkina Faso | Burkina Faso |
| Burundi | Burundi |
| Cambodia | Kambodscha |
| Cameroon | Kamerun |
| Canada | Kanada |
| Cape Verde | Kap Verde |
| Cayman Islands | Kaimaninseln |
| Central African Republic | Zentralafrikanische Republik |
| Chad | Tschad |
| Chile | Chile |
| China | China |
| Christmas Island | Weihnachtsinsel |
| Cocos (Keeling) Islands | Kokosinseln |
| Colombia | Kolumbien |
| Comoros | Komoren |
| Congo | Kongo |
| Cook Islands | Cookinseln |
| Costa Rica | Costa Rica |
| Croatia | Kroatien |
| Cuba | Kuba |
| Curaçao | Curaçao |
| Cyprus | Zypern |
| Czech Republic | Tschechien |
| Democratic Republic of the Congo | Demokratische Republik Kongo |
| Denmark | Dänemark |
| Djibouti | Dschibuti |
| Dominica | Dominica |
| Dominican Republic | Dominikanische Republik |
| East Timor | Osttimor |
| Ecuador | Ecuador |
| Egypt | Ägypten |
| El Salvador | El Salvador |
| Equatorial Guinea | Äquatorialguinea |
| Eritrea | Eritrea |
| Estonia | Estland |
| Ethiopia | Äthiopien |
| Falkland Islands | Falklandinseln |
| Faroe Islands | Färöer |
| Fiji Islands | Fidschi |
| Finland | Finnland |
| France | Frankreich |
| French Guiana | Französisch-Guayana |
| French Polynesia | Französisch-Polynesien |
| French Southern Territories | Französische Süd- und Antarktisgebiete |
| Gabon | Gabun |
| Gambia The | Gambia |
| Georgia | Georgien |
| Germany | Deutschland |
| Ghana | Ghana |
| Gibraltar | Gibraltar |
| Greece | Griechenland |
| Greenland | Grönland |
| Grenada | Grenada |
| Guadeloupe | Guadeloupe |
| Guam | Guam |
| Guatemala | Guatemala |
| Guernsey and Alderney | Guernsey und Alderney |
| Guinea | Guinea |
| Guinea-Bissau | Guinea-Bissau |
| Guyana | Guyana |
| Haiti | Haiti |
| Heard Island and McDonald Islands | Heard und McDonaldinseln |
| Honduras | Honduras |
| Hong Kong | Hongkong |
| Hungary | Ungarn |
| Iceland | Island |
| India | Indien |
| Indonesia | Indonesien |
| Iran | Iran |
| Iraq | Irak |
| Ireland | Irland |
| Israel | Israel |
| Italy | Italien |
| Jamaica | Jamaika |
| Japan | Japan |
| Jersey | Jersey |
| Jordan | Jordanien |
| Kazakhstan | Kasachstan |
| Kenya | Kenia |
| Kiribati | Kiribati |
| Kosovo | Kosovo |
| Kuwait | Kuwait |
| Kyrgyzstan | Kirgisistan |
| Laos | Laos |
| Latvia | Lettland |
| Lebanon | Libanon |
| Lesotho | Lesotho |
| Liberia | Liberia |
| Libya | Libyen |
| Liechtenstein | Liechtenstein |
| Lithuania | Litauen |
| Luxembourg | Luxemburg |
| Macau | Macau |
| Madagascar | Madagaskar |
| Malawi | Malawi |
| Malaysia | Malaysia |
| Maldives | Malediven |
| Mali | Mali |
| Malta | Malta |
| Man (Isle of) | Isle of Man |
| Marshall Islands | Marshallinseln |
| Martinique | Martinique |
| Mauritania | Mauretanien |
| Mauritius | Mauritius |
| Mayotte | Mayotte |
| Mexico | Mexiko |
| Micronesia | Mikronesien |
| Moldova | Moldawien |
| Monaco | Monaco |
| Mongolia | Mongolei |
| Montenegro | Montenegro |
| Montserrat | Montserrat |
| Morocco | Marokko |
| Mozambique | Mosambik |
| Myanmar | Myanmar |
| Namibia | Namibia |
| Nauru | Nauru |
| Nepal | Nepal |
| Netherlands | Niederlande |
| New Caledonia | Neukaledonien |
| New Zealand | Neuseeland |
| Nicaragua | Nicaragua |
| Niger | Niger |
| Nigeria | Nigeria |
| Niue | Niue |
| Norfolk Island | Norfolkinsel |
| North Korea | Nordkorea |
| North Macedonia | Nordmazedonien |
| Northern Mariana Islands | Nördliche Marianen |
| Norway | Norwegen |
| Oman | Oman |
| Pakistan | Pakistan |
| Palau | Palau |
| Palestinian Territory Occupied | Palästinensische Gebiete |
| Panama | Panama |
| Papua new Guinea | Papua-Neuguinea |
| Paraguay | Paraguay |
| Peru | Peru |
| Philippines | Philippinen |
| Pitcairn Island | Pitcairninseln |
| Poland | Polen |
| Portugal | Portugal |
| Puerto Rico | Puerto Rico |
| Qatar | Katar |
| Reunion | Réunion |
| Romania | Rumänien |
| Russia | Russland |
| Rwanda | Ruanda |
| Saint Helena | St. Helena |
| Saint Kitts And Nevis | St. Kitts und Nevis |
| Saint Lucia | St. Lucia |
| Saint Pierre and Miquelon | Saint-Pierre und Miquelon |
| Saint Vincent And The Grenadines | St. Vincent und die Grenadinen |
| Saint-Barthelemy | Saint-Barthélemy |
| Saint-Martin (French part) | Saint-Martin (französischer Teil) |
| Samoa | Samoa |
| San Marino | San Marino |
| Sao Tome and Principe | São Tomé und Príncipe |
| Saudi Arabia | Saudi-Arabien |
| Senegal | Senegal |
| Serbia | Serbien |
| Seychelles | Seychellen |
| Sierra Leone | Sierra Leone |
| Singapore | Singapur |
| Sint Maarten (Dutch part) | Sint Maarten (niederländischer Teil) |
| Slovakia | Slowakei |
| Slovenia | Slowenien |
| Solomon Islands | Salomonen |
| Somalia | Somalia |
| South Africa | Südafrika |
| South Georgia | Südgeorgien |
| South Korea | Südkorea |
| South Sudan | Südsudan |
| Spain | Spanien |
| Sri Lanka | Sri Lanka |
| Sudan | Sudan |
| Suriname | Suriname |
| Svalbard And Jan Mayen Islands | Spitzbergen und Jan Mayen |
| Swaziland | Eswatini |
| Sweden | Schweden |
| Switzerland | Schweiz |
| Syria | Syrien |
| Taiwan | Taiwan |
| Tajikistan | Tadschikistan |
| Tanzania | Tansania |
| Thailand | Thailand |
| The Bahamas | Bahamas |
| Togo | Togo |
| Tokelau | Tokelau |
| Tonga | Tonga |
| Trinidad And Tobago | Trinidad und Tobago |
| Tunisia | Tunesien |
| Türkiye | Türkei |
| Turkmenistan | Turkmenistan |
| Turks And Caicos Islands | Turks- und Caicosinseln |
| Tuvalu | Tuvalu |
| Uganda | Uganda |
| Ukraine | Ukraine |
| United Arab Emirates | Vereinigte Arabische Emirate |
| United Kingdom | Vereinigtes Königreich |
| United States | Vereinigte Staaten |
| Uruguay | Uruguay |
| Uzbekistan | Usbekistan |
| Vanuatu | Vanuatu |
| Vatican City State (Holy See) | Vatikanstadt (Heiliger Stuhl) |
| Venezuela | Venezuela |
| Vietnam | Vietnam |
| Virgin Islands (British) | Britische Jungferninseln |
| Virgin Islands (US) | Amerikanische Jungferninseln |
| Wallis And Futuna Islands | Wallis und Futuna |
| Western Sahara | Westsahara |
| Yemen | Jemen |
| Zambia | Sambia |
| Zimbabwe | Simbabwe |
### Section Names
| English | German |
| ------------ | ------------------------- |
| awards | Auszeichnungen |
| basics | Basisinformationen |
| certificates | Zertifikate |
| education | Ausbildung |
| interests | Interessen |
| languages | Sprachen |
| location | Ort |
| profiles | Profile |
| projects | Projekte |
| publications | Veröffentlichungen |
| references | Referenzen |
| skills | Fähigkeiten |
| volunteer | Ehrenamtliche Tätigkeiten |
| work | Berufserfahrung |
### Skill Levels
| English | German |
| ------------ | --------------- |
| Novice | Einsteiger |
| Beginner | Anfänger |
| Intermediate | Fortgeschritten |
| Advanced | Erfahren |
| Expert | Experte |
| Master | Spezialist |
### Terms
| Term | German |
| -------- | --------------- |
| courses | Kurse |
| keywords | Schlüsselwörter |
| score | Punkte |
# Locale
URL: (/en/docs/locale)
Each resume comes with a specific language. The good news is that YAMLResume is
designed to support multiple languages out of the box.
Technically, there are two categories of things to do when supporting multi
languages:
* **[Internationalization](https://phrase.com/blog/posts/internationalization-vs-localization/#what-is-internationalization-i18n)**:
often abbreviated as "i18n" (where the number 18 represents the 18 characters
between "i" and "n"), is basically a set of practices that allow a product
support multi languages, i18n main consists of translating the product into
mutli languages and dynamically switching the language according to the user's
choice
* **[Localization](https://phrase.com/blog/posts/internationalization-vs-localization/#what-is-localization-l10n)**:
often abbreviated as "l10n" (the number 10 represents the characters between
"l" and "n"), it goes beyond mere translation and instead adapts the product
to the cultural specifics of the target language.
In practice, i18n always comes first, l10n comes after.
For all supported languages, we have the following concerns from a design and
implementation perspective:
* **[Linguistics](https://en.wikipedia.org/wiki/Linguistics)**: the theorectical
side of a language, including but not limited to the language's character set,
syntax and grammar, history, etc.
* **Idioms**: common conventions and idioms that are generally followed by a
language.
* **[Typesetting](https://en.wikipedia.org/wiki/Typesetting)**: best typesetting
practices often followed by a language, such as italics, text figures, font
style, kerning, ligature, etc.
* **Translations**: mere translations for a fixed set of terms and
options used by resumes generated by YAMLResume.
## Supported Languages
YAMLResume needs to be told which language the resume is written in, to do
that, you need to set a top-level `locale` key in your resume:
```yml lineNumbers
---
content:
# ...
locale: # [!code highlight]
language: en # [!code highlight]
layouts:
- engine: markdown
# ...
```
You can use `yamlresume languages list` to list all supported languages. At the
time of writing, YAMLResume supports the following languages:
```console
$ yamlresume languages list
| locale.language | Language Name | 1:03:48 PM
| --------------- | ------------------------------- |
| en | English |
| zh-hans | Simplified Chinese |
| zh-hant-hk | Traditional Chinese (Hong Kong) |
| zh-hant-tw | Traditional Chinese (Taiwan) |
| es | Spanish |
| fr | French |
| no | Norwegian |
| nl | Dutch |
| ja | Japanese |
| id | Indonesian |
| de | German |
```
Check the following pages for more details about each language:
## Glossaries
We have used the following glossaries throughout this section:
* **Latin script languages**: languages that use
[Latin script](https://en.wikipedia.org/wiki/Latin_script) as the [writing
systems](https://en.wikipedia.org/wiki/Writing_system). Most [germanic
languages](https://en.wikipedia.org/wiki/Germanic_languages), [romance
languages](https://en.wikipedia.org/wiki/Romance_languages) and many other
languages like
[https://en.wikipedia.org/wiki/Indonesian\_language](https://en.wikipedia.org/wiki/Indonesian_language)
use Latin script as the primary writing system.
* **[CJK](https://en.wikipedia.org/wiki/CJK_characters)**: Chinese, Japanese and
Korean languages.
* **[Character Set](https://www.creatopy.com/blog/what-is-a-character-set/)**:
the complete collection of characters, symbols, glyphs, and punctuation marks
available within a specific typeface or font.
* **[Glyph](https://en.wikipedia.org/wiki/Glyph)**: the specific shape, design,
or representation of a character in typography.
* **[Hyphenation](https://en.wikipedia.org/wiki/Syllabification)**, the practice
of breaking words at the end of lines to improve the overall appearance and
readability of text.
* **[Justification](https://en.wikipedia.org/wiki/Typographic_alignment#Justified)**:
the alignment of text within a block so that it is flush with both the left
and right margins, generally achieved by adjusting the spacing between words
and letters, creating a uniform appearance across each line of text.
* **[Kerning](https://en.wikipedia.org/wiki/Kerning)**: the process of adjusting
the spacing between characters in a proportional font, usually to achieve a
visually pleasing result.
* **[Ligature](https://en.wikipedia.org/wiki/Ligature_\(writing\))**: a glyph
that joins two or more letters together in order to enhance the visual appeal
of text and get better readability.
# Indonesian
URL: (/en/docs/locale/indonesian)
Indonesian (Bahasa Indonesia) is the
[official language](https://en.wikipedia.org/wiki/Indonesian_language) of
Indonesia, the world's largest archipelagic nation. It serves as the lingua
franca among Indonesia's diverse population of over 270 million people speaking
hundreds of native languages.
## Linguistics
### Character Set
Indonesian uses the [Latin alphabet](https://en.wikipedia.org/wiki/Latin_alphabet),
the same script as English. It follows the standard 26-letter alphabet without
additional characters.
| Feature | English Character Set | Indonesian Character Set |
| ---------------------- | ---------------------------- | ---------------------------- |
| **Alphabet** | 26 letters (`a-z`) | 26 letters (`a-z`) |
| **Diacritics** | None | None |
| **Special Characters** | Limited to basic Latin chars | Limited to basic Latin chars |
### Idioms
#### Date
Indonesian dates follow the day-month-year format. Month names are not
capitalized.
| English | Indonesian |
| --------- | ---------- |
| January | Januari |
| February | Pebruari |
| March | Maret |
| April | April |
| May | Mei |
| June | Juni |
| July | Juli |
| August | Agustus |
| September | September |
| October | Oktober |
| November | Nopember |
| December | Desember |
#### Location
Indonesian addresses follow a specific format:
1. **Street and House Number**: The street name comes first, followed by the
house number (e.g., "Jalan Sudirman No. 123").
2. **Neighborhood (Kelurahan/Desa)**: The smallest administrative area.
3. **Sub-district (Kecamatan)**: The next administrative level.
4. **City (Kota/Kabupaten)**: The city or regency.
5. **Province (Provinsi)**: The largest administrative division.
6. **Postal Code**: The 5-digit postal code comes at the end.
#### Capitalization
Indonesian follows similar capitalization rules to English:
* Capitalize the first word of a sentence.
* Capitalize proper nouns (names of people, places, organizations).
* Days and months are not capitalized.
* Language names and nationalities are not capitalized.
### Typesetting
#### Punctuations
Indonesian punctuation rules are very similar to English:
* **Quotation marks**: Uses double quotes `"..."` (American style).
* **Apostrophe**: Used similarly to English.
* **Comma**: Follows English rules.
* **Numbers**:
* **Decimal separator**: Uses a comma (e.g., `12,34`).
* **Thousand separator**: Uses a dot (e.g., `1.234`).
## Translations
YAMLResume adopts the following translations for various options and terms used
in Indonesian resumes.
### Education Degrees
| English | Indonesian |
| ------------- | ---------- |
| Middle School | SMP |
| High School | SMA |
| Diploma | Diploma |
| Associate | Diploma |
| Bachelor | Sarjana |
| Master | Magister |
| Doctor | Doktor |
### Languages
| English | Indonesian |
| ----------- | ---------- |
| Afrikaans | Afrikaans |
| Albanian | Albania |
| Amharic | Amhara |
| Arabic | Arab |
| Azerbaijani | Azerbaijan |
| Belarusian | Belarus |
| Bengali | Benggali |
| Bhojpuri | Bhojpuri |
| Bulgarian | Bulgaria |
| Burmese | Burma |
| Cantonese | Kanton |
| Catalan | Katalan |
| Chinese | Tionghoa |
| Croatian | Kroasia |
| Czech | Ceko |
| Danish | Denmark |
| Dutch | Belanda |
| English | Inggris |
| Estonian | Estonia |
| Farsi | Persia |
| Filipino | Filipina |
| Finnish | Finlandia |
| French | Prancis |
| German | Jerman |
| Greek | Yunani |
| Gujarati | Gujarat |
| Hausa | Hausa |
| Hebrew | Ibrani |
| Hindi | Hindi |
| Hungarian | Hungaria |
| Icelandic | Islandia |
| Igbo | Igbo |
| Indonesian | Indonesia |
| Irish | Irlandia |
| Italian | Italia |
| Japanese | Jepang |
| Javanese | Jawa |
| Kazakh | Kazakhstan |
| Khmer | Khmer |
| Korean | Korea |
| Lahnda | Lahnda |
| Latvian | Latvia |
| Lithuanian | Lituania |
| Malay | Melayu |
| Mandarin | Mandarin |
| Marathi | Marathi |
| Nepali | Nepal |
| Norwegian | Norwegia |
| Oromo | Oromo |
| Pashto | Pashto |
| Polish | Polonia |
| Portuguese | Portugis |
| Romanian | Rumania |
| Russian | Rusia |
| Serbian | Serbia |
| Shona | Shona |
| Sinhala | Sinhala |
| Slovak | Slovakia |
| Slovene | Slovenia |
| Somali | Somali |
| Spanish | Spanyol |
| Sundanese | Sunda |
| Swahili | Swahili |
| Swedish | Swedia |
| Tagalog | Tagalog |
| Tamil | Tamil |
| Telugu | Telugu |
| Thai | Thailand |
| Turkish | Turki |
| Ukrainian | Ukraina |
| Urdu | Urdu |
| Uzbek | Uzbek |
| Vietnamese | Vietnam |
| Yoruba | Yoruba |
| Zulu | Zulu |
### Language Fluencies
| English | Indonesian |
| -------------------------------- | --------------------------- |
| Elementary Proficiency | Tingkat Dasar |
| Limited Working Proficiency | Tingkat Kerja Terbatas |
| Minimum Professional Proficiency | Tingkat Profesional Minimum |
| Full Professional Proficiency | Tingkat Profesional Penuh |
| Native or Bilingual Proficiency | Bahasa Ibu / Bilingual |
### Location (Countries and Regions)
| English | Indonesian |
| --------------------------------- | ---------------------------------- |
| Afghanistan | Afghanistan |
| Aland Islands | Kepulauan Aland |
| Albania | Albania |
| Algeria | Aljazair |
| American Samoa | Samoa Amerika |
| Andorra | Andorra |
| Angola | Angola |
| Anguilla | Anguilla |
| Antarctica | Antartika |
| Antigua And Barbuda | Antigua dan Barbuda |
| Argentina | Argentina |
| Armenia | Armenia |
| Aruba | Aruba |
| Australia | Australia |
| Austria | Austria |
| Azerbaijan | Azerbaijan |
| Bahrain | Bahrain |
| Bangladesh | Bangladesh |
| Barbados | Barbados |
| Belarus | Belarus |
| Belgium | Belgia |
| Belize | Belize |
| Benin | Benin |
| Bermuda | Bermuda |
| Bhutan | Bhutan |
| Bolivia | Bolivia |
| Bonaire, Sint Eustatius and Saba | Bonaire, Sint Eustatius dan Saba |
| Bosnia and Herzegovina | Bosnia dan Herzegovina |
| Botswana | Botswana |
| Bouvet Island | Pulau Bouvet |
| Brazil | Brasil |
| British Indian Ocean Territory | Wilayah Samudra Hindia Britania |
| Brunei | Brunei |
| Bulgaria | Bulgaria |
| Burkina Faso | Burkina Faso |
| Burundi | Burundi |
| Cambodia | Kamboja |
| Cameroon | Kamerun |
| Canada | Kanada |
| Cape Verde | Tanjung Verde |
| Cayman Islands | Kepulauan Cayman |
| Central African Republic | Republik Afrika Tengah |
| Chad | Chad |
| Chile | Chili |
| China | Tiongkok |
| Christmas Island | Pulau Natal |
| Cocos (Keeling) Islands | Kepulauan Cocos (Keeling) |
| Colombia | Kolombia |
| Comoros | Komoro |
| Congo | Republik Kongo |
| Cook Islands | Kepulauan Cook |
| Costa Rica | Kosta Rika |
| Croatia | Kroasia |
| Cuba | Kuba |
| Curaçao | Curaçao |
| Cyprus | Siprus |
| Czech Republic | Republik Ceko |
| Democratic Republic of the Congo | Republik Demokratik Kongo |
| Denmark | Denmark |
| Djibouti | Djibouti |
| Dominica | Dominika |
| Dominican Republic | Republik Dominika |
| East Timor | Timor Leste |
| Ecuador | Ekuador |
| Egypt | Mesir |
| El Salvador | El Salvador |
| Equatorial Guinea | Guinea Khatulistiwa |
| Eritrea | Eritrea |
| Estonia | Estonia |
| Ethiopia | Etiopia |
| Falkland Islands | Kepulauan Falkland |
| Faroe Islands | Kepulauan Faroe |
| Fiji Islands | Fiji |
| Finland | Finlandia |
| France | Prancis |
| French Guiana | Guyana Prancis |
| French Polynesia | Polinesia Prancis |
| French Southern Territories | Wilayah Selatan Prancis |
| Gabon | Gabon |
| Gambia The | Gambia |
| Georgia | Georgia |
| Germany | Jerman |
| Ghana | Ghana |
| Gibraltar | Gibraltar |
| Greece | Yunani |
| Greenland | Greenland |
| Grenada | Grenada |
| Guadeloupe | Guadeloupe |
| Guam | Guam |
| Guatemala | Guatemala |
| Guernsey and Alderney | Guernsey dan Alderney |
| Guinea | Guinea |
| Guinea-Bissau | Guinea-Bissau |
| Guyana | Guyana |
| Haiti | Haiti |
| Heard Island and McDonald Islands | Pulau Heard dan Kepulauan McDonald |
| Honduras | Honduras |
| Hong Kong | Hong Kong |
| Hungary | Hungaria |
| Iceland | Islandia |
| India | India |
| Indonesia | Indonesia |
| Iran | Iran |
| Iraq | Irak |
| Ireland | Irlandia |
| Israel | Israel |
| Italy | Italia |
| Jamaica | Jamaika |
| Japan | Jepang |
| Jersey | Jersey |
| Jordan | Yordania |
| Kazakhstan | Kazakhstan |
| Kenya | Kenya |
| Kiribati | Kiribati |
| Kosovo | Kosovo |
| Kuwait | Kuwait |
| Kyrgyzstan | Kirgistan |
| Laos | Laos |
| Latvia | Latvia |
| Lebanon | Lebanon |
| Lesotho | Lesotho |
| Liberia | Liberia |
| Libya | Libya |
| Liechtenstein | Liechtenstein |
| Lithuania | Lituania |
| Luxembourg | Luksemburg |
| Macau | Makau |
| Madagascar | Madagaskar |
| Malawi | Malawi |
| Malaysia | Malaysia |
| Maldives | Maladewa |
| Mali | Mali |
| Malta | Malta |
| Man (Isle of) | Pulau Man |
| Marshall Islands | Kepulauan Marshall |
| Martinique | Martinik |
| Mauritania | Mauritania |
| Mauritius | Mauritius |
| Mayotte | Mayotte |
| Mexico | Meksiko |
| Micronesia | Mikronesia |
| Moldova | Moldova |
| Monaco | Monako |
| Mongolia | Mongolia |
| Montenegro | Montenegro |
| Montserrat | Montserrat |
| Morocco | Maroko |
| Mozambique | Mozambik |
| Myanmar | Myanmar |
| Namibia | Namibia |
| Nauru | Nauru |
| Nepal | Nepal |
| Netherlands | Belanda |
| New Caledonia | Kaledonia Baru |
| New Zealand | Selandia Baru |
| Nicaragua | Nikaragua |
| Niger | Niger |
| Nigeria | Nigeria |
| Niue | Niue |
| Norfolk Island | Pulau Norfolk |
| North Korea | Korea Utara |
| North Macedonia | Makedonia Utara |
| Northern Mariana Islands | Kepulauan Mariana Utara |
| Norway | Norwegia |
| Oman | Oman |
| Pakistan | Pakistan |
| Palau | Palau |
| Palestinian Territory Occupied | Wilayah Palestina |
| Panama | Panama |
| Papua new Guinea | Papua Nugini |
| Paraguay | Paraguay |
| Peru | Peru |
| Philippines | Filipina |
| Pitcairn Island | Kepulauan Pitcairn |
| Poland | Polonia |
| Portugal | Portugal |
| Puerto Rico | Puerto Riko |
| Qatar | Qatar |
| Reunion | Réunion |
| Romania | Rumania |
| Russia | Rusia |
| Rwanda | Rwanda |
| Saint Helena | Saint Helena |
| Saint Kitts And Nevis | Saint Kitts dan Nevis |
| Saint Lucia | Saint Lucia |
| Saint Pierre and Miquelon | Saint Pierre dan Miquelon |
| Saint Vincent And The Grenadines | Saint Vincent dan Grenadine |
| Saint-Barthelemy | Saint-Barthélemy |
| Saint-Martin (French part) | Saint-Martin (Prancis) |
| Samoa | Samoa |
| San Marino | San Marino |
| Sao Tome and Principe | Sao Tome dan Principe |
| Saudi Arabia | Arab Saudi |
| Senegal | Senegal |
| Serbia | Serbia |
| Seychelles | Seychelles |
| Sierra Leone | Sierra Leone |
| Singapore | Singapura |
| Sint Maarten (Dutch part) | Sint Maarten (Belanda) |
| Slovakia | Slovakia |
| Slovenia | Slovenia |
| Solomon Islands | Kepulauan Solomon |
| Somalia | Somalia |
| South Africa | Afrika Selatan |
| South Georgia | Georgia Selatan |
| South Korea | Korea Selatan |
| South Sudan | Sudan Selatan |
| Spain | Spanyol |
| Sri Lanka | Sri Lanka |
| Sudan | Sudan |
| Suriname | Suriname |
| Svalbard And Jan Mayen Islands | Svalbard dan Jan Mayen |
| Swaziland | Eswatini |
| Sweden | Swedia |
| Switzerland | Swiss |
| Syria | Suriah |
| Taiwan | Taiwan |
| Tajikistan | Tajikistan |
| Tanzania | Tanzania |
| Thailand | Thailand |
| The Bahamas | Bahama |
| Togo | Togo |
| Tokelau | Tokelau |
| Tonga | Tonga |
| Trinidad And Tobago | Trinidad dan Tobago |
| Tunisia | Tunisia |
| Türkiye | Turki |
| Turkmenistan | Turkmenistan |
| Turks And Caicos Islands | Kepulauan Turks dan Caicos |
| Tuvalu | Tuvalu |
| Uganda | Uganda |
| Ukraine | Ukraina |
| United Arab Emirates | Uni Emirat Arab |
| United Kingdom | Britania Raya |
| United States | Amerika Serikat |
| Uruguay | Uruguay |
| Uzbekistan | Uzbekistan |
| Vanuatu | Vanuatu |
| Vatican City State (Holy See) | Vatikan |
| Venezuela | Venezuela |
| Vietnam | Vietnam |
| Virgin Islands (British) | Kepulauan Virgin Britania |
| Virgin Islands (US) | Kepulauan Virgin Amerika Serikat |
| Wallis And Futuna Islands | Wallis dan Futuna |
| Western Sahara | Sahara Barat |
| Yemen | Yaman |
| Zambia | Zambia |
| Zimbabwe | Zimbabwe |
### Section Names
| English | Indonesian |
| ------------ | ----------------- |
| awards | Penghargaan |
| basics | Informasi Dasar |
| certificates | Sertifikat |
| education | Pendidikan |
| interests | Minat |
| languages | Bahasa |
| location | Lokasi |
| profiles | Profil |
| projects | Proyek |
| publications | Publikasi |
| references | Referensi |
| skills | Keahlian |
| volunteer | Kegiatan Sukarela |
| work | Pengalaman Kerja |
### Skill Levels
| English | Indonesian |
| ------------ | ---------- |
| Novice | Pemula |
| Beginner | Dasar |
| Intermediate | Menengah |
| Advanced | Mahir |
| Expert | Ahli |
| Master | Master |
### Terms
| Term | Indonesian |
| -------- | ----------- |
| courses | Mata Kuliah |
| keywords | Kata Kunci |
| score | Nilai |
# Japanese
URL: (/en/docs/locale/japanese)
Japanese (日本語) is an East Asian language spoken principally in Japan. It is a
member of the Japonic language family.
## Linguistics
### Character Set
Japanese writing system uses a combination of three scripts: Kanji (adopted
Chinese characters), Hiragana, and Katakana. Latin script (Romaji) is also used
for certain purposes.
### CJK Support
YAMLResume automatically detects Japanese as a CJK language and applies specific
layout adjustments, such as using "Lining" style numbers instead of "OldStyle"
to better match the CJK glyphs.
## Idioms
### Date
Japanese dates are formatted with Year, Month, and Day order, using specific
counters.
| English | Japanese |
| --------- | -------- |
| January | 1月 |
| February | 2月 |
| March | 3月 |
| April | 4月 |
| May | 5月 |
| June | 6月 |
| July | 7月 |
| August | 8月 |
| September | 9月 |
| October | 10月 |
| November | 11月 |
| December | 12月 |
Date ranges use the full-width tilde (U+FF5E) as a separator (e.g., 2016年10月~
2018年1月).
### Location
In the generated resume, Japanese addresses generally follow the order of
Country, Region (Prefecture), City, Address, and finally Postal Code.
Note: While standard Japanese addresses usually start with the Postal Code (〒),
YAMLResume currently appends it at the end for consistency with the generated
structure variables.
## Typesetting
### Punctuations
Japanese uses full-width punctuation marks.
* **Comma**: `、` (Ideographic Comma, U+3001) is used instead of the Latin comma
`,`.
* **Colon**: `:` (Fullwidth Colon, U+FF1A) is used instead of the Latin colon
`:`.
* **Separator**: `、` is also used as a list separator.
## Translations
YAMLResume adopts the following translations for various options and terms used
in Japanese resumes.
### Education Degrees
| English | Japanese |
| ------------- | ----------- |
| Middle School | 中学校 |
| High School | 高等学校 |
| Diploma | 短期大学・高等専門学校 |
| Associate | 準学士 |
| Bachelor | 学士 |
| Master | 修士 |
| Doctor | 博士 |
### Languages
| English | Japanese |
| ----------- | --------- |
| Afrikaans | アフリカーンス語 |
| Albanian | アルバニア語 |
| Amharic | アムハラ語 |
| Arabic | アラビア語 |
| Azerbaijani | アゼルバイジャン語 |
| Belarusian | ベラルーシ語 |
| Bengali | ベンガル語 |
| Bhojpuri | ボージュプリー語 |
| Bulgarian | ブルガリア語 |
| Burmese | ビルマ語 |
| Cantonese | 広東語 |
| Catalan | カタロニア語 |
| Chinese | 中国語 |
| Croatian | クロアチア語 |
| Czech | チェコ語 |
| Danish | デンマーク語 |
| Dutch | オランダ語 |
| English | 英語 |
| Estonian | エストニア語 |
| Farsi | ペルシャ語 |
| Filipino | フィリピン語 |
| Finnish | フィンランド語 |
| French | フランス語 |
| German | ドイツ語 |
| Greek | ギリシャ語 |
| Gujarati | グジャラート語 |
| Hausa | ハウサ語 |
| Hebrew | ヘブライ語 |
| Hindi | ヒンディー語 |
| Hungarian | ハンガリー語 |
| Icelandic | アイスランド語 |
| Igbo | イボ語 |
| Indonesian | インドネシア語 |
| Irish | アイルランド語 |
| Italian | イタリア語 |
| Japanese | 日本語 |
| Javanese | ジャワ語 |
| Kazakh | カザフ語 |
| Khmer | クメール語 |
| Korean | 韓国語 |
| Lahnda | ラーンダー語 |
| Latvian | ラトビア語 |
| Lithuanian | リトアニア語 |
| Malay | マレー語 |
| Mandarin | 標準中国語 |
| Marathi | マラーティー語 |
| Nepali | ネパール語 |
| Norwegian | ノルウェー語 |
| Oromo | オロモ語 |
| Pashto | パシュトー語 |
| Polish | ポーランド語 |
| Portuguese | ポルトガル語 |
| Romanian | ルーマニア語 |
| Russian | ロシア語 |
| Serbian | セルビア語 |
| Shona | ショナ語 |
| Sinhala | シンハラ語 |
| Slovak | スロバキア語 |
| Slovene | スロベニア語 |
| Somali | ソマリ語 |
| Spanish | スペイン語 |
| Sundanese | スンダ語 |
| Swahili | スワヒリ語 |
| Swedish | スウェーデン語 |
| Tagalog | タガログ語 |
| Tamil | タミル語 |
| Telugu | テルグ語 |
| Thai | タイ語 |
| Turkish | トルコ語 |
| Ukrainian | ウクライナ語 |
| Urdu | ウルドゥー語 |
| Uzbek | ウズベク語 |
| Vietnamese | ベトナム語 |
| Yoruba | ヨルバ語 |
| Zulu | ズールー語 |
### Language Fluencies
| English | Japanese |
| -------------------------------- | ------------ |
| Elementary Proficiency | 初級レベル |
| Limited Working Proficiency | 限定的な実務レベル |
| Minimum Professional Proficiency | 実務レベル |
| Full Professional Proficiency | 完全な実務レベル |
| Native or Bilingual Proficiency | ネイティブ・母国語レベル |
### Location (Countries and Regions)
| English | Japanese |
| ------------------------------------ | --------------------- |
| Afghanistan | アフガニスタン |
| Aland Islands | オーランド諸島 |
| Albania | アルバニア |
| Algeria | アルジェリア |
| American Samoa | 米領サモア |
| Andorra | アンドラ |
| Angola | アンゴラ |
| Anguilla | アンギラ |
| Antarctica | 南極 |
| Antigua And Barbuda | アンティグア・バーブーダ |
| Argentina | アルゼンチン |
| Armenia | アルメニア |
| Aruba | アルバ |
| Australia | オーストラリア |
| Austria | オーストリア |
| Azerbaijan | アゼルバイジャン |
| Bahrain | バーレーン |
| Bangladesh | バングラデシュ |
| Barbados | バルバドス |
| Belarus | ベラルーシ |
| Belgium | ベルギー |
| Belize | ベリーズ |
| Benin | ベナン |
| Bermuda | バミューダ |
| Bhutan | ブータン |
| Bolivia | ボリビア |
| Bosnia and Herzegovina | ボスニア・ヘルツェゴビナ |
| Botswana | ボツワナ |
| Bouvet Island | ブーベ島 |
| Brazil | ブラジル |
| British Indian Ocean Territory | 英領インド洋地域 |
| Brunei | ブルネイ |
| Bulgaria | ブルガリア |
| Burkina Faso | ブルキナファソ |
| Burundi | ブルンジ |
| Cambodia | カンボジア |
| Cameroon | カメルーン |
| Canada | カナダ |
| Cape Verde | カーボベルデ |
| Cayman Islands | ケイマン諸島 |
| Central African Republic | 中央アフリカ共和国 |
| Chad | チャド |
| Chile | チリ |
| China | 中国 |
| Christmas Island | クリスマス島 |
| Cocos (Keeling) Islands | ココス諸島 |
| Colombia | コロンビア |
| Comoros | コモロ |
| Congo | コンゴ共和国 |
| Cook Islands | クック諸島 |
| Costa Rica | コスタリカ |
| Croatia | クロアチア |
| Cuba | キューバ |
| Curaçao | キュラソー |
| Cyprus | キプロス |
| Czech Republic | チェコ |
| Democratic Republic of the Congo | コンゴ民主共和国 |
| Denmark | デンマーク |
| Djibouti | ジブチ |
| Dominica | ドミニカ国 |
| Dominican Republic | ドミニカ共和国 |
| East Timor | 東ティモール |
| Ecuador | エクアドル |
| Egypt | エジプト |
| El Salvador | エルサルバドル |
| Equatorial Guinea | 赤道ギニア |
| Eritrea | エリトリア |
| Estonia | エストニア |
| Ethiopia | エチオピア |
| Falkland Islands | フォークランド諸島 |
| Faroe Islands | フェロー諸島 |
| Fiji Islands | フィジー |
| Finland | フィンランド |
| France | フランス |
| French Guiana | 仏領ギアナ |
| French Polynesia | 仏領ポリネシア |
| French Southern Territories | フランス領南方・南極地域 |
| Gabon | ガボン |
| Gambia The | ガンビア |
| Georgia | ジョージア |
| Germany | ドイツ |
| Ghana | ガーナ |
| Gibraltar | ジブラルタル |
| Greece | ギリシャ |
| Greenland | グリーンランド |
| Grenada | グレナダ |
| Guadeloupe | グアドループ |
| Guam | グアム |
| Guatemala | グアテマラ |
| Guernsey and Alderney | ガーンジー |
| Guinea | ギニア |
| Guinea-Bissau | ギニアビサウ |
| Guyana | ガイアナ |
| Haiti | ハイチ |
| Heard Island and McDonald Islands | ハード島とマクドナルド諸島 |
| Honduras | ホンジュラス |
| Hong Kong | 香港 |
| Hungary | ハンガリー |
| Iceland | アイスランド |
| India | インド |
| Indonesia | インドネシア |
| Iran | イラン |
| Iraq | イラク |
| Ireland | アイルランド |
| Israel | イスラエル |
| Italy | イタリア |
| Jamaica | ジャマイカ |
| Japan | 日本 |
| Jersey | ジャージー |
| Jordan | ヨルダン |
| Kazakhstan | カザフスタン |
| Kenya | ケニア |
| Kiribati | キリバス |
| Kosovo | コソボ |
| Kuwait | クウェート |
| Kyrgyzstan | キルギス |
| Laos | ラオス |
| Latvia | ラトビア |
| Lebanon | レバノン |
| Lesotho | レソト |
| Liberia | リベリア |
| Libya | リビア |
| Liechtenstein | リヒテンシュタイン |
| Lithuania | リトアニア |
| Luxembourg | ルクセンブルク |
| Macau | マカオ |
| Madagascar | マダガスカル |
| Malawi | マラウイ |
| Malaysia | マレーシア |
| Maldives | モルディブ |
| Mali | マリ |
| Malta | マルタ |
| Man (Isle of) | マン島 |
| Marshall Islands | マーシャル諸島 |
| Martinique | マルティニーク |
| Mauritania | モーリタニア |
| Mauritius | モーリシャス |
| Mayotte | マヨット |
| Mexico | メキシコ |
| Micronesia | ミクロネシア連邦 |
| Moldova | モルドバ |
| Monaco | モナコ |
| Mongolia | モンゴル |
| Montenegro | モンテネグロ |
| Montserrat | モントセラト |
| Morocco | モロッコ |
| Mozambique | モザンビーク |
| Myanmar | ミャンマー |
| Namibia | ナミビア |
| Nauru | ナウル |
| Nepal | ネパール |
| Netherlands | オランダ |
| New Caledonia | ニューカレドニア |
| New Zealand | ニュージーランド |
| Nicaragua | ニカラグア |
| Niger | ニジェール |
| Nigeria | ナイジェリア |
| Niue | ニウエ |
| Norfolk Island | ノーフォーク島 |
| North Korea | 北朝鮮 |
| North Macedonia | 北マケドニア |
| Northern Mariana Islands | 北マリアナ諸島 |
| Norway | ノルウェー |
| Oman | オマーン |
| Pakistan | パキスタン |
| Palau | パラオ |
| Palestinian Territory Occupied | パレスチナ |
| Panama | パナマ |
| Papua new Guinea | パプアニューギニア |
| Paraguay | パラグアイ |
| Peru | ペルー |
| Philippines | フィリピン |
| Pitcairn Island | ピトケアン諸島 |
| Poland | ポーランド |
| Portugal | ポルトガル |
| Puerto Rico | プエルトリコ |
| Qatar | カタール |
| Reunion | レユニオン |
| Romania | ルーマニア |
| Russia | ロシア |
| Rwanda | ルワンダ |
| Saint Helena | セントヘレナ |
| Saint Kitts And Nevis | セントクリストファー・ネイビス |
| Saint Lucia | セントルシア |
| Saint Pierre and Miquelon | サンピエール島・ミクロン島 |
| Saint Vincent And The Grenadines | セントビンセント・グレナディーン |
| Saint-Barthelemy | サン・バルテルミー |
| Saint-Martin (French part) | サン・マルタン |
| Samoa | サモア |
| San Marino | サンマリノ |
| Sao Tome and Principe | サントメ・プリンシペ |
| Saudi Arabia | サウジアラビア |
| Senegal | セネガル |
| Serbia | セルビア |
| Seychelles | セーシェル |
| Sierra Leone | シエラレオネ |
| Singapore | シンガポール |
| Sint Maarten (Dutch part) | シント・マールテン |
| Slovakia | スロバキア |
| Slovenia | スロベニア |
| Solomon Islands | ソロモン諸島 |
| Somalia | ソマリア |
| South Africa | 南アフリカ |
| South Georgia | サウスジョージア・サウスサンドウィッチ諸島 |
| South Korea | 韓国 |
| South Sudan | 南スーダン |
| Spain | スペイン |
| Sri Lanka | スリランカ |
| Sudan | スーダン |
| Suriname | スリナム |
| Svalbard And Jan Mayen Islands | スヴァールバル諸島およびヤンマイエン島 |
| Swaziland | エスワティニ |
| Sweden | スウェーデン |
| Switzerland | スイス |
| Syria | シリア |
| Taiwan | 台湾 |
| Tajikistan | タジキスタン |
| Tanzania | タンザニア |
| Thailand | タイ |
| The Bahamas | バハマ |
| Togo | トーゴ |
| Tokelau | トケラウ |
| Tonga | トンガ |
| Trinidad And Tobago | トリニダード・トバゴ |
| Tunisia | チュニジア |
| Turkey | トルコ |
| Turkmenistan | トルクメニスタン |
| Turks And Caicos Islands | タークス・カイコス諸島 |
| Tuvalu | ツバル |
| Uganda | ウガンダ |
| Ukraine | ウクライナ |
| United Arab Emirates | アラブ首長国連邦 |
| United Kingdom | イギリス |
| United States Minor Outlying Islands | 合衆国領有小離島 |
| United States | アメリカ合衆国 |
| Uruguay | ウルグアイ |
| Uzbekistan | ウズベキスタン |
| Vanuatu | バヌアツ |
| Vatican City State (Holy See) | バチカン市国 |
| Venezuela | ベネズエラ |
| Vietnam | ベトナム |
| Virgin Islands (British) | 英領ヴァージン諸島 |
| Virgin Islands (US) | 米領ヴァージン諸島 |
| Wallis And Futuna Islands | ウォリス・フツナ |
| Western Sahara | 西サハラ |
| Yemen | イエメン |
| Zambia | ザンビア |
| Zimbabwe | ジンバブエ |
### Section Names
| English | Japanese |
| ------------ | -------- |
| awards | 受賞・表彰 |
| basics | 基本情報 |
| certificates | 資格・免状 |
| education | 学歴 |
| interests | 興味・関心 |
| languages | 言語 |
| location | 住所 |
| profiles | プロフィール |
| projects | プロジェクト |
| publications | 出版・著作 |
| references | 推薦人 |
| skills | スキル |
| volunteer | ボランティア活動 |
| work | 職歴 |
### Skill Levels
| English | Japanese |
| ------------ | -------- |
| Novice | 入門 |
| Beginner | 初級 |
| Intermediate | 中級 |
| Advanced | 上級 |
| Expert | エキスパート |
| Master | マスター |
### Terms
| Term | Japanese |
| -------- | -------- |
| courses | コース |
| keywords | キーワード |
| score | 成績 |
# Norwegian
URL: (/en/docs/locale/norwegian)
English and Norwegian are both [Germanic
languages](https://en.wikipedia.org/wiki/Germanic_languages), with Norwegian
being part of the North Germanic branch. While both languages share some
common foundations, Norwegian has distinct characteristics that require
specific considerations for YAMLResume.
## Linguistics
### Character Set
The character sets of English and Norwegian are similar—both languages
primarily use the [Latin
alphabet](https://en.wikipedia.org/wiki/Latin_alphabet), but Norwegian has
additional letters. Here's a detailed comparison:
| Feature | English Character Set | Norwegian Character Set |
| ---------------------- | --------------------------------- | ---------------------------------------------------------------------------------------- |
| **Alphabet** | 26 letters (`a-z`) | 29 letters (`a-z` plus `æ`, `ø`, `å`) |
| **Diacritics** | None | Three additional vowels (`æ`, `ø`, `å`) that are distinct letters, not diacritical marks |
| **Special Characters** | Limited to basic Latin characters | Includes the three additional Norwegian vowels which are considered separate letters |
The main differences between the English and Norwegian writing systems:
* **Additional letters**: The Norwegian alphabet includes three extra vowels:
`æ`, `ø`, and `å`, which are distinct letters with specific pronunciations.
* **Letter order**: In Norwegian alphabetical order, these letters come at the
end: ...x, y, z, æ, ø, å.
* **Case variations**: Norwegian uses both uppercase and lowercase versions
(`Æ/æ`, `Ø/ø`, `Å/å`).
## Idioms
### Date
Days of the week and months are not capitalized in Norwegian (unlike English).
For example, "Sep 2021" in English is translated as "sept. 2021" in Norwegian,
with a lowercase month and a period after the abbreviation.
YAMLResume only uses months, hence the translation table:
| English | Norwegian |
| --------------- | ----------------- |
| January (Jan) | januar (jan.) |
| February (Feb) | februar (feb.) |
| March (Mar) | mars (mar.) |
| April (Apr) | april (apr.) |
| May (May) | mai (mai) |
| June (Jun) | juni (jun.) |
| July (Jul) | juli (jul.) |
| August (Aug) | august (aug.) |
| September (Sep) | september (sept.) |
| October (Oct) | oktober (okt.) |
| November (Nov) | november (nov.) |
| December (Dec) | desember (des.) |
### Capitalization
Norwegian has more conservative capitalization rules compared to English.
Generally, only proper nouns, the first word of sentences, and the pronoun "I"
("jeg" in Norwegian) are capitalized.
YAMLResume internally adopts a fixed set of options and terms for all resume
templates. For example, languages in YAMLResume resume templates adopt
[LinkedIn's language fluency
options](https://www.linkedin.com/pulse/language-proficiency-linkedin-duaa-ali/):
* Elementary Proficiency
* Limited Working Proficiency
* Minimum Professional Proficiency
* Full Professional Proficiency
* Native or Bilingual Proficiency
These are translated to Norwegian as follows:
* Grunnleggende nivå
* Begrenset arbeidskunnskap
* Minimum profesjonelt nivå
* Fullt profesjonelt nivå
* Morsmål eller tospråklig nivå
Only the first word is capitalized, following Norwegian capitalization conventions.
## Typesetting
### Punctuations
Norwegian has several notable differences in punctuation from English:
* **Quotation marks**: Norwegian typically uses guillemets (`«»`) or straight
quotes (`""`), and punctuation is usually placed outside quotation marks.
* **Decimal separator**: Norwegian uses a comma as a decimal separator
(e.g., 3,14) instead of a period like in English (3.14).
* **Thousand separator**: Norwegian uses a space or period as a thousand
separator (e.g., 1 000 or 1.000) rather than a comma.
* **Date format**: Norwegian dates follow the pattern DD.MM.YYYY or DD/MM/YYYY,
unlike the American MM/DD/YYYY format.
## Translations
YAMLResume adopts the following translations for various options and terms used
in Norwegian resumes.
### Education Degrees
| English | Norwegian |
| ------------- | ------------------ |
| Middle School | Ungdomsskole |
| High School | Videregående skole |
| Diploma | Fagbrev |
| Associate | Associate |
| Bachelor | Bachelor |
| Master | Master |
| Doctor | Doktor |
### Languages
| English | Norwegian |
| ----------- | -------------- |
| Afrikaans | Afrikaans |
| Albanian | Albansk |
| Amharic | Amharisk |
| Arabic | Arabisk |
| Azerbaijani | Aserbajdsjansk |
| Belarusian | Hviterussisk |
| Bengali | Bengali |
| Bhojpuri | Bhojpuri |
| Bulgarian | Bulgarsk |
| Burmese | Burmesisk |
| Cantonese | Kantonesisk |
| Catalan | Katalansk |
| Chinese | Kinesisk |
| Croatian | Kroatisk |
| Czech | Tsjekkisk |
| Danish | Dansk |
| Dutch | Nederlandsk |
| English | Engelsk |
| Estonian | Estisk |
| Farsi | Persisk |
| Filipino | Filippinsk |
| Finnish | Finsk |
| French | Fransk |
| German | Tysk |
| Greek | Gresk |
| Gujarati | Gujarati |
| Hausa | Hausa |
| Hebrew | Hebraisk |
| Hindi | Hindi |
| Hungarian | Ungarsk |
| Icelandic | Islandsk |
| Igbo | Igbo |
| Indonesian | Indonesisk |
| Irish | Irsk |
| Italian | Italiensk |
| Japanese | Japansk |
| Javanese | Javanesisk |
| Kazakh | Kasakhisk |
| Khmer | Khmer |
| Korean | Koreansk |
| Lahnda | Lahnda |
| Latvian | Latvisk |
| Lithuanian | Litauisk |
| Malay | Malaysisk |
| Mandarin | Mandarin |
| Marathi | Marathi |
| Nepali | Nepalsk |
| Norwegian | Norsk |
| Oromo | Oromo |
| Pashto | Pashto |
| Polish | Polsk |
| Portuguese | Portugisisk |
| Romanian | Rumensk |
| Russian | Russisk |
| Serbian | Serbisk |
| Shona | Shona |
| Sinhala | Singalesisk |
| Slovak | Slovakisk |
| Slovene | Slovensk |
| Somali | Somalisk |
| Spanish | Spansk |
| Sundanese | Sundanesisk |
| Swahili | Swahili |
| Swedish | Svensk |
| Tagalog | Tagalog |
| Tamil | Tamil |
| Telugu | Telugu |
| Thai | Thai |
| Turkish | Tyrkisk |
| Ukrainian | Ukrainsk |
| Urdu | Urdu |
| Uzbek | Usbekisk |
| Vietnamese | Vietnamesisk |
| Yoruba | Yoruba |
| Zulu | Zulu |
### Language Fluencies
| English | Norwegian |
| -------------------------------- | ----------------------------- |
| Elementary Proficiency | Grunnleggende nivå |
| Limited Working Proficiency | Begrenset arbeidskunnskap |
| Minimum Professional Proficiency | Minimum profesjonelt nivå |
| Full Professional Proficiency | Fullt profesjonelt nivå |
| Native or Bilingual Proficiency | Morsmål eller tospråklig nivå |
### Location (Countries and Regions)
| English | Norwegian |
| ------------------------------------ | ------------------------------------- |
| Afghanistan | Afghanistan |
| Aland Islands | Åland |
| Albania | Albania |
| Algeria | Algerie |
| American Samoa | Amerikansk Samoa |
| Andorra | Andorra |
| Angola | Angola |
| Anguilla | Anguilla |
| Antarctica | Antarktis |
| Antigua And Barbuda | Antigua og Barbuda |
| Argentina | Argentina |
| Armenia | Armenia |
| Aruba | Aruba |
| Australia | Australia |
| Austria | Østerrike |
| Azerbaijan | Aserbajdsjan |
| Bahrain | Bahrain |
| Bangladesh | Bangladesh |
| Barbados | Barbados |
| Belarus | Belarus |
| Belgium | Belgia |
| Belize | Belize |
| Benin | Benin |
| Bermuda | Bermuda |
| Bhutan | Bhutan |
| Bolivia | Bolivia |
| Bonaire, Sint Eustatius and Saba | Bonaire, Sint Eustatius og Saba |
| Bosnia and Herzegovina | Bosnia-Hercegovina |
| Botswana | Botswana |
| Bouvet Island | Bouvetøya |
| Brazil | Brasil |
| British Indian Ocean Territory | Det britiske territoriet i Indiahavet |
| Brunei | Brunei |
| Bulgaria | Bulgaria |
| Burkina Faso | Burkina Faso |
| Burundi | Burundi |
| Cambodia | Kambodsja |
| Cameroon | Kamerun |
| Canada | Canada |
| Cape Verde | Kapp Verde |
| Cayman Islands | Caymanøyene |
| Central African Republic | Den sentralafrikanske republikk |
| Chad | Tsjad |
| Chile | Chile |
| China | Kina |
| Christmas Island | Christmasøya |
| Cocos (Keeling) Islands | Kokosøyene (Keelingøyene) |
| Colombia | Colombia |
| Comoros | Komorene |
| Congo | Kongo |
| Cook Islands | Cookøyene |
| Costa Rica | Costa Rica |
| Cote D'Ivoire (Ivory Coast) | Elfenbenskysten |
| Croatia | Kroatia |
| Cuba | Cuba |
| Curaçao | Curaçao |
| Cyprus | Kypros |
| Czech Republic | Tsjekkia |
| Democratic Republic of the Congo | Den demokratiske republikken Kongo |
| Denmark | Danmark |
| Djibouti | Djibouti |
| Dominica | Dominica |
| Dominican Republic | Den dominikanske republikk |
| East Timor | Øst-Timor |
| Ecuador | Ecuador |
| Egypt | Egypt |
| El Salvador | El Salvador |
| Equatorial Guinea | Ekvatorial-Guinea |
| Eritrea | Eritrea |
| Estonia | Estland |
| Ethiopia | Etiopia |
| Falkland Islands | Falklandsøyene |
| Faroe Islands | Færøyene |
| Fiji Islands | Fijiøyene |
| Finland | Finland |
| France | Frankrike |
| French Guiana | Fransk Guyana |
| French Polynesia | Fransk Polynesia |
| French Southern Territories | Franske sørlige territorier |
| Gabon | Gabon |
| Gambia The | Gambia |
| Georgia | Georgia |
| Germany | Tyskland |
| Ghana | Ghana |
| Gibraltar | Gibraltar |
| Greece | Hellas |
| Greenland | Grønland |
| Grenada | Grenada |
| Guadeloupe | Guadeloupe |
| Guam | Guam |
| Guatemala | Guatemala |
| Guernsey and Alderney | Guernsey og Alderney |
| Guinea | Guinea |
| Guinea-Bissau | Guinea-Bissau |
| Guyana | Guyana |
| Haiti | Haiti |
| Heard Island and McDonald Islands | Heard- og McDonaldøyene |
| Honduras | Honduras |
| Hong Kong S.A.R. | Hong Kong S.A.R. |
| Hungary | Ungarn |
| Iceland | Island |
| India | India |
| Indonesia | Indonesia |
| Iran | Iran |
| Iraq | Irak |
| Ireland | Irland |
| Israel | Israel |
| Italy | Italia |
| Jamaica | Jamaica |
| Japan | Japan |
| Jersey | Jersey |
| Jordan | Jordan |
| Kazakhstan | Kasakhstan |
| Kenya | Kenya |
| Kiribati | Kiribati |
| Kosovo | Kosovo |
| Kuwait | Kuwait |
| Kyrgyzstan | Kirgisistan |
| Laos | Laos |
| Latvia | Latvia |
| Lebanon | Libanon |
| Lesotho | Lesotho |
| Liberia | Liberia |
| Libya | Libya |
| Liechtenstein | Liechtenstein |
| Lithuania | Litauen |
| Luxembourg | Luxembourg |
| Macau S.A.R. | Macau S.A.R. |
| Madagascar | Madagaskar |
| Malawi | Malawi |
| Malaysia | Malaysia |
| Maldives | Maldivene |
| Mali | Mali |
| Malta | Malta |
| Man (Isle of) | Man (Isle of) |
| Marshall Islands | Marshalløyene |
| Martinique | Martinique |
| Mauritania | Mauritania |
| Mauritius | Mauritius |
| Mayotte | Mayotte |
| Mexico | Mexico |
| Micronesia | Mikronesia |
| Moldova | Moldova |
| Monaco | Monaco |
| Mongolia | Mongolia |
| Montenegro | Montenegro |
| Montserrat | Montserrat |
| Morocco | Marokko |
| Mozambique | Mosambik |
| Myanmar | Myanmar |
| Namibia | Namibia |
| Nauru | Nauru |
| Nepal | Nepal |
| Netherlands | Nederland |
| New Caledonia | Ny-Caledonia |
| New Zealand | New Zealand |
| Nicaragua | Nicaragua |
| Niger | Niger |
| Nigeria | Nigeria |
| Niue | Niue |
| Norfolk Island | Norfolkøya |
| North Korea | Nord-Korea |
| North Macedonia | Nord-Makedonia |
| Northern Mariana Islands | Nord-Marianene |
| Norway | Norge |
| Oman | Oman |
| Pakistan | Pakistan |
| Palau | Palau |
| Palestinian Territory Occupied | Palestinsk okkupert område |
| Panama | Panama |
| Papua new Guinea | Papua Ny-Guinea |
| Paraguay | Paraguay |
| Peru | Peru |
| Philippines | Filippinene |
| Pitcairn Island | Pitcairnøyene |
| Poland | Polen |
| Portugal | Portugal |
| Puerto Rico | Puerto Rico |
| Qatar | Qatar |
| Reunion | Réunion |
| Romania | Romania |
| Russia | Russland |
| Rwanda | Rwanda |
| Saint Helena | Sankt Helena |
| Saint Kitts And Nevis | Saint Kitts og Nevis |
| Saint Lucia | Saint Lucia |
| Saint Pierre and Miquelon | Saint-Pierre og Miquelon |
| Saint Vincent And The Grenadines | Saint Vincent og Grenadinene |
| Saint-Barthelemy | Saint-Barthélemy |
| Saint-Martin (French part) | Saint-Martin (fransk del) |
| Samoa | Samoa |
| San Marino | San Marino |
| Sao Tome and Principe | São Tomé og Príncipe |
| Saudi Arabia | Saudi-Arabia |
| Senegal | Senegal |
| Serbia | Serbia |
| Seychelles | Seychellene |
| Sierra Leone | Sierra Leone |
| Singapore | Singapore |
| Sint Maarten (Dutch part) | Sint Maarten (nederlandsk del) |
| Slovakia | Slovakia |
| Slovenia | Slovenia |
| Solomon Islands | Salomonøyene |
| Somalia | Somalia |
| South Africa | Sør-Afrika |
| South Georgia | Sør-Georgia |
| South Korea | Sør-Korea |
| South Sudan | Sør-Sudan |
| Spain | Spania |
| Sri Lanka | Sri Lanka |
| Sudan | Sudan |
| Suriname | Surinam |
| Svalbard And Jan Mayen Islands | Svalbard og Jan Mayen |
| Swaziland | Swaziland |
| Sweden | Sverige |
| Switzerland | Sveits |
| Syria | Syria |
| Taiwan | Taiwan |
| Tajikistan | Tadsjikistan |
| Tanzania | Tanzania |
| Thailand | Thailand |
| The Bahamas | Bahamas |
| Togo | Togo |
| Tokelau | Tokelau |
| Tonga | Tonga |
| Trinidad And Tobago | Trinidad og Tobago |
| Tunisia | Tunisia |
| Türkiye | Tyrkia |
| Turkmenistan | Turkmenistan |
| Turks And Caicos Islands | Turks- og Caicosøyene |
| Tuvalu | Tuvalu |
| Uganda | Uganda |
| Ukraine | Ukraina |
| United Arab Emirates | De forente arabiske emirater |
| United Kingdom | Storbritannia |
| United States | USA |
| United States Minor Outlying Islands | USAs ytre småøyer |
| Uruguay | Uruguay |
| Uzbekistan | Usbekistan |
| Vanuatu | Vanuatu |
| Vatican City State (Holy See) | Vatikanstaten (Den hellige stol) |
| Venezuela | Venezuela |
| Vietnam | Vietnam |
| Virgin Islands (British) | Jomfruøyene (britiske) |
| Virgin Islands (US) | Jomfruøyene (USA) |
| Wallis And Futuna Islands | Wallis- og Futunaøyene |
| Western Sahara | Vest-Sahara |
| Yemen | Jemen |
| Zambia | Zambia |
| Zimbabwe | Zimbabwe |
### Section Names
| English | Norwegian |
| ------------ | ------------------------- |
| Awards | Utmerkelser |
| Basics | Grunnleggende informasjon |
| Certificates | Sertifikater |
| Education | Utdanning |
| Interests | Interesser |
| Languages | Språk |
| Projects | Prosjekter |
| Publications | Publikasjoner |
| References | Referanser |
| Skills | Ferdigheter |
| Volunteer | Frivillig arbeid |
| Work | Arbeidserfaring |
### Skill Levels
| English | Norwegian |
| ------------ | ------------ |
| Novice | Nybegynner |
| Beginner | Begynner |
| Intermediate | Viderekommen |
| Advanced | Avansert |
| Expert | Ekspert |
| Master | Mester |
### Options and Terms
| English | Norwegian |
| -------- | --------- |
| Courses | Kurs |
| Keywords | Nøkkelord |
| Score | Poeng |
# Spanish
URL: (/en/docs/locale/spanish)
English and Spanish are both [Indo-European
languages](https://en.wikipedia.org/wiki/Indo-European_languages), it is no
wonder that English and Spanish share some similarities, so most of the common
foundations of YAMLResume can be reused for English and Spanish.
## Linguistics
### Character Set
The character sets of English and Spanish are very similar—both languages
primarily use the [Latin
alphabet](https://en.wikipedia.org/wiki/Latin_alphabet), which consists of 26
letters. However, Spanish has an additional letter, the `ñ`, which
represents a unique sound. Here's a quick comparison:
| Feature | English Character Set | Spanish Character Set |
| ---------------------- | --------------------------------- | ----------------------------------------------------------------------------------------------- |
| **Alphabet** | 26 letters (`a-z`) | 27 letters (`a-z` plus `ñ`) |
| **Diacritics** | None | Includes accents (`á`, `é`, `í`, `ó`, `ú`), diaeresis (`ü`), and special punctuation (`¿`, `¡`) |
| **Special Characters** | Limited to basic Latin characters | Includes additional characters like `ñ` and accented vowels |
The main differences between the English and Spanish's writing systems:
* **Additional letter**: the Spanish alphabet includes the letter `ñ`, which
does not exist in the English alphabet.
* **[Diacritics](https://en.wikipedia.org/wiki/Diacritic)**: Spanish uses
several diacritics that change he pronunciation of vowels. For example,
accents indicate stress and pronunciation changes (e.g., `é` vs. `e`).
* **Punctuation marks**: Spanish uses inverted punctuation marks (`¿` for
questions and `¡` for exclamations) that are absent in English.
## Idioms
### Date
Days of the week and months are capitalised in English, but not in Spanish. For
example, "Sep 2021" in English is translated as "sept 2021" in Spanish.
YAMLResume only uses months, hence the translation table:
| English | Spanish |
| --------------- | ----------------- |
| January (Jan) | enero (ene) |
| February (Feb) | febrero (feb) |
| March (Mar) | marzo (mar) |
| April (Apr) | abril (abr) |
| May (May) | mayo (may) |
| June (Jun) | junio (jun) |
| July (Jul) | julio (jul) |
| August (Aug) | agosto (ago) |
| September (Sep) | septiembre (sept) |
| October (Oct) | octubre (oct) |
| November (Nov) | noviembre (nov) |
| December (Dec) | diciembre (dic) |
### Capitalization
English tends to capitalize many words, while Spanish is more conservative and
follows a much [tigher set of
rules](https://baselang.com/blog/basic-grammar/capitalization-in-spanish/).
YAMLResume internally adopts a fixed set of options and terms for all resume
templates. For example, languages in YAMLResume resume templates adopt
[Linkedin's language fluency
options](https://www.linkedin.com/pulse/language-proficiency-linkedin-duaa-ali/):
* Elementary Proficiency
* Limited Working Proficiency
* Minimum Professional Proficiency
* Full Professional Proficiency
* Native or Bilingual Proficiency
These are translated to Spanish as follows:
* Competencia elemental
* Competencia limitada de trabajo
* Competencia profesional de trabajo
* Competencia profesional plena
* Competencia nativa o bilingüe
Only the first word is capitalized.
## Typesetting
### Punctuations
Spanish has several notable differences in punctuations from English:
* **Quotation marks**: In English, periods and commas are placed inside
quotation marks, whereas in Spanish, they are usually placed outside.
* **Inverted marks**: Spanish uses inverted question marks `¿` and
exclamation marks `¡` at both the beginning and the end of interrogative and
exclamatory sentences, whereas English does not.
* **Serial comma**: English often uses a serial comma before "and" in lists
(e.g., "apples, oranges, and bananas"), whereas Spanish does not use a comma
before "y" (e.g., "manzanas, naranjas y plátanos")
* **Numerical formats**: English uses a period is used as a decimal separator
(e.g., 3.14), whereas Spanish uses a comma is used (e.g., 3,14).
## Translations
YAMLResume adopts the following translations for various options and terms used
in Spanish resumes
### Education Degrees
| English | Spanish |
| ------------- | -------------------- |
| Middle School | Escuela secundaria |
| High School | Título de secundaria |
| Diploma | Diploma |
| Associate | Grado de asociado |
| Bachelor | Licenciatura |
| Master | Maestría |
| Doctor | Doctorado |
### Languages
| English | Spanish |
| ----------- | ----------- |
| Afrikaans | Afrikáans |
| Albanian | Albanés |
| Amharic | Amárico |
| Arabic | Árabe |
| Azerbaijani | Azerbaiyano |
| Belarusian | Bielorruso |
| Bengali | Bengalí |
| Bhojpuri | Bhojpuri |
| Bulgarian | Búlgaro |
| Burmese | Birmano |
| Cantonese | Cantonés |
| Catalan | Catalán |
| Chinese | Chino |
| Croatian | Croata |
| Czech | Checo |
| Danish | Danés |
| Dutch | Neerlandés |
| English | Inglés |
| Estonian | Estonio |
| Farsi | Persa |
| Filipino | Filipino |
| Finnish | Finés |
| French | Francés |
| German | Alemán |
| Greek | Griego |
| Gujarati | Gujarati |
| Hausa | Hausa |
| Hebrew | Hebreo |
| Hindi | Hindi |
| Hungarian | Húngaro |
| Icelandic | Islandés |
| Igbo | Igbo |
| Indonesian | Indonesio |
| Irish | Irlandés |
| Italian | Italiano |
| Japanese | Japonés |
| Javanese | Javanés |
| Kazakh | Kazajo |
| Khmer | Jemer |
| Korean | Coreano |
| Lahnda | Lahnda |
| Latvian | Letón |
| Lithuanian | Lituano |
| Malay | Malayo |
| Mandarin | Mandarín |
| Marathi | Marathi |
| Nepali | Nepalí |
| Norwegian | Noruego |
| Oromo | Oromo |
| Pashto | Pastún |
| Polish | Polaco |
| Portuguese | Portugués |
| Romanian | Rumano |
| Russian | Ruso |
| Serbian | Serbio |
| Shona | Shona |
| Sinhala | Cingalés |
| Slovak | Eslovaco |
| Slovene | Esloveno |
| Somali | Somalí |
| Spanish | Español |
| Sundanese | Sundanés |
| Swahili | Suajili |
| Swedish | Sueco |
| Tagalog | Tagalo |
| Tamil | Tamil |
| Telugu | Telugu |
| Thai | Tailandés |
| Turkish | Turco |
| Ukrainian | Ucraniano |
| Urdu | Urdu |
| Uzbek | Uzbeko |
| Vietnamese | Vietnamita |
| Yoruba | Yoruba |
| Zulu | Zulú |
### Language Fluencies
| English | Spanish |
| -------------------------------- | ---------------------------------- |
| Elementary Proficiency | Competencia elemental |
| Limited Working Proficiency | Competencia limitada de trabajo |
| Minimum Professional Proficiency | Competencia profesional de trabajo |
| Full Professional Proficiency | Competencia profesional plena |
| Native or Bilingual Proficiency | Competencia nativa o bilingüe |
### Location (Countries and Regions)
| English | Spanish |
| ------------------------------------ | -------------------------------------------- |
| Afghanistan | Afganistán |
| Aland Islands | Islas Åland |
| Albania | Albania |
| Algeria | Argelia |
| American Samoa | Samoa Americana |
| Andorra | Andorra |
| Angola | Angola |
| Anguilla | Anguila |
| Antarctica | Antártida |
| Antigua And Barbuda | Antigua y Barbuda |
| Argentina | Argentina |
| Armenia | Armenia |
| Aruba | Aruba |
| Australia | Australia |
| Austria | Austria |
| Azerbaijan | Azerbaiyán |
| Bahrain | Baréin |
| Bangladesh | Bangladés |
| Barbados | Barbados |
| Belarus | Bielorrusia |
| Belgium | Bélgica |
| Belize | Belice |
| Benin | Benín |
| Bermuda | Bermudas |
| Bhutan | Bután |
| Bolivia | Bolivia |
| Bonaire, Sint Eustatius and Saba | Bonaire, San Eustaquio y Saba |
| Bosnia and Herzegovina | Bosnia y Herzegovina |
| Botswana | Botsuana |
| Bouvet Island | Isla Bouvet |
| Brazil | Brasil |
| British Indian Ocean Territory | Territorio Británico del Océano Índico |
| Brunei | Brunéi |
| Bulgaria | Bulgaria |
| Burkina Faso | Burkina Faso |
| Burundi | Burundi |
| Cambodia | Camboya |
| Cameroon | Camerún |
| Canada | Canadá |
| Cape Verde | Cabo Verde |
| Cayman Islands | Islas Caimán |
| Central African Republic | República Centroafricana |
| Chad | Chad |
| Chile | Chile |
| China | China |
| Christmas Island | Isla de Navidad |
| Cocos (Keeling) Islands | Islas Cocos |
| Colombia | Colombia |
| Comoros | Comoras |
| Congo | Congo |
| Cook Islands | Islas Cook |
| Costa Rica | Costa Rica |
| Cote D'Ivoire (Ivory Coast) | Costa de Marfil |
| Croatia | Croacia |
| Cuba | Cuba |
| Curaçao | Curazao |
| Cyprus | Chipre |
| Czech Republic | República Checa |
| Democratic Republic of the Congo | República Democrática del Congo |
| Denmark | Dinamarca |
| Djibouti | Yibuti |
| Dominica | Dominica |
| Dominican Republic | República Dominicana |
| East Timor | Timor Oriental |
| Ecuador | Ecuador |
| Egypt | Egipto |
| El Salvador | El Salvador |
| Equatorial Guinea | Guinea Ecuatorial |
| Eritrea | Eritrea |
| Estonia | Estonia |
| Ethiopia | Etiopía |
| Falkland Islands | Islas Malvinas |
| Faroe Islands | Islas Feroe |
| Fiji Islands | Fiyi |
| Finland | Finlandia |
| France | Francia |
| French Guiana | Guayana Francesa |
| French Polynesia | Polinesia Francesa |
| French Southern Territories | Tierras Australes y Antárticas Francesas |
| Gabon | Gabón |
| Gambia The | Gambia |
| Georgia | Georgia |
| Germany | Alemania |
| Ghana | Ghana |
| Gibraltar | Gibraltar |
| Greece | Grecia |
| Greenland | Groenlandia |
| Grenada | Granada |
| Guadeloupe | Guadalupe |
| Guam | Guam |
| Guatemala | Guatemala |
| Guernsey and Alderney | Guernsey y Alderney |
| Guinea | Guinea |
| Guinea-Bissau | Guinea-Bisáu |
| Guyana | Guyana |
| Haiti | Haití |
| Heard Island and McDonald Islands | Islas Heard y McDonald |
| Honduras | Honduras |
| Hong Kong S.A.R. | Hong Kong |
| Hungary | Hungría |
| Iceland | Islandia |
| India | India |
| Indonesia | Indonesia |
| Iran | Irán |
| Iraq | Irak |
| Ireland | Irlanda |
| Israel | Israel |
| Italy | Italia |
| Jamaica | Jamaica |
| Japan | Japón |
| Jersey | Jersey |
| Jordan | Jordania |
| Kazakhstan | Kazajistán |
| Kenya | Kenia |
| Kiribati | Kiribati |
| Kosovo | Kosovo |
| Kuwait | Kuwait |
| Kyrgyzstan | Kirguistán |
| Laos | Laos |
| Latvia | Letonia |
| Lebanon | Líbano |
| Lesotho | Lesoto |
| Liberia | Liberia |
| Libya | Libia |
| Liechtenstein | Liechtenstein |
| Lithuania | Lituania |
| Luxembourg | Luxemburgo |
| Macau S.A.R. | Macao |
| Madagascar | Madagascar |
| Malawi | Malaui |
| Malaysia | Malasia |
| Maldives | Maldivas |
| Mali | Malí |
| Malta | Malta |
| Man (Isle of) | Isla de Man |
| Marshall Islands | Islas Marshall |
| Martinique | Martinica |
| Mauritania | Mauritania |
| Mauritius | Mauricio |
| Mayotte | Mayotte |
| Mexico | México |
| Micronesia | Micronesia |
| Moldova | Moldavia |
| Monaco | Mónaco |
| Mongolia | Mongolia |
| Montenegro | Montenegro |
| Montserrat | Montserrat |
| Morocco | Marruecos |
| Mozambique | Mozambique |
| Myanmar | Myanmar |
| Namibia | Namibia |
| Nauru | Nauru |
| Nepal | Nepal |
| Netherlands | Países Bajos |
| New Caledonia | Nueva Caledonia |
| New Zealand | Nueva Zelanda |
| Nicaragua | Nicaragua |
| Niger | Níger |
| Nigeria | Nigeria |
| Niue | Niue |
| Norfolk Island | Isla Norfolk |
| North Korea | Corea del Norte |
| North Macedonia | Macedonia del Norte |
| Northern Mariana Islands | Islas Marianas del Norte |
| Norway | Noruega |
| Oman | Omán |
| Pakistan | Pakistán |
| Palau | Palaos |
| Palestinian Territory Occupied | Territorio Palestino Ocupado |
| Panama | Panamá |
| Papua new Guinea | Papúa Nueva Guinea |
| Paraguay | Paraguay |
| Peru | Perú |
| Philippines | Filipinas |
| Pitcairn Island | Islas Pitcairn |
| Poland | Polonia |
| Portugal | Portugal |
| Puerto Rico | Puerto Rico |
| Qatar | Catar |
| Reunion | Reunión |
| Romania | Rumania |
| Russia | Rusia |
| Rwanda | Ruanda |
| Saint Helena | Santa Elena |
| Saint Kitts And Nevis | San Cristóbal y Nieves |
| Saint Lucia | Santa Lucía |
| Saint Pierre and Miquelon | San Pedro y Miquelón |
| Saint Vincent And The Grenadines | San Vicente y las Granadinas |
| Saint-Barthelemy | San Bartolomé |
| Saint-Martin (French part) | San Martín (parte francesa) |
| Samoa | Samoa |
| San Marino | San Marino |
| Sao Tome and Principe | Santo Tomé y Príncipe |
| Saudi Arabia | Arabia Saudita |
| Senegal | Senegal |
| Serbia | Serbia |
| Seychelles | Seychelles |
| Sierra Leone | Sierra Leona |
| Singapore | Singapur |
| Sint Maarten (Dutch part) | San Martín (parte neerlandesa) |
| Slovakia | Eslovaquia |
| Slovenia | Eslovenia |
| Solomon Islands | Islas Salomón |
| Somalia | Somalia |
| South Africa | Sudáfrica |
| South Georgia | Georgia del Sur |
| South Korea | Corea del Sur |
| South Sudan | Sudán del Sur |
| Spain | España |
| Sri Lanka | Sri Lanka |
| Sudan | Sudán |
| Suriname | Surinam |
| Svalbard And Jan Mayen Islands | Svalbard y Jan Mayen |
| Swaziland | Suazilandia |
| Sweden | Suecia |
| Switzerland | Suiza |
| Syria | Siria |
| Taiwan | Taiwán |
| Tajikistan | Tayikistán |
| Tanzania | Tanzania |
| Thailand | Tailandia |
| The Bahamas | Bahamas |
| Togo | Togo |
| Tokelau | Tokelau |
| Tonga | Tonga |
| Trinidad And Tobago | Trinidad y Tobago |
| Tunisia | Túnez |
| Türkiye | Turquía |
| Turkmenistan | Turkmenistán |
| Turks And Caicos Islands | Islas Turcas y Caicos |
| Tuvalu | Tuvalu |
| Uganda | Uganda |
| Ukraine | Ucrania |
| United Arab Emirates | Emiratos Árabes Unidos |
| United Kingdom | Reino Unido |
| United States | Estados Unidos |
| United States Minor Outlying Islands | Islas Ultramarinas Menores de Estados Unidos |
| Uruguay | Uruguay |
| Uzbekistan | Uzbekistán |
| Vanuatu | Vanuatu |
| Vatican City State (Holy See) | Ciudad del Vaticano |
| Venezuela | Venezuela |
| Vietnam | Vietnam |
| Virgin Islands (British) | Islas Vírgenes Británicas |
| Virgin Islands (US) | Islas Vírgenes de los Estados Unidos |
| Wallis And Futuna Islands | Wallis y Futuna |
| Western Sahara | Sahara Occidental |
| Yemen | Yemen |
| Zambia | Zambia |
| Zimbabwe | Zimbabue |
### Section Names
| English | Spanish |
| ------------ | ------------------- |
| Awards | Premios |
| Basics | Información básica |
| Certificates | Certificados |
| Education | Educación |
| Interests | Intereses |
| Languages | Idiomas |
| Location | Ubicación |
| Profiles | Perfiles |
| Projects | Proyectos |
| Publications | Publicaciones |
| References | Referencias |
| Skills | Competencias |
| Volunteer | Voluntariado |
| Work | Experiencia laboral |
### Skill Levels
| English | Spanish |
| ------------ | ------------ |
| Novice | Novato |
| Beginner | Principiante |
| Intermediate | Intermedio |
| Advanced | Avanzado |
| Expert | Experto |
| Master | Maestro |
### Options and Terms
| English | Spanish |
| -------- | -------------- |
| Courses | Cursos |
| Keywords | Palabras clave |
| Score | Puntuación |
# Schema
URL: (/en/docs/compiler/schema)
## Overview
Drafting resumes is a long, boring, and tedious process. People often need to
spend hours nitpicking details, but errors still occur. For example, there may
be a typo in education degrees, an email format may be wrong, a course name may
be too short, etc.
Along with the [static types definitions](/docs/compiler/types), YAMLResume
provides a built-in schema which can be used for runtime validations. This is
the core that makes YAMLResume a **resume compiler**—YAMLResume provides
**clang-style warning/error messages** that help catch potential errors at the
early stage of resume drafting.
For example, for the following resume:
```yml lineNumbers title="invalid-resume.yml"
# yaml-language-server: $schema=https://yamlresume.dev/schema.json
---
content:
basics:
name: Andy Dufresne
headline: Headed for the Pacific
phone: "(213) 555-9876"
email: hi@pp # [!code highlight]
url: https//ppresume.com/gallery # [!code highlight]
summary: |
- Computer Science major with strong foundation in data structures, algorithms, and software development
- Pixel perfect full stack web developer, specialised in creating high-quality, visually appealing websites
- Experiened in databases (SQL, NoSQL), familiar with server-side technologies (Node.js, Express, etc.)
- Team player, with detail-oriented mindset and a keen eye for design and user experiences
location:
address: 123 Main Street
region: California
city: S # [!code highlight]
country: United States
postalCode: "95814"
education:
- institution: University of Southern California
url: https://www.cs.usc.edu/
degree: Bachelor
area: Computer Engineering and Computer Science
score: "3.8"
startDate: Sep 1, 2016
endDate:
courses:
- D # [!code highlight]
- Programming Language Concepts
summary: |
- Developed proficiency in programming languages such as Java, C++, and Python
- Gained hands-on experience in software development through various projects and assignments
- Strong communication and teamwork skills acquired through group projects and presentations
layouts:
- engine: latex
typography:
fontSize: 13pt # [!code highlight]
```
`yamlresume validate` will give you a list of potential errors, with clear
positional information that helps pinpoint the exact location of the error,
meanwhile, with the help of
[yaml-language-server](https://github.com/redhat-developer/yaml-language-server),
you can get a better editing experience with
[auto-completion](/docs/compiler/schema/json#auto-completion), [on-hover property
docs](/docs/compiler/schema/json#property-docs), [format
validation](/docs/compiler/schema/json#format-validation), and more.
Under the hood, YAMLResume adopts [Zod](https://zod.dev) to validate resume data
in runtime. Zod is a TypeScript-first schema validation library that allows you
to define schemas for your resume data, which acts as a robust safety net,
ensuring that the resume data is reliable, consistent, and ready to be rendered
into a professional PDF.
Schema validation is a very powerful tool to ensure the correctness of resume
data. It can catch errors throughout the entire life cycle of resume drafting,
which is very helpful to avoid low-level mistakes from the start.
## Learn More
# JSON Schema
URL: (/en/docs/compiler/schema/json)
## Overview
YAMLResume provides an official [JSON Schema](https://json-schema.org) for
validating resume data.
The latest official JSON Schema is hosted at:
[https://yamlresume.com/schema.json](https://yamlresume.com/schema.json).
However, if you want a cut-down version for your IDE/editor, you can also use
the canary version
[schema.json](https://github.com/yamlresume/yamlresume/blob/main/packages/core/src/schema/schema.json)
from our GitHub repo.
Meanwhile, as YAMLResume evolves, the official JSON Schema will be updated
constantly, hence we also provide all archived version of the JSON Schema at:
`https://yamlresume.com/schemas//schema.json`.
For now we have archived versions for:
* [v0.12.3](/schemas/v0.12.3/schema.json)
* [v0.12.0](/schemas/v0.12.0/schema.json)
* [v0.11.0](/schemas/v0.11.0/schema.json)
* [v0.10.1](/schemas/v0.10.1/schema.json)
* [v0.10.0](/schemas/v0.10.0/schema.json)
* [v0.9.1](/schemas/v0.9.1/schema.json)
* [v0.8.0](/schemas/v0.8.0/schema.json)
* [v0.7.5](/schemas/v0.7.5/schema.json)
* [v0.7.0](/schemas/v0.7.0/schema.json)
* [v0.6.0](/schemas/v0.6.0/schema.json)
* [v0.5.1](/schemas/v0.5.1/schema.json)
## What is JSON Schema?
[JSON Schema](https://json-schema.org) is a JSON-based format for defining the
structure of JSON data. It is a powerful tool for validating and documenting
JSON data.
JSON Schema allows you to specify the expected structure, types, and constraints
of your JSON data. With JSON Schema, you can define which properties are
required, what types of values are allowed (such as strings, numbers, arrays, or
objects), and even set rules for value formats (like email addresses or URLs).
By using JSON Schema, developers and tools can automatically validate JSON data
to ensure it matches the expected format before processing. This helps catch
errors early, improves data quality, and enables features like auto-completion
and inline documentation in modern code editors.
JSON Schema is widely supported and can be used for configuration files, API
payloads, and, in the case of YAMLResume, for validating resume data to ensure
consistency and correctness.
## Benefits
Integrating YAMLResume's JSON Schema into your IDE/editor when crafting resumes
brings several benefits:
* **Auto Completion:** When you start typing, your IDE/editor will suggest
properties and their expected types, helping you draft your resume faster and
with fewer errors.
* **Format Validation:** Your IDE/editor will highlight any formatting errors
(like invalid dates or URLs) as you type, preventing you from submitting
incorrect information.
* **Property Docs:** Get inline documentation for each property,
explaining its purpose, allowed values, and any special formatting
requirements.
### Auto Completion
All [enum types](/docs/compiler/types#enum-types) will be
auto completed when typing. You can just type the first few letters of the option
and the IDE/editor will suggest a list of valid options, then you can just use
up/down arrow keys to select the correct one.
### Format Validation
Each key value pair will be validated in real time against the predefined
schema. You IDE/editor will warn you with precise error message to help avoid
low-level mistakes like wrong email format, invalid degree options, typos in
language fluency levels, etc.
And if a required key is missing, the warning message will be escalated to its parent
object by default, so you can easily find the missing key.
### Property Docs
Last but not least, you can get inline documentation for each property,
explaining its purpose, allowed values, and any special formatting requirements.
You can hover over the either the property key or the value to see the docs.
## How to use JSON Schema?
You need to install
[yaml-language-server](https://github.com/redhat-developer/yaml-language-server)
to use YAMLResume's JSON schema for your resumes. Depending on your
IDE/editor, you may need to install different
[extensions](https://github.com/redhat-developer/yaml-language-server?tab=readme-ov-file#clients).
Once installed, you need to add the following line at the top of your resume
file:
```
# yaml-language-server: $schema=https://yamlresume.dev/schema.json
```
Then you can enjoy the [auto-completion](#auto-completion), [format
validation](#format-validation), and [property docs](#property-docs) features all
at your fingertips.
## Engineering
Under the hood, YAMLResume's JSON schema is generated with the help of [Zod
v4](https://zod.dev/json-schema), which is a awesome TypeScript-first schema
validation library.
We define the schema in
[schema/resume.ts](https://github.com/yamlresume/yamlresume/blob/main/packages/core/src/schema/resume.ts),
and then generate the JSON schema in a [test
case](https://github.com/yamlresume/yamlresume/blob/99de/packages/core/src/schema/resume.test.ts#L272-L277).
Isn't this cool?
# Zod Schema
URL: (/en/docs/compiler/schema/zod)
YAMLResume adopts [zod](https://zod.dev) to validate resume data in runtime.
This document outlines all zod schema used in YAMLResume. If you are interested
in the implementation details, you can find the source code
[here](https://github.com/yamlresume/yamlresume/tree/main/packages/core/src/schema).
## Resume Schema
Defines the overall resume structure validation, including content and layout validation.
| Prop | Type | Required |
| ---------- | --------------------------------- | -------- |
| `content` | [`ContentSchema`](#contentschema) | ✅ |
| `layouts?` | [`LayoutsSchema`](#layoutsschema) | ⬜ |
| `locale?` | [`LocaleSchema`](#localeschema) | ⬜ |
### ContentSchema
Defines the validation structure for the entire resume content.
| Prop | Type | Required |
| --------------- | --------------------------------------------------- | -------- |
| `basics` | [`BasicsItemSchema`](#basicsitemschema) | ✅ |
| `education` | [`EducationItemSchema[]`](#educationitemschema) | ✅ |
| `awards?` | [`AwardItemSchema[]`](#awarditemschema) | ⬜ |
| `certificates?` | [`CertificateItemSchema[]`](#certificateitemschema) | ⬜ |
| `interests?` | [`InterestItemSchema[]`](#interestitemschema) | ⬜ |
| `languages?` | [`LanguageItemSchema[]`](#languageitemschema) | ⬜ |
| `location?` | [`LocationItemSchema`](#locationitemschema) | ⬜ |
| `projects?` | [`ProjectItemSchema[]`](#projectitemschema) | ⬜ |
| `profiles?` | [`ProfileItemSchema[]`](#profileitemschema) | ⬜ |
| `publications?` | [`PublicationItemSchema[]`](#publicationitemschema) | ⬜ |
| `references?` | [`ReferenceItemSchema[]`](#referenceitemschema) | ⬜ |
| `skills?` | [`SkillItemSchema[]`](#skillitemschema) | ⬜ |
| `volunteer?` | [`VolunteerItemSchema[]`](#volunteeritemschema) | ⬜ |
| `work?` | [`WorkItemSchema[]`](#workitemschema) | ⬜ |
#### AwardItemSchema
Validates a single award, honor, or recognition received.
| Prop | Type | Required | Validation Rules |
| ---------- | -------- | -------- | ------------------------------------- |
| `awarder` | `string` | ✅ | 2-128 characters |
| `title` | `string` | ✅ | 2-128 characters |
| `date?` | `string` | ⬜ | see [date schema](#date-schema) |
| `summary?` | `string` | ⬜ | see [summary schema](#summary-schema) |
#### BasicsItemSchema
Validates the core personal and contact information.
| Prop | Type | Required | Validation Rules |
| ----------- | -------- | -------- | ------------------------------------- |
| `name` | `string` | ✅ | 2-128 characters |
| `email?` | `string` | ⬜ | see [email schema](#email-schema) |
| `headline?` | `string` | ⬜ | 2-128 characters |
| `phone?` | `string` | ⬜ | see [phone schema](#phone-schema) |
| `summary?` | `string` | ⬜ | see [summary schema](#summary-schema) |
| `url?` | `string` | ⬜ | see [url schema](#url-schema) |
#### CertificateItemSchema
Validates a single certification, credential, or professional qualification.
| Prop | Type | Required | Validation Rules |
| -------- | -------- | -------- | ------------------------------- |
| `issuer` | `string` | ✅ | 2-128 characters |
| `name` | `string` | ✅ | 2-128 characters |
| `date?` | `string` | ⬜ | see [date schema](#date-schema) |
| `url?` | `string` | ⬜ | see [url schema](#url-schema) |
#### EducationItemSchema
Validates a single educational experience or degree program.
| Prop | Type | Required | Validation Rules |
| ------------- | ------------------- | -------- | ------------------------------------------------- |
| `area` | `string` | ✅ | 2-64 characters |
| `degree` | [`Degree`](#degree) | ✅ | Must be from predefined [degree options](#degree) |
| `institution` | `string` | ✅ | 2-128 characters |
| `startDate` | `string` | ✅ | see [date schema](#date-schema) |
| `courses?` | `string[]` | ⬜ | Each item 2-128 characters |
| `endDate?` | `string` | ⬜ | see [date schema](#date-schema) |
| `summary?` | `string` | ⬜ | see [summary schema](#summary-schema) |
| `score?` | `string` | ⬜ | 2-32 characters |
| `url?` | `string` | ⬜ | see [url schema](#url-schema) |
#### InterestItemSchema
Validates a single interest, hobby, or personal activity.
| Prop | Type | Required | Validation Rules |
| ----------- | ---------- | -------- | --------------------------------------- |
| `name` | `string` | ✅ | 2-128 characters |
| `keywords?` | `string[]` | ⬜ | see [keywords schema](#keywords-schema) |
#### LanguageItemSchema
Validates a single language proficiency item.
| Prop | Type | Required | Validation Rules |
| ----------- | ----------------------- | -------- | ----------------------------------------------------- |
| `fluency` | [`Fluency`](#fluency) | ✅ | Must be from predefined [fluency options](#fluency) |
| `language` | [`Language`](#language) | ✅ | Must be from predefined [language options](#language) |
| `keywords?` | `string[]` | ⬜ | Each item 1-32 characters |
#### LocationItemSchema
Validates location and address information.
| Prop | Type | Required | Validation Rules |
| ------------- | --------------------- | -------- | --------------------------------------------------- |
| `city` | `string` | ✅ | 2-128 characters |
| `address?` | `string` | ⬜ | 2-128 characters |
| `country?` | [`Country`](#country) | ⬜ | Must be from predefined [country options](#country) |
| `postalCode?` | `string` | ⬜ | 2-128 characters |
| `region?` | `string` | ⬜ | 2-128 characters |
#### ProfileItemSchema
Validates a single online profile or social media presence.
| Prop | Type | Required | Validation Rules |
| ---------- | --------------------- | -------- | --------------------------------------------------- |
| `network` | [`Network`](#network) | ✅ | Must be from predefined [network options](#network) |
| `username` | `string` | ✅ | 2-128 characters |
| `url?` | `string` | ⬜ | Valid URL, max 256 chars |
#### ProjectItemSchema
Validates a single project, portfolio piece, or technical work.
| Prop | Type | Required | Validation Rules |
| -------------- | ---------- | -------- | ------------------------------------- |
| `name` | `string` | ✅ | 2-128 characters |
| `startDate` | `string` | ✅ | see [date schema](#date-schema) |
| `summary` | `string` | ✅ | see [summary schema](#summary-schema) |
| `description?` | `string` | ⬜ | 4-128 characters |
| `endDate?` | `string` | ⬜ | see [date schema](#date-schema) |
| `keywords?` | `string[]` | ⬜ | Each item 1-32 characters |
| `url?` | `string` | ⬜ | Valid URL, max 256 chars |
#### PublicationItemSchema
Validates a single publication, research work, or academic paper.
| Prop | Type | Required | Validation Rules |
| -------------- | -------- | -------- | ------------------------------------- |
| `name` | `string` | ✅ | 2-128 characters |
| `publisher` | `string` | ✅ | 2-128 characters |
| `releaseDate?` | `string` | ⬜ | see [date schema](#date-schema) |
| `summary?` | `string` | ⬜ | see [summary schema](#summary-schema) |
| `url?` | `string` | ⬜ | Valid URL, max 256 chars |
#### ReferenceItemSchema
Validates a single professional reference or recommendation.
| Prop | Type | Required | Validation Rules |
| --------------- | -------- | -------- | ------------------------------------- |
| `name` | `string` | ✅ | 2-128 characters |
| `summary` | `string` | ✅ | see [summary schema](#summary-schema) |
| `email?` | `string` | ⬜ | see [email schema](#email-schema) |
| `phone?` | `string` | ⬜ | Valid phone format |
| `relationship?` | `string` | ⬜ | 2-128 characters |
#### SkillItemSchema
Validates a single skill, competency, or technical ability.
| Prop | Type | Required | Validation Rules |
| ----------- | ----------------- | -------- | ----------------------------------------------- |
| `level` | [`Level`](#level) | ✅ | Must be from predefined [level options](#level) |
| `name` | `string` | ✅ | 2-128 characters |
| `keywords?` | `string[]` | ⬜ | Each item 1-32 characters |
#### VolunteerItemSchema
Validates a single volunteer experience or community service.
| Prop | Type | Required | Validation Rules |
| -------------- | -------- | -------- | ------------------------------------- |
| `organization` | `string` | ✅ | 2-128 characters |
| `position` | `string` | ✅ | 2-128 characters |
| `startDate` | `string` | ✅ | see [date schema](#date-schema) |
| `summary` | `string` | ✅ | see [summary schema](#summary-schema) |
| `endDate?` | `string` | ⬜ | see [date schema](#date-schema) |
| `url?` | `string` | ⬜ | Valid URL, max 256 chars |
#### WorkItemSchema
Validates a single work experience or employment position.
| Prop | Type | Required | Validation Rules |
| ----------- | ---------- | -------- | ------------------------------------- |
| `name` | `string` | ✅ | 2-128 characters |
| `position` | `string` | ✅ | 2-128 characters |
| `startDate` | `string` | ✅ | see [date schema](#date-schema) |
| `summary` | `string` | ✅ | see [summary schema](#summary-schema) |
| `endDate?` | `string` | ⬜ | see [date schema](#date-schema) |
| `keywords?` | `string[]` | ⬜ | Each item 1-32 characters |
| `url?` | `string` | ⬜ | Valid URL, max 256 chars |
### LocaleSchema
Validates locale settings for internationalization and localization.
| Prop | Type | Required | Validation Rules |
| ----------- | ----------------------------------- | -------- | ------------------------------------------------------------------- |
| `language?` | [`LocaleLanguage`](#localelanguage) | ⬜ | Must be from predefined [locale language options](#locale-language) |
### LayoutsSchema
Defines the overall layout validation configuration.
| Prop | Type | Required | Validation Rules |
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------- | -------- | ------------------------------- |
| `layouts[]` | [`HtmlLayoutSchema`](#htmllayoutschema) \| [`LatexLayoutSchema`](#latexlayoutschema) \| [`MarkdownLayoutSchema`](#markdownlayoutschema) | ⬜ | Array of layout configurations. |
#### Common Layout Schemas
##### MarginsSchema
Validates page margin settings for document layout.
| Prop | Type | Required | Validation Rules |
| --------- | -------- | -------- | --------------------------------------------- |
| `top?` | `string` | ⬜ | see [margin size schema](#margin-size-schema) |
| `bottom?` | `string` | ⬜ | see [margin size schema](#margin-size-schema) |
| `left?` | `string` | ⬜ | see [margin size schema](#margin-size-schema) |
| `right?` | `string` | ⬜ | see [margin size schema](#margin-size-schema) |
##### SectionsSchema
Validates section customization settings.
| Prop | Type | Required | Validation Rules |
| ---------- | --------------------------- | -------- | -------------------------------------------------------------------- |
| `aliases?` | `Record` | ⬜ | Keys must be valid section IDs, values must be strings (2-128 chars) |
| `order?` | `OrderableSectionID[]` | ⬜ | Array of valid orderable section IDs |
#### HtmlLayoutSchema
Validates HTML layout configuration.
| Prop | Type | Required |
| ------------- | ----------------------------------------------- | -------- |
| `engine` | `'html'` | ✅ |
| `advanced?` | [`HtmlAdvancedSchema`](#htmladvancedschema) | ⬜ |
| `sections?` | [`SectionsSchema`](#sectionsschema) | ⬜ |
| `template?` | [`HtmlTemplateSchema`](#htmltemplateschema) | ⬜ |
| `typography?` | [`HtmlTypographySchema`](#htmltypographyschema) | ⬜ |
##### HtmlAdvancedSchema
Validates advanced HTML configuration options.
| Prop | Type | Required | Validation Rules |
| -------------- | --------- | -------- | ---------------- |
| `showIcons?` | `boolean` | ⬜ | true/false |
| `title?` | `string` | ⬜ | - |
| `footer?` | `string` | ⬜ | - |
| `description?` | `string` | ⬜ | - |
| `keywords?` | `string` | ⬜ | - |
##### HtmlTemplateSchema
Validates HTML template configuration.
| Prop | Type | Required | Validation Rules |
| ---------- | ------------------------------- | -------- | --------------------------------------------------------- |
| `template` | [`HtmlTemplate`](#htmltemplate) | ⬜ | Must be from predefined [template options](#htmltemplate) |
##### HtmlTypographySchema
Validates HTML typography settings.
| Prop | Type | Required | Validation Rules |
| -------------- | ------------------------------- | -------- | ------------------------------------------------------------ |
| `fontSize?` | [`HtmlFontSize`](#htmlfontsize) | ⬜ | Must be from predefined [font size options](#htmlfontsize) |
| `fontFamily?` | `string` | ⬜ | A comma-separated list of font families. |
| `lineSpacing?` | [`LineSpacing`](#linespacing) | ⬜ | Must be from predefined [line spacing options](#linespacing) |
#### LatexLayoutSchema
Validates LaTeX layout configuration.
| Prop | Type | Required | Validation Rules |
| ------------- | ------------------------------------------------- | -------- | ----------------------------------------------------- |
| `advanced?` | [`LatexAdvancedSchema`](#latexadvancedschema) | ⬜ | See [advanced schema](#latexadvancedschema) |
| `engine` | `'latex'` | ✅ | Must be "latex" |
| `page?` | [`LatexPageSchema`](#latexpageschema) | ⬜ | See [page schema](#latexpageschema) |
| `sections?` | [`SectionsSchema`](#sectionsschema) | ⬜ | See [sections schema](#sectionsschema) |
| `template?` | [`LatexTemplate`](#latextemplate) | ⬜ | Must be from predefined [template options](#template) |
| `typography?` | [`LatexTypographySchema`](#latextypographyschema) | ⬜ | See [typography schema](#latextypographyschema) |
##### LatexAdvancedSchema
Validates advanced LaTeX configuration options.
| Prop | Type | Required | Validation Rules |
| ------------ | ------------------------------------ | -------- | -------------------------------------------------------------------- |
| `fontspec?` | `{ numbers?: LatexFontspecNumbers }` | ⬜ | Must be from predefined [fontspec numbers options](#fontspecnumbers) |
| `showIcons?` | `boolean` | ⬜ | true/false |
| `showUrls?` | `boolean` | ⬜ | true/false |
##### LatexPageSchema
Validates page-level settings for document presentation.
| Prop | Type | Required | Validation Rules |
| ------------------ | --------------------------------- | -------- | -------------------------------------------------------- |
| `margins?` | [`MarginsSchema`](#marginsschema) | ⬜ | See [margins schema](#marginsschema) |
| `paperSize?` | [`PaperSize`](#papersize) | ⬜ | Must be from predefined [paper size options](#papersize) |
| `showPageNumbers?` | `boolean` | ⬜ | true/false |
##### LatexTypographySchema
Validates typography settings for document formatting.
| Prop | Type | Required | Validation Rules |
| -------------- | ----------------------------- | -------- | ------------------------------------------------------------ |
| `fontSize?` | `string` | ⬜ | Must be from predefined [font size options](#fontsize) |
| `fontFamily?` | `string` | ⬜ | A comma-separated list of font families. |
| `lineSpacing?` | [`LineSpacing`](#linespacing) | ⬜ | Must be from predefined [line spacing options](#linespacing) |
| `links?` | `{ underline?: boolean }` | ⬜ | true/false |
#### MarkdownLayoutSchema
Validates Markdown layout configuration.
| Prop | Type | Required | Validation Rules |
| ----------- | ----------------------------------- | -------- | -------------------------------------- |
| `engine` | `'markdown'` | ✅ | Must be "markdown" |
| `sections?` | [`SectionsSchema`](#sectionsschema) | ⬜ | See [sections schema](#sectionsschema) |
## Primitive Validation Schemas
### Email Schema
Validates email addresses with strict format requirements.
**Validation Rules:**
* Must be a valid email format
* Pattern: `^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\\-\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$`
* Examples: `hi@ppresume.com`, `first.last@company.org`, `test+tag@domain.co.uk`
### Phone Schema
Validates phone numbers with flexible format support.
**Validation Rules:**
* Pattern: `^[+]?[(]?[0-9\\s-]{1,15}[)]?[0-9\\s-]{1,15}$`
* May include country code, parentheses, spaces, and hyphens
* Examples: `555-123-4567`, `+44 20 7946 0958`, `(555) 123-4567`
### Summary Schema
Validates summary text with length constraints.
**Validation Rules:**
* Must be between 16 and 1024 characters
* Examples:
* "Experienced software engineer with 5+ years in full-stack development."
* "Creative designer passionate about user experience and modern design principles."
* "Dedicated project manager with proven track record of delivering complex projects on time and budget."
### URL Schema
Validates URLs with length constraints.
**Validation Rules:**
* Must be a valid URL format
* Maximum length of 256 characters
* Examples: `https://yamlresume.dev`, `https://ppresume.com`, `https://github.com/yamlresume/yamlresume`
### Keywords Schema
Validates keyword arrays with individual item constraints.
**Validation Rules:**
* Array of strings
* Each keyword must be between 1 and 32 characters
* Examples: `["Javascript", "React", "Typescript"]`, `["Design", "UI", "UX"]`
### Date Schema
Validates date strings with format requirements.
**Validation Rules:**
* Must be between 4 and 32 characters
* Must be parseable by `Date.parse()`
* Examples: `2025-01-01`, `Jul 2025`, `July 3, 2025`, `2025-02-02T00:00:03.123Z`
### Margin Size Schema
Validates margin size strings with unit requirements.
**Validation Rules:**
* Must be between 2 and 32 characters
* Pattern: `^\\d+(\\.\\d+)?(cm|pt|in)$`
* Must be a positive number followed by valid units: cm, pt, or in
* Examples: `2.5cm`, `1in`, `72pt`, `0.5cm`, `12pt`
## Enum Validation Schemas
### Country
A union type for all possible countries and regions in the world.
**Validation Rules:**
* Must be one of the predefined country options
* Examples: `United States`, `China`, `United Kingdom`, `Germany`
### Degree
A union type for all possible degrees.
**Validation Rules:**
* Must be one of: `Associate`, `Bachelor`, `Diploma`, `Doctor`, `High School`, `Master`, `Middle School`
### Fluency
A union type for all possible language fluency levels.
**Validation Rules:**
* Must be one of:
* `Elementary Proficiency`
* `Full Professional Proficiency`
* `Limited Working Proficiency`
* `Minimum Professional Proficiency`
* `Native or Bilingual Proficiency`
### Language
A union type for all supported languages.
**Validation Rules:**
* Must be one of the predefined language options
* Examples: `English`, `Chinese`, `Spanish`, `French`, `German`
### Level
A union type for all possible skill proficiency levels.
**Validation Rules:**
* Must be one of: `Advanced`, `Beginner`, `Expert`, `Intermediate`, `Master`, `Novice`
### Network
A union type for all possible social network options.
**Validation Rules:**
* Must be one of the predefined network options
* Examples: `GitHub`, `LinkedIn`, `Twitter`, `Facebook`, `Instagram`
### HtmlFontSize
A union type for all possible HTML font size options.
**Validation Rules:**
* Must be one of: `10px`, `11px`, `12px`, `13px`, `14px`, `15px`, `16px`, `17px`, `18px`, `19px`, `20px`, `21px`, `22px`, `23px`, `24px`
* HTML engine supports font sizes from 10px to 24px
* `16px` is the default font size
### HtmlTemplate
A union type for all possible HTML template options.
**Validation Rules:**
* Must be one of: `calm`
* See also: [templates](/docs/layouts/html/templates)
### LatexTemplate
A union type for all possible LaTeX template options.
**Validation Rules:**
* Must be one of: `moderncv-banking`, `moderncv-casual`, `moderncv-classic`
* See also: [templates](/docs/layouts/latex/templates)
### PaperSize
A union type for all possible LaTeX paper size options.
**Validation Rules:**
* Must be one of: `a4`, `letter`
### LatexFontSize
A union type for all possible LaTeX font size options.
**Validation Rules:**
* Must be one of: `10pt`, `11pt`, `12pt`
* `10pt` is the default font size
### LatexFontspecNumbers
A union type for all possible latex fontspec numbers options.
**Validation Rules:**
* Must be one of:
* `Auto` - allowing the style to be automatically determined based on the
selected `LocaleLanguage` (default)
* `Lining` - standard lining figures (default for CJK languages)
* `OldStyle` - old style figures with varying heights (default for Latin
languages)
### LineSpacing
A union type for all possible line spacing options.
**Validation Rules:**
* Must be one of:
* `tight` - Compact spacing for fitting more content
* `snug` - Slightly more space than tight
* `normal` - Balanced readability (default)
* `relaxed` - More breathing room between lines
* `loose` - Very spacious layout
### LocaleLanguage
A union type for all possible locale languages.
**Validation Rules:**
* Must be one of: `en`, `es`, `zh-hans`, `zh-hant-hk`, `zh-hant-tw`
* See also: [multi-languages](/docs/locale)
# HTML Engine
URL: (/en/docs/layouts/html)
The HTML engine generates clean, web-ready HTML versions of your resume. This is
particularly useful for embedding your resume on websites, sharing it online, or
creating a web-based portfolio.
## Configuration
To use the HTML engine, specify `engine: html` in your layout configuration.
```yaml
layouts:
- engine: html
template: calm
# ... other options
```
## Sections
The `sections` option allows you to customize the section titles and their
order. For more information, see the [sections documentation](./sections).
```yml lineNumbers
layouts:
- engine: html
sections:
aliases:
work: "Professional Experience"
education: "Education"
skills: "Skills"
order:
- basics
- work
- education
```
## Templates
The `template` option allows you to choose from a variety of templates. Each
template has a unique design and layout. You can find a list of available
templates in the [templates documentation](./html/templates).
```yml lineNumbers
layouts:
- engine: html
template: calm
```
## Typography
The `typography` option allows you to customize font styles used in your resume.
### Font Size
The `fontSize` option allows you to set the base font size for the document. The
HTML engine supports font sizes from `14px` to `20px`.
### Font Family
The `fontFamily` option allows you to specify a prioritized list of font family names
and/or generic family names. This works exactly like the CSS `font-family` property.
### Line Spacing
The `lineSpacing` option allows you to adjust the line spacing (leading) of the document.
YAMLResume uses semantic values that map to engine-specific implementations:
| Value | Description |
| --------- | ---------------------------------------- |
| `tight` | Compact spacing for fitting more content |
| `snug` | Slightly more space than tight |
| `normal` | Balanced readability (default) |
| `relaxed` | More breathing room between lines |
| `loose` | Very spacious layout |
```yaml
layouts:
- engine: html
typography:
fontSize: 16px
fontFamily: "Merriweather, serif"
lineSpacing: relaxed
```
## Advanced
The `advanced` option allows you to configure advanced settings for the HTML
engine.
```yml lineNumbers
layouts:
- engine: html
advanced:
showIcons: true
# Custom title for the HTML document.
title: "My Custom Resume Title"
# Custom footer for the HTML document.
footer: "Generated by YAMLResume"
# Meta description for the HTML document.
description: "A brief description of the resume for SEO."
# Meta keywords for the HTML document.
keywords: "resume, cv, yamlresume"
```
# LaTeX Engine
URL: (/en/docs/layouts/latex)
The LaTeX engine is the core engine of YAMLResume, designed to produce high-quality, professional-looking PDF resumes using LaTeX templates.
## Configuration
To use the LaTeX engine, specify `engine: latex` in your layout configuration.
```yaml
layouts:
- engine: latex
template: moderncv-banking
# ... other options
```
## Page
The `page` option allows you to customize the page settings, such as the paper
size, margins and whether to show page numbers.
```yml lineNumbers
layouts:
- engine: latex
page:
showPageNumbers: true
# a4 or letter
paperSize: a4
margins:
top: 2.5cm
left: 1.5cm
right: 1.5cm
bottom: 2.5cm
```
## Sections
The `sections` option allows you to customize the section titles and their
order. For more information, see the [sections documentation](./sections).
```yml lineNumbers
layouts:
- engine: latex
sections:
aliases:
work: "Professional Experience"
education: "Education"
skills: "Skills"
order:
- basics
- work
- education
```
## Templates
The `template` option allows you to choose from a variety of templates. Each
template has a unique design and layout. You can find a list of available
templates in the [templates documentation](./latex/templates).
```yml lineNumbers
layouts:
- engine: latex
template: moderncv-banking
```
## Typography
The `typography` option allows you to customize font styles used in your resume.
### Font Size
The `fontSize` option allows you to set the base font size for the document. The
LaTeX engine only supports `10pt`, `11pt`, and `12pt`.
### Font Family
The `fontFamily` option allows you to specify a prioritized list of font family names.
This works similarly to the CSS `font-family` property.
### Line Spacing
The `lineSpacing` option allows you to adjust the line spacing (leading) of the document.
YAMLResume uses semantic values that map to LaTeX's `\setstretch{}` command:
| Value | Description |
| --------- | ---------------------------------------- |
| `tight` | Compact spacing for fitting more content |
| `snug` | Slightly more space than tight |
| `normal` | Balanced readability (default) |
| `relaxed` | More breathing room between lines |
| `loose` | Very spacious layout |
```yaml
layouts:
- engine: latex
typography:
fontSize: 11pt
fontFamily: "Merriweather, serif"
lineSpacing: relaxed
```
## Advanced
The `advanced` option allows you to configure advanced settings for the LaTeX
engine.
```yml lineNumbers
layouts:
- engine: latex
advanced:
showIcons: true
fontspec:
numbers: Lining
```
# Markdown Engine
URL: (/en/docs/layouts/markdown)
The markdown engine generates a plain Markdown version of your resume. This is
particularly useful when you need to copy-paste your resume content into
applicant tracking systems (ATS) or other forms that don't support PDF upload.
## Configuration
To use the markdown engine, specify `engine: markdown` in your layout
configuration.
```yml
layouts:
- engine: markdown
```
The markdown output will be generated alongside your PDF (if you have a LaTeX
layout also configured) or as a standalone file.
Unlike the [LaTeX layout](./latex), the Markdown layout is a simple layout which
has no extra configurations except for the [section
aliases](/docs/layouts/sections/aliases) and [section
reorder](/docs/layouts/sections/reorder).
```yml lineNumbers title="resume.yml"
---
content:
# ...
locale:
language: en
layouts:
- engine: markdown
sections:
aliases:
work: Professional Experience
education: Academic Background
skills: Technical Skills
order:
- basics
- work
- education
- skills
```
The section `aliases` and `order` will be respected in the final markdown
output.
# Aliases
URL: (/en/docs/layouts/sections/aliases)
YAMLResume provides default titles for [all resume sections
except](#aliasable-sections) `location` and `profiles`, which are automatically
[translated](/docs/locale) based on the selected [locale
language](/docs/layouts#locale). However, you may want to customize these titles
to better suit your profile or industry. The `section aliases` feature allows
you to override the default section titles with your own custom names.
For example, you might prefer "Professional Experience" instead of "Work" for
`work` section, or "Technical Proficiencies" instead of "Skills" for `skills`
section.
## How to Use
You can define section aliases within the `layouts.[].sections` configuration of your
`resume.yml` file. Add a `sections` object to your layout, and inside it, an
`aliases` map.
The keys in the `aliases` map are the standard section IDs, and the values are
the custom titles you want to use.
## Example
Here's how you can change the titles for the `work`, `education`, and `skills`
sections:
```yml lineNumbers title="resume.yml"
---
content:
# ...
layouts:
- engine: latex
sections:
aliases:
work: Professional Experience
education: Academic Background
skills: Technical Skills
```
When you build your resume with this configuration, the generated PDF will use
"Professional Experience", "Academic Background", and "Technical Skills" as the
titles for these sections, overriding the default or locale-specific names.
If an alias is not provided for a section, YAMLResume will fall back to the
default title for the configured locale.
## Aliasable Sections
You can provide aliases for the following sections:
* `basics`
* `education`
* `work`
* `volunteer`
* `awards`
* `certificates`
* `publications`
* `skills`
* `languages`
* `interests`
* `references`
* `projects`
## Rules and Constraints
* An alias must be between 2 and 128 characters in length.
# Sections
URL: (/en/docs/layouts/sections)
YAMLResume provides flexible options to customize the sections of the resume.
You can change the title of any section and reorder the sections to best fit
your professional profile. These customizations are handled within the
`layouts.[].sections` configuration in your `resume.yml` file.
```yml lineNumbers title="resume.yml"
---
content:
# ...
layouts:
- engine: latex
sections:
aliases:
work: "Professional Experience"
education: "Academic Background"
skills: "Technical Skills"
order:
- work
- education
- awards
- volunteer
```
## Learn More
# Reorder
URL: (/en/docs/layouts/sections/reorder)
By default, YAMLResume arranges sections in a standard order. However, you can
easily change this by providing a custom `order` list. This allows you to
highlight your most important information first.
## How to Use
For example, if you want to place your "Skills" and "Projects" sections before
your "Work" experience, you can define the order like this:
```yml lineNumbers title="resume.yml"
---
content:
# ...
layouts:
- engine: latex
sections:
order:
- skills
- projects
- work
```
Any sections included in the `order` list will appear first, in the sequence
you've specified. Sections not included in the list will be appended after,
following their default order.
## Examples
### Prioritize Work Experience
```yml lineNumbers
layouts:
- engine: latex
sections:
order:
- work
- education
```
Result: work experience appears first, followed by education, then all other
sections in default order.
### Highlight Skills and Languages
```yml lineNumbers
layouts:
- engine: latex
sections:
order:
- skills
- languages
- work
```
Result: skills and languages appear prominently at the top, followed by work
experience, then remaining sections.
### Academic Focus
```yml lineNumbers
layouts:
- engine: latex
sections:
order:
- education
- publications
- awards
- certificates
```
Result: academic sections appear first, followed by other sections in default
order.
## Default Section Order
When no custom order is specified, sections are rendered in this default order:
1. `basics` (by default rendered to the top of the resume as a summary section)
2. `education`
3. `work`
4. `languages`
5. `skills`
6. `awards`
7. `certificates`
8. `publications`
9. `references`
10. `projects`
11. `interests`
12. `volunteer`
## Implementation Details
* **Priority**: Sections specified in `order` appear first in the specified
sequence
* **Fallback**: Remaining sections follow in the default order
* **Deduplication**: Duplicate sections in the order array are deduplicated
(first occurrence kept)
* **Empty Sections**: Sections with no content are automatically filtered out
* **Flexibility**: Users can specify any subset of orderable sections
## Orderable Sections
The following sections can be reordered:
* `basics`
* `education`
* `work`
* `volunteer`
* `awards`
* `certificates`
* `publications`
* `skills`
* `languages`
* `interests`
* `references`
* `projects`
# Calm
URL: (/en/docs/layouts/html/templates/calm)
## Implementation
Calm is a clean and modern HTML template inspired by the moderncv LaTeX
template. It features a minimalist design with clear section separation and an
elegant layout optimized for web viewing.
Under the hood, the template uses:
* **CSS Reset**: A custom reset stylesheet for consistent rendering across
browsers
* **Typography**: Customizable font sizes ranging from 14px to 20px
* **Responsive Design**: Clean layout that adapts to different screen sizes
* **Semantic HTML**: Proper HTML5 structure for better accessibility and SEO
## Configuration
```yml lineNumbers title="resume.yml"
content:
# ...
layouts:
- engine: html
template: calm # [!code highlight]
typography:
fontSize: 16px
```
## Features
* **Clean Design**: Minimalist layout focused on content readability
* **Modern Typography**: Professional fonts with customizable sizes
* **Web-Ready**: Can be embedded directly in websites or shared via URL
* **Print-Friendly**: Optimized for printing to PDF from web browsers
* **Customizable Sections**: Flexible section ordering and naming
## Preview
The Calm template provides a professional appearance suitable for various
industries and experience levels. Its clean design ensures your content takes
center stage while maintaining visual appeal.
# Templates
URL: (/en/docs/layouts/html/templates)
YAMLResume provides HTML templates out of the box, you can list all templates
with `yamlresume templates list` command.
```console
$ yamlresume templates list
| layouts.[].template | Engine | Template Name | Description |
| ------------------- | ------ | ---------------- | ------------------------------------------------------------------- |
| jake | latex | Jake's Resume | A simple, straight-forward resume template based on Jake's Resume |
| moderncv-banking | latex | ModernCV Banking | ModernCV template with banking style |
| moderncv-casual | latex | ModernCV Casual | ModernCV template with casual style |
| moderncv-classic | latex | ModernCV Classic | ModernCV template with classic style |
| calm | html | Calm | Clean and minimalist design suitable for all professionals. |
| vscode | html | VS Code | Dark theme inspired by Visual Studio Code, tailored for developers. |
```
By default, YAMLResume uses [calm](./templates/calm) template for HTML output.
You can change the template by setting `layouts.[].template` in your YAML
resume.
```yml lineNumbers title="resume.yml"
content:
# ...
layouts:
- engine: html
# ...
template: calm # [!code highlight]
# ...
```
Check out the following templates for more details:
# VS Code
URL: (/en/docs/layouts/html/templates/vscode)
## Implementation
VS Code is a dark theme inspired by the "Dark+" color scheme of Visual Studio
Code. It is specifically tailored for developers, software engineers, and
technical professionals who want their resume to reflect their coding
environment.
The template adopts a "Resume as Code" aesthetic, treating different parts of
your profile as code elements:
* **Name**: Decorated as a `class` (e.g., `class JohnDoe {`)
* **Headline**: Rendered as a code comment (e.g., `// Full Stack Engineer`)
* **Sections**: Represented as function calls (e.g., `experience()`)
* **Skills/Languages**: Styled as object property keys (e.g.,
`JavaScript: Expert`)
Under the hood, the template uses:
* **Typography**: Uses a monospace font stack (`Consolas`, `Monaco`,
`Courier New`, `monospace`) for an authentic IDE feel
* **Syntax Highlighting**: Uses the official VS Code Dark+ color palette for
keywords, strings, classes, and functions
* **Layout Indentation**: Features vertical indentation guides (border-left) to
visually represent the scope of each section
## Configuration
```yml lineNumbers title="resume.yml"
content:
# ...
layouts:
- engine: html
template: vscode # [!code highlight]
typography:
fontSize: 16px
```
## Features
* **Developer-Centric**: Perfect for signalling technical proficiency and a
passion for coding
* **Dark Mode by Default**: High-contrast, easy-on-the-eyes dark theme
* **Code-Like Structure**: Unique visual metaphors that make technical resumes
stand out
* **Responsive**: Fully adapted for both desktop and mobile viewing with
consistent code semantics
* **Syntax Styling**: Uses familiar IDE colors to differentiate between roles,
dates, and descriptions
## Preview
The VS Code template provides a distinctive, modern look that immediately
connects with technical recruiters and hiring managers. It transforms your
career history into a clean, readable, and visually familiar "source file".
# Templates
URL: (/en/docs/layouts/latex/templates)
YAMLResume provides several templates out of the box, you can list all templates
with `yamlresume templates list` command.
```console
$ yamlresume templates list
| layouts.[].template | Engine | Template Name | Description |
| ------------------- | ------ | ---------------- | ------------------------------------------------------------------- |
| jake | latex | Jake's Resume | A simple, straight-forward resume template based on Jake's Resume |
| moderncv-banking | latex | ModernCV Banking | ModernCV template with banking style |
| moderncv-casual | latex | ModernCV Casual | ModernCV template with casual style |
| moderncv-classic | latex | ModernCV Classic | ModernCV template with classic style |
| calm | html | Calm | Clean and minimalist design suitable for all professionals. |
| vscode | html | VS Code | Dark theme inspired by Visual Studio Code, tailored for developers. |
```
By default, YAMLResume uses [moderncv-banking](./moderncv-banking) template. You
can change the template by setting `layouts.[].template` in your YAML resume.
```yml lineNumbers title="resume.yml"
content:
# ...
layouts:
- engine: latex
# ...
template: moderncv-classic # [!code highlight]
# ...
```
Check out the following templates for more details:
# Jake
URL: (/en/docs/layouts/latex/templates/jake)
## Implementation
Jake is a clean and professional resume template inspired by
[jakegut/resume](https://github.com/jakegut/resume)
Under the hood, we use the following code for the LaTeX preamble:
```latex lineNumbers
\documentclass[a4paper,10pt]{article}
\usepackage{changepage}
\usepackage[usenames,dvipsnames]{color}
\usepackage{enumitem}
\usepackage{fontawesome7}
\usepackage[hidelinks]{hyperref}
\usepackage{titlesec}
%% page layout/margins
\usepackage[top=2.5cm, bottom=2.5cm, left=1.5cm, right=1.5cm]{geometry}
%% Babel config for English language
\usepackage[english]{babel}
%% fontspec
\usepackage{fontspec}
\IfFontExistsTF{Linux Libertine}{
\setmainfont[Ligatures={TeX, Common}, Numbers=OldStyle]{Linux Libertine}
}{}
\IfFontExistsTF{Linux Libertine O}{
\setmainfont[Ligatures={TeX, Common}, Numbers=OldStyle]{Linux Libertine O}
}{}
%% CTeX
% CJK support, used to show CJK characters in the resume
%
% - fontset=none: disable builtin fontset but instead set the CJK font manually
% - heading=false: disable ctex heading
% - punct=kaiming: use kaiming punctuations styles for CJK
% - scheme=plain: use plain scheme, do not override \normalsize font size
% - space=auto: space settings for CJK characters
%
% ref:
% - http://ctan.mirrorcatalogs.com/language/chinese/ctex/ctex.pdf
\usepackage[UTF8, heading=false, punct=kaiming, scheme=plain, space=auto]{ctex}
\IfFontExistsTF{Noto Serif CJK SC}{
\setCJKmainfont{Noto Serif CJK SC}
}{}
\IfFontExistsTF{Noto Sans CJK SC}{
\setCJKsansfont{Noto Sans CJK SC}
}{}
%% line spacing
\usepackage{setspace}
\setstretch{1.125}
%% URL styling - use normal text instead of monospace
\urlstyle{same}
% global itemize spacing
\setlist[itemize]{nosep}
\setlength{\parindent}{0pt}
% Sections formatting
\titleformat{\section}{
\vspace{-4pt}\scshape\raggedright\large
}{}{0em}{}[\color{black}\titlerule \vspace{-5pt}]
% Custom commands
\newcommand{\resumeSubheading}[4]{
\begin{tabular*}{\textwidth}[t]{l@{\extracolsep{\fill}}r}
\textbf{#1} & #2 \\
\textit{#3} & \textit{#4} \\
\end{tabular*}
}
% Auto-underline all links
\let\oldhref\href
\renewcommand{\href}[2]{\oldhref{#1}{\underline{#2}}}
```
## Preview
# Moderncv Banking
URL: (/en/docs/layouts/latex/templates/moderncv-banking)
## Implementation
Moderncv banking is a modern and clean resume template based on
[xdanaux/moderncv](https://github.com/xdanaux/moderncv).
Under the hood, we use the following code for the LaTeX preamble:
```latex lineNumbers
\documentclass[a4paper, serif, 11pt]{moderncv}
%% moderncv
% style and color
\moderncvstyle{banking}
\moderncvcolor{black}
% needed by moderncv for showing icons
\usepackage{fontawesome5}
```
For moderncv banking style, we also adopt some special processings for
punctuations in order to make it work with CJK.
Technically speaking, English and Chinese have different colons. The English
colon is `:`, with Unicode `U+003A`, while the Chinese colon is `:`, with
Unicode `U+FF1A`. So when the resume language is Chinese, we would adopt the
Chinese colon for moderncv by overriding some magic LaTeX macros:
```latex lineNumbers
% renew moderncv command to adapt for CJK colon
\renewcommand*{\cvitem}[3][.25em]{%
\ifstrempty{#2}{}{\hintstyle{#2}<= &templateTranslations.punctuations.Colon =>}{#3}%
\par\addvspace{#1}}
\renewcommand*{\cvitemwithcomment}[4][.25em]{%
\savebox{\cvitemwithcommentmainbox}{\ifstrempty{#2}{}{\hintstyle{#2}<= &templateTranslations.punctuations.Colon =>}#3}%
\setlength{\cvitemwithcommentmainlength}{\widthof{\usebox{\cvitemwithcommentmainbox}}}%
\setlength{\cvitemwithcommentcommentlength}{\maincolumnwidth-\separatorcolumnwidth-\cvitemwithcommentmainlength}%
\begin{minipage}[t]{\cvitemwithcommentmainlength}\usebox{\cvitemwithcommentmainbox}\end{minipage}%
\hfill% fill of \separatorcolumnwidth
\begin{minipage}[t]{\cvitemwithcommentcommentlength}\raggedleft\small\itshape#4\end{minipage}%
\par\addvspace{#1}}
```
Check our blog
[post](https://blog.ppresume.com/posts/multi-languagues-support#colon) for more
details.
## Preview
# Moderncv Casual
URL: (/en/docs/layouts/latex/templates/moderncv-casual)
## Implementation
Moderncv casual is a modern and casual resume template based on
[xdanaux/moderncv](https://github.com/xdanaux/moderncv).
Under the hood, we use the following code for the LaTeX preamble:
```latex lineNumbers
\documentclass[a4paper, serif, 11pt]{moderncv}
%% moderncv
% style and color
\moderncvstyle{casual}
\moderncvcolor{black}
% needed by moderncv for showing icons
\usepackage{fontawesome5}
```
## Preview
# Moderncv Classic
URL: (/en/docs/layouts/latex/templates/moderncv-classic)
## Implementation
Moderncv classic is a modern and classic resume template based on
[xdanaux/moderncv](https://github.com/xdanaux/moderncv).
Under the hood, we use the following code for the LaTeX preamble:
```latex lineNumbers
\documentclass[a4paper, serif, 11pt]{moderncv}
%% moderncv
% style and color
\moderncvstyle{classic}
\moderncvcolor{black}
% needed by moderncv for showing icons
\usepackage{fontawesome5}
```
## Preview
# 1000 Stars
URL: (/en/blog/1000-stars)
YAMLResume just crossed a huge milestone: [1000 GitHub
stars](https://github.com/yamlresume/yamlresume/stargazers)—roughly half a year
after [open sourcing the project](/blog/introducing-yamlresume). Thank you for
every star, issue, discussion, contribution, and word-of-mouth share. It's a
small badge, but one that reflects real momentum for "resume as code", great
typesetting, and a developer-first workflow.
In June we celebrated [500 stars](/blog/500-stars), today we're back with 1000.
In between, YAMLResume matured significantly—especially across three releases
that many of you followed and adopted quickly:
[v0.5](/blog/yamlresume-compiler), [v0.6](/blog/section-customization), and
[v0.7](/blog/dev-mode). This post recaps the most important things we shipped,
then lays out a pragmatic roadmap for the next leg of the journey.
## Recap
### v0.5: The Resume Compiler you can trust
[v0.5](/blog/yamlresume-compiler) reframed YAMLResume not just as a formatter,
but as a compiler. That single conceptual shift—treating a resume YAML like
source code—unlocked correctness, consistency, and a brutally simple CLI
workflow.
Key ideas we shipped in v0.5:
* [Compiler architecture](/docs/compiler/architecture) and standard [data
model](/docs/compiler/schema): We formalized the resume structure so any
downstream renderer or template gets clean, predictable data. This reduced
footguns and improved template portability.
* Strong validation at two levels: [JSON Schema for editor
integration](/docs/compiler/schema/json) (auto-completion, hover docs, early
format checks) and [Zod for runtime safety and detailed
diagnostics](/docs/compiler/schema/zod). Editors feel smart; builds feel safe.
* New commands that shorten loops: [`yamlresume validate`](/docs/cli#validate)
for quick checks, and improved `build` that always validates first. With the
`--no-validate` opt-out, you stay in motion during big edits.
* [Clang-style error output](https://asciinema.org/a/728098): Clear errors tied
to filenames and lines save minutes for every iteration.
v0.5 made YAMLResume a tool you can trust—even under deadlines. If
you haven't yet, skim the examples and videos in the v0.5 blog; they show the
validator, schema hints, and diagnostics in action.
### v0.6: Section customization that matches how you tell your story
[v0.6](/blog/section-customization) focused on something deceptively simple but
incredibly powerful: expressing your narrative in your own voice and order,
without forking templates or hacking LaTeX.
What shipped:
* [Section aliases](/docs/layouts/sections/aliases): Rename canonical sections
(e.g., turn `work` into "Professional Experience," `education` into "Academic
Background") using `layout.sections.aliases`. This is especially useful for
tone, region/culture, or role targeting.
* [Section reordering](/docs/layouts/sections/reorder): Bring the most relevant
sections to the top with `layout.sections.order`. Put `skills` ahead of `work`,
or surface `projects` first for portfolio-heavy roles.
* Practical resilience: Improvements like tolerating invalid dates (falling back
to strings)
Why it matters:
* Hiring contexts differ. A PhD applying to a postdoc wants `education` first; a
staff engineer wants `work` first. v0.6 puts that choice one YAML edit away.
* Language and tone shape perception. Aliasing lets you match industry norms
("Experience," "Selected Publications," "Open Source") without template surgery.
In short: v0.6 made YAMLResume adaptable to your narrative, not the other way around.
### v0.7: Dev mode, because resumes deserve modern DX too
[v0.7](/blog/dev-mode) shipped a watch-mode development flow that feels like hot
reloading for resumes. Save your YAML, and the PDF rebuilds automatically. Small
changes stop costing big context switches.
What shipped:
* [`yamlresume dev`](/docs/cli#dev): A persistent process that watches your
resume file and rebuilds on save. Pair it with a side-by-side PDF viewer for
instant feedback.
* Robust watch internals: We adopted
[chokidar](https://github.com/paulmillr/chokidar) and added [coalescing
logic](https://github.com/yamlresume/coalescifn) so we never storm builds on
quick successive saves. Only one build at a time; the latest state always wins.
* Practical flags in dev: `--no-pdf` when you only need `.tex` for debugging,
`--no-validate` during large refactors when speed matters most.
Why it matters:
* You iterate faster and write better.
* The tool takes the tedium, you keep the flow. That's the whole point of DX.
If you're used to `npm run dev`, you'll feel right at home.
### YAMLResume with Homebrew
Last but not least, YAMLResume is now available on [Homebrew](https://brew.sh):
```sh
brew install yamlresume
```
We've published a new blog post to explain how to use it in detail: [YAMLResume
Lands in Homebrew](/blog/yamlresume-homebrew).
## Looking ahead
YAMLResume has come a long way from the tiny core engine of
[PPResume](https://ppresume.com) to a powerful resume compiler today. But we
still have lots of work to do to further enhance YAMLResume's capabilities and
make it the ideal tool for resume crafting.
### Multiple layouts
Right now YAMLResume only supports LaTeX output. We're going to extend the
compiler-to-renderer pipeline to support multiple layout engines and output
formats, starting with Markdown, then HTML.
Here are the features we're going to ship:
* [Markdown output](https://github.com/yamlresume/yamlresume/issues/110): A
clean, structured Markdown artifact that mirrors your resume's sections and
content. Useful for READMEs, job portals that accept Markdown, or handoffs to
other resume builders that accept markdown.
* [HTML output](https://github.com/yamlresume/yamlresume/issues/45): HTML is the
most popular output format for web resumes. The day YAMLResume supports HTML
output, you can host your resume anywhere, share it with anyone and open it on
any device.
One data model, many outputs. The compiler's validation remains the spine;
renderers become plugins. You pick the output(s) per audience: PDF for formal
submissions, HTML for web presence, Markdown for dev-facing channels.
### GitHub Actions
Some people adopted YAMLResume to [build and host their resumes on
GitHub](https://github.com/yamlresume/yamlresume/discussions/50), each of them
has their own workflow to generate PDF though.
We're going to ship an official GitHub YAMLResume action so that people can
validate, build, host and publish their resume, without having to write their
own workflow.
With a dedicated GitHub Action, updates become push-and-done.
### More languages
YAMLResume v0.7 already supports
[English](/docs/locale/english),
[Chinese](/docs/locale/chinese),
[Norwegian](/docs/locale/norwegian) and
[Spanish](/docs/locale/spanish), we are going to expand the
list to support more languages, making YAMLResume even more accessible to more
people around the world.
French, German, Japanese will be the first batch of languages we're going to
support in the next few months.
## Regards
1000 stars is not an end but another start. It came from your early adoption,
bug reports, language contributions, and thoughtful requests that shaped the
roadmap. Thank you for your support and contributions.
Here's how to keep momentum going:
* Try the latest CLI: `npm install -g yamlresume@latest` or `brew install
yamlresume` on macOS.
* Use dev mode for your next edit loop: `yamlresume dev my-resume.yml`.
* File issues and ideas: [https://github.com/yamlresume/yamlresume/issues](https://github.com/yamlresume/yamlresume/issues)
* Join discussions: [https://github.com/yamlresume/yamlresume/discussions](https://github.com/yamlresume/yamlresume/discussions)
We'll keep shipping pragmatic features that make resume writing calmer, faster,
and better-looking—while staying true to a single, validated source of truth.
Onward to the next milestone.
# 500 Stars
URL: (/en/blog/500-stars)
YAMLResume has achieved a significant milestone—500 stars on GitHub in just
about a month.
Here is the timeline:
* Mar 29: Decided to open source the engine behind
[PPResume](https://ppresume.com)
* Apr 2: Got a local [CLI
demo](https://x.com/xiaohanyu1988/status/1907427362259771748)
* Apr 10: Achieved [100% test
coverage](https://x.com/xiaohanyu1988/status/1910193021989368311)
* Apr 25: Got a [local npm
package](https://x.com/PPResumeX/status/1915789536610967741)
* May 8: Officially [open sourced
yamlresume](https://x.com/PPResumeX/status/1920294577497387493)
* May 17: Reached [200
stars](https://x.com/PPResumeX/status/1923635538046955662)
* May 23: Reached [300
stars](https://x.com/PPResumeX/status/1925834873723396131)
* May 30: Reached [400
stars](https://x.com/PPResumeX/status/1928347464693862635)
* Jun 11: Reached [500
stars](https://x.com/PPResumeX/status/1932716523401150840)
In the meantime, we received our first [pull
request](https://github.com/yamlresume/yamlresume/pull/2), merged [another pull
request](https://github.com/yamlresume/yamlresume/pull/19), and addressed our
first [bug report](https://github.com/yamlresume/yamlresume/issues/13). Special
thanks to [@jizusun](https://github.com/jizusun),
[@koo6666](https://github.com/koo6666), and
[@luyuhuang](https://github.com/luyuhuang) for your kind contributions!
## Why Open Source?
The first line of code for YAMLResume was actually written in 2023. It began as
the core typesetting engine for [PPResume](https://ppresume.com)—a
[LaTeX](https://www.latex-project.org/)-based, commercial, pixel-perfect resume
builder that has already helped thousands of people create beautifully typeset
resumes.
While I am not ready to open source PPResume itself, I do want to give users
full control over their resumes. In December 2024, PPResume enabled users to
download the generated LaTeX code for their resumes, ensuring our [no vendor
lock-in](https://blog.ppresume.com/posts/no-vendor-lock-in) promise and giving
users complete ownership of their data.
Moreover, the development of PPResume has greatly benefited from the open source
community. I have learned a lot from it myself, and now it is time to give back.
There are very few open source tools that use YAML as a resume format. [JSON
Resume](https://jsonresume.org) is a good try—as we all know, YAML is a superset
of JSON. However, JSON Resume does not provide an opinionated solution for
resume typesetting, layout, or output, making it far less practical. YAML, on
the other hand, is a [much better choice than
JSON](/docs/comparisons#json-resume) for resume formatting.
Open sourcing YAMLResume was clearly the right decision. Check out the download
trends for YAMLResume on NPM:
## What's Next?
Although YAMLResume has been used by a commercial resume builder for almost two
years, it is still in the early stages of development, and there is much more to
be done.
[Docker support](./yamlresume-docker) was one of the most requested features,
and I am pleased to say it is now [available](/docs/installation#docker-users).
Another important feature is data validation. Unlike PPResume, which provides a
carefully crafted and designed form for users to fill out and validate their
resume data, YAMLResume accepts unconstrained input—any `.yaml` file. We must
provide a way to [validate
input](https://github.com/yamlresume/yamlresume/issues/10) to ensure the program
handles all forms of input gracefully.
Feature-wise, we plan to support [section
aliases](https://github.com/yamlresume/yamlresume/issues/11) and [section
reordering](https://github.com/yamlresume/yamlresume/issues/12), making the PDF
output more adaptable and flexible.
For developer experience, we aim to [support a `dev`
sub-command](https://github.com/yamlresume/yamlresume/issues/25) so users can
modify resumes and see PDF changes in near real time.
Finally, some users have raised concerns about ATS compatibility. We are
committed to ensuring that the PDF output is [ATS
compatible](https://github.com/yamlresume/yamlresume/issues/23).
Stay tuned!
# YAMLResume v0.7: Dev Mode
URL: (/en/blog/dev-mode)
I am super excited to introduce [YAMLResume
v0.7](https://github.com/yamlresume/yamlresume/releases/tag/v0.7.0), a release
focused on enhancing your developer experience (DX). The centerpiece of this
update is the new [`dev` mode](/docs/cli#dev)—a feature that brings a
seamless, real-time development workflow to your resume creation process.
Gone are the days of the tedious edit-save-build cycle. With `dev` mode,
YAMLResume now watches your resume file for changes and automatically rebuilds
the PDF in near real-time. This seemingly simple addition transforms the
experience of crafting a resume into a fluid, interactive, and much more
enjoyable process.
## The Friction of the Old Workflow
Before v0.7, creating a resume with YAMLResume, while powerful, involved a
repetitive, manual process. You would:
1. Open your `my-resume.yml` file in your favorite text editor.
2. Make a change—perhaps updating a job description or adding a new skill.
3. Save the file.
4. Switch to your terminal.
5. Run the `yamlresume build my-resume.yml` command.
6. Wait for the command to finish.
7. Switch to your PDF viewer and refresh it to see the result.
8. Notice a small typo or a formatting issue.
9. Repeat the entire cycle.
This loop, illustrated below, introduced significant friction into the resume
creation process. Each change, no matter how small, required a context switch
and a manual command execution. This constant interruption breaks the creative
flow and slows down the process of refining your resume.
B{Save File};
B --> C[Switch to Terminal];
C --> D[Run 'yamlresume build'];
D --> E{Wait for Build};
E --> F[Switch to PDF Viewer];
F --> G{Refresh PDF};
G --> H{Review Changes};
H -- Correction Needed --> A;
H -- Looks Good --> I[Done];
subgraph Manual Build Cycle
A
B
C
D
E
F
G
H
end
`}
/>
In the world of modern software development, we've become accustomed to tools
that provide instant feedback. Web developers have
[hot-reloading](https://webpack.js.org/concepts/hot-module-replacement/), which
updates the browser automatically as they change the code. This tight feedback
loop is crucial for productivity and is a core tenet of a great developer
experience. We believed that crafting your resume as code should be no
different.
## The Solution: A Seamless Dev Mode
The `yamlresume dev` command eliminates the manual build cycle entirely. You
start it once, and it works quietly in the background, watching for your
changes and rebuilds the resume automatically.
To start the development mode, simply run:
```bash
yamlresume dev my-resume.yml
```
Now, you can open your `my-resume.yml` file and your PDF side-by-side. Every
time you save a change to your YAML file, YAMLResume will automatically detect
it and trigger a rebuild. Your PDF viewer will update moments later, showing you
the latest version of your resume.
The new workflow is significantly simpler and more efficient:
B[Edit my-resume.yml];
B --> C{Save File};
C --> D{PDF Automatically Rebuilt};
D --> E{Review Changes in PDF};
E -- Correction Needed --> B;
E -- Looks Good --> F[Stop Dev Mode];
subgraph Real-Time Workflow
B
C
D
E
end
`}
/>
This instant feedback loop allows you to iterate quickly, experiment with
different phrasing, and perfect the layout of your resume without the constant
context switching. It makes the process feel less like a chore and more like a
creative endeavor.
Here is a live demo of the `dev` mode in action:
You can watch the [youtube demo](https://youtu.be/xytlzedEQ_w) for more details.
## How It Works: A Look Under the Hood
While the `dev` mode is simple to use, there's some interesting technology
working behind the scenes to ensure it's both robust and efficient.
### The File Watcher: `chokidar`
At the heart of the `dev` mode is a file watcher. A naive approach would be to
use Node.js's built-in [`fs.watch`
API](https://nodejs.org/docs/latest/api/fs.html#fswatchfilename-options-listener).
However, `fs.watch` has known limitations and inconsistencies across different
operating systems. More importantly, it struggles with certain text editor
behaviors.
For example, editors like Vim use an "atomic save" strategy. When you save a
file, Vim doesn't directly write to the original file. Instead, it writes the
changes to a temporary file (the well-known `.swp` file), then renames that
temporary file to replace the original. This process can confuse basic file
watchers, which might miss the change entirely or trigger multiple events.
To provide a reliable experience, we adopted
**[chokidar](https://github.com/paulmillr/chokidar)**, a popular and
battle-tested file-watching library. Chokidar abstracts away the cross-platform
inconsistencies and is specifically designed to handle these tricky editor
behaviors gracefully. We've configured it to wait until a file has finished
writing before triggering a rebuild, ensuring that we don't try to build a
partially saved file.
### Preventing Build Storms: `coalescifn`
What happens if you save the file multiple times in quick succession? A simple
implementation might try to start a new build for every single save event. This
could lead to a "build storm," where multiple build processes are running
concurrently, consuming unnecessary system resources and potentially leading to
race conditions.
To solve this, we wrote and open sourced a clever little utility called
[coalescifn](https://github.com/yamlresume/coalescifn). This utility helps us
**coalesce** multiple calls into one. Here's how it works in the context of
`dev` mode:
1. When the first file change is detected, we immediately start a build.
2. If more changes are detected *while that build is running*, we don't start
new builds. We simply make a note that the file has changed again.
3. Once the initial build is complete, we check if any more changes occurred
during that time.
4. If there were subsequent changes, we run exactly *one* more build to ensure
the final PDF reflects the latest version of the file. If there were no new
changes, we do nothing and wait for the next save event.
This strategy ensures that there is only one build running at a time, and it
guarantees that the final build always uses the most recent version of your
resume file. It's an efficient approach that keeps the `dev` mode responsive and
light on system resources.
Here is a diagram illustrating the coalescing logic:
>Watcher: Save file (t=0s)
Watcher->>Coalesce: Trigger build
Coalesce->>Builder: Start Build #1
User->>Watcher: Save file (t=1s)
Watcher->>Coalesce: Trigger build (ignored, build in progress)
User->>Watcher: Save file (t=2s)
Watcher->>Coalesce: Trigger build (ignored, build in progress)
Builder-->>Coalesce: Finish Build #1 (t=3s)
Coalesce->>Builder: Start Build #2 (with latest file content)
Builder-->>Coalesce: Finish Build #2 (t=6s)
`}
/>
## Advanced Control
The `dev` command also comes with options to give you more control over the
build process, mirroring the flags available on the `build` command.
### Skipping PDF Generation
Sometimes, you might only want to inspect the intermediate LaTeX (`.tex`) file
that YAMLResume generates. This can be useful for debugging or for those who
want to manually tweak the LaTeX code. Generating the PDF is the most
time-consuming part of the build process. If you don't need it, you can tell
`dev` mode to skip it:
```bash
yamlresume dev my-resume.yml --no-pdf
```
With this flag, `dev` mode will still watch for changes and regenerate the
`.tex` file instantly, but it won't run the `xelatex` command. This makes the
rebuild process almost instantaneous.
### Disabling Validation
As of [v0.5](/blog/yamlresume-compiler), YAMLResume includes a powerful schema
validation step that catches potential errors in your resume during building.
While this is incredibly useful for ensuring correctness, there might be times
when you want to temporarily disable it. For example, you might be in the middle
of a large refactoring of your resume structure and don't want to be interrupted
by validation errors.
You can disable validation with the `--no-validate` flag:
```bash
yamlresume dev my-resume.yml --no-validate
```
This allows you to work more freely, with the understanding that you should
re-enable validation later to ensure your resume is well-formed.
## A New DX for "Resume as Code"
The introduction of `dev` mode is more than just a new feature; it's a step
towards fulfilling the true promise of "Resume as Code." It elevates the
experience from a static, command-line-driven process to a dynamic, interactive
one that feels much more like modern software development.
You might be used to `npm run build` and `npm run dev` in the past? YAMLResume
now has the same workflow built in.
By closing the feedback loop, we're making it easier and faster for you to
create beautiful, professional resumes. We believe this will encourage more
experimentation and allow you to focus on what truly matters: the content of
your resume and how it tells your professional story.
We invite you to update to YAMLResume v0.7 and experience the new `dev` mode for
yourself.
* **Install or update** to the latest version: `npm install -g yamlresume@latest`
* **Try it out** with your existing resume: `yamlresume dev my-resume.yml`
* **Join our community** on
[GitHub](https://github.com/yamlresume/yamlresume/discussions) to share your
feedback, ask questions, or contribute to the future of YAMLResume.
We're committed to building the best possible developer experience for resume
creation, and we can't wait to hear what you think of this new release!
# How to Hide Icons in moderncv
URL: (/en/blog/hide-moderncv-icons)
When you build a PDF resume with [LaTeX](https://www.latex-project.org/), small
visual details carry a lot of weight. The
[`moderncv`](https://ctan.org/pkg/moderncv) class adds icons next to contact
fields (phone, email, homepage, and so on), which is great for a polished look,
but not everyone wants icons in their header. Some people prefer a cleaner, more
minimal style, or need to match a corporate template that forbids pictograms.
This post explains what `moderncv` is, which icon library it relies on, how to
hide its icons, and how the LaTeX `\renewcommand` macro makes it all possible.
## 1. What is moderncv?
[`moderncv`](https://ctan.org/pkg/moderncv) is a LaTeX document class designed
specifically for CVs and resumes. It provides a consistent, professional layout
and a set of high-level macros to format common resume elements: name, title,
contact details, section headings, and entries for work and education. Compared
to a raw LaTeX document, `moderncv` gives you a purpose-built layout system with
a few style variants (such as `banking`, `classic`, or `casual`, etc.)
A typical `moderncv` header might look like this:
```latex
\name{}{Andy Dufresne}
\title{Software Engineer}
\phone[mobile]{+1 555 123 456}
\email{jane@example.com}
\homepage{https://example.com}
```
The class takes these commands and renders them in a neat header. By default,
`moderncv` also shows icons alongside each item, which can make contact info
easier to scan.
## 2. What is the icons lib used by moderncv?
`moderncv` ships with icon support through the
[`fontawesome5`](https://ctan.org/pkg/fontawesome5) package.
[Font Awesome](https://fontawesome.com/) is a popular icon set, and
`fontawesome5` exposes it to LaTeX with commands like `\faEnvelope`,
`\faMobileAlt`, and `\faGlobe`. In `moderncv`, those icons are wired into
“symbol” macros such as `\emailsymbol` and `\homepagesymbol`. When you call
`\email{...}` or `\homepage{...}`, the class prepends the corresponding symbol
macro, which in turn uses a Font Awesome glyph.
Because the icons are routed through these symbol macros, you can replace or
remove them without changing the actual contact content. This design is
important: the content and the decoration are separate, so you can opt into a
cleaner style with a few overrides.
## 3. How to hide icons in moderncv
The cleanest way to remove icons is to redefine the symbol macros to empty
strings. In LaTeX, `\renewcommand` lets you replace an existing macro with new
behavior. If you set each `moderncv` symbol macro to nothing, the labels remain,
but the icons disappear.
Here is the minimal snippet you can place in the preamble, after loading
`moderncv`:
```latex
% disable icons
\renewcommand*{\addresssymbol}{}
\renewcommand*{\mobilephonesymbol}{}
\renewcommand*{\fixedphonesymbol}{}
\renewcommand*{\faxphonesymbol}{}
\renewcommand*{\emailsymbol}{}
\renewcommand*{\homepagesymbol}{}
```
This mirrors the approach used in [YAMLResume](https://yamlresume.dev/)’s
`moderncv` renderer. In YAMLResume [v0.10](/blog/v0.10), the LaTeX preamble
[optionally
inserts](https://github.com/yamlresume/yamlresume/commit/b53f73d9b4b04bf04b90236ef01da56062f8ca1f)
exactly these `\renewcommand*` lines when a layout option under `advanced`
config named `showIcons` is set to `false`. That means the PDF output can toggle
icons without touching resume content.
Here the moderncv resume without icons:
If you are using YAMLResume, you can control this behavior via layout settings
and let the renderer inject those overrides automatically. If you are writing
raw LaTeX, you can copy the snippet into your preamble. Either way, the end
result is the same: your header keeps the text but loses the pictograms.
### Why this works
`moderncv` defines a set of macros for each icon. For example, `\emailsymbol` is
used to display the email icon. When you redefine that macro to `{}`, LaTeX
still expands it, but there’s nothing to print. You are not removing the email
itself; you are only overriding the decoration that precedes it.
### Extra tip: hiding social icons
If you are manually adding icons in custom fields (for example, using
`\faGithub` or `\faTwitter` in a custom line), you can also remove them by
simply not calling those commands. In YAMLResume’s renderer, this is handled by
checking a `showIcons` flag before inserting the Font Awesome glyphs for social
profiles. The pattern is the same: keep the `\href` content, but omit the icon
prefix.
## 4. What is the \renewcommand macro?
LaTeX uses macros to define how commands behave. The `\newcommand` macro creates
a new command, while `\renewcommand` redefines an existing one. Think of it as
“override this command with a new implementation.”
The syntax is:
```latex
\renewcommand{\commandname}{replacement}
```
The starred version `\renewcommand*` behaves similarly, but it tells LaTeX not
to allow a paragraph break in the replacement text. For short symbol macros like
`\emailsymbol`, the star makes little practical difference, but it is common in
class files and templates.
In `moderncv`, the icon macros are already defined, so you must use
`\renewcommand` rather than `\newcommand`. If you try to redefine an existing
macro with `\newcommand`, LaTeX will throw an error. That is why the patch uses:
```latex
\renewcommand*{\emailsymbol}{}
```
This line says: “Replace the existing definition of `\emailsymbol` with an empty
string.” The rest of the class keeps working, because `\email{...}` still
expands correctly; it just doesn’t prepend the icon anymore.
## Putting it all together
To summarize:
* `moderncv` is a LaTeX class for CVs and resumes with structured macros and
nice defaults.
* It uses the `fontawesome5` package for icons, exposed through symbol macros
like `\emailsymbol` and `\homepagesymbol`.
* You can hide icons by redefining those symbol macros to empty strings with
`\renewcommand*`.
* `\renewcommand` is the LaTeX mechanism for overriding existing macros safely.
If you want a minimal, text-only header, the override approach is the most
robust. It’s also future-proof: if you later switch to a new `moderncv` style or
add new contact fields, you can keep the same pattern by redefining the
corresponding symbol macros. And if you are using a renderer like YAMLResume, a
simple flag can toggle the entire block for you. And by the way, this
`advanced.showIcons` works for both [HTML](/docs/layouts/html) and
[LaTeX](/docs/layouts/latex) engine.
# YAMLResume v0.9: HTML Output
URL: (/en/blog/html-output)
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
We're excited to announce the release of
[YAMLResume v0.9](https://github.com/yamlresume/yamlresume/releases/tag/v0.9.0),
introducing first-class support for [HTML output](/docs/layouts/html). Following
our [v0.8 release](/blog/markdown-output) that brought [Markdown
output](/docs/layouts/markdown), we're now taking another major step forward in
making your resume data truly versatile and web-native.
With v0.9, you can now compile your YAML resume directly into a standalone,
responsive HTML file—perfect for hosting on your personal website, GitHub Pages,
or any static hosting platform. No more converting PDFs or manually maintaining
separate web versions of your resume.
For now we only provide one template for HTML layout—the
[calm](/docs/layouts/html/templates/calm) template, which is inspired by the
moderncv LaTeX template. It features a minimalist design with clear section
separation and an elegant layout optimized for web viewing. Here is the preview:
A quick demo for how to use YAMLResume v0.9 to generate HTML resume:
[](https://asciinema.org/a/763505)
## Why HTML?
When we introduced the [multiple layouts architecture](/docs/layouts) in v0.8,
we envisioned a world where your single `resume.yml` could be rendered into any
format you need. We started with [LaTeX/PDF](/docs/layouts/latex) for
professional applications and [Markdown](/docs/layouts/markdown) for
interoperability and LLM workflows. Now, HTML completes the trinity of essential
resume formats.
HTML offers unique advantages:
**Web-Native**: HTML is the language of the web. Your resume becomes a first-class
citizen on the internet, not just a document you have to embed or convert.
**Responsive Design**: Unlike PDFs that require pinching and zooming on mobile
devices, HTML resumes adapt seamlessly to any screen size—from desktop monitors
to smartphones.
**SEO-Friendly**: Search engines can index your HTML resume, making your skills
and experience discoverable. This is impossible with PDF-only resumes.
**Interactive**: HTML enables clickable links, smooth scrolling, and other
interactive elements that enhance the user experience beyond static documents.
**Zero Dependencies**: The HTML output is a self-contained file with inline CSS.
Drop it anywhere—S3, Netlify, GitHub Pages—and it just works.
## Getting Started
If you have `yamlresume` installed (version 0.9.0 or higher), adding HTML output
to your resume is as simple as updating your layouts configuration.
### Step 1: Update Your Resume Configuration
Add the HTML layout to your `resume.yml`:
```yml lineNumbers
layouts:
- engine: latex
template: moderncv-banking
typography:
fontSize: 11pt
- engine: markdown
- engine: html #[! code highlight]
template: calm #[! code highlight]
typography: #[! code highlight]
fontSize: 16px #[! code highlight]
```
The HTML engine supports customizable [typography](/docs/layouts/html#typography)
with font sizes ranging from 14px to 20px. The default `calm` template is
inspired by the popular LaTeX `moderncv` package, providing a clean, professional
look.
### Step 2: Build Your Resume
Run the build command:
```console
$ 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 markdown file successfully: my-resume.md
✔ Generated resume html file successfully: my-resume.html
```
That's it! You now have three output files from a single source of truth.
## The Calm Template
The initial release includes the `calm` template, a carefully designed layout
that balances professionalism with readability. The template features:
* **Clean Typography**: Optimized font sizes and line heights for both screen and
print.
* **Responsive Layout**: Automatically adapts from wide desktop screens to narrow
mobile displays.
* **Semantic HTML**: Uses proper HTML5 semantic elements for better accessibility
and SEO.
* **Print-Friendly**: While designed for the web, the template includes print
styles so it looks great when saved as PDF from the browser.
The design philosophy of the `calm` template mirrors the aesthetic of the LaTeX
`moderncv` templates—modern, uncluttered, and focused on content.
## HTML Layout Features
### Typography Customization
The HTML engine currently supports customization of font size:
```yml lineNumbers
layouts:
- engine: html
template: calm
typography:
fontSize: 16px # Range: 14px to 20px
```
Font size adjustments affect the entire document proportionally, maintaining
visual hierarchy and readability. We chose a range of 14px to 20px based on web
typography best practices—ensuring legibility without sacrificing design.
### Self-Contained Output
The generated HTML file is completely self-contained. All CSS styles are inlined,
meaning you don't need to worry about external stylesheets, CDN links, or missing
dependencies. Upload the single `.html` file anywhere and it will render
perfectly.
### Standards-Compliant
The HTML output follows modern web standards:
* Valid HTML5 markup
* CSS for styling and responsive design
* UTF-8 encoding for international character support
* Semantic elements (``, ``) for better structure
## Use Cases
### Personal Website
Host your resume as a `/resume` or `/cv` page on your personal domain. Since the
HTML file is static, it loads instantly and requires no backend infrastructure.
```console
$ yamlresume build resume.yml
$ cp resume.html ~/my-website/public/cv/index.html
$ git add . && git commit -m "Update CV"
$ git push
```
Your updated resume is now live.
### GitHub Pages
Combine YAMLResume with GitHub Actions to automatically publish your resume to
GitHub Pages whenever you update your `resume.yml`:
```yaml
name: Deploy Resume
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install YAMLResume
run: npm install -g yamlresume
- name: Build Resume
run: yamlresume build --no-pdf -o public resume.yml
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./public
```
### Responsive Portfolio
Embed your resume directly into your portfolio. Since the HTML is
self-contained, you can even iframe it or extract the styles for deeper
integration.
### Quick Sharing
Email the HTML file or share it via Dropbox/Google Drive. Recipients can open it
in any browser without needing PDF readers or special software.
## Technical Architecture
The [HTML
renderer](https://github.com/yamlresume/yamlresume/blob/main/packages/core/src/renderer/html/renderer.ts)
is built with the same rigorous engineering standards as our LaTeX/Markdown
engine. Under the hood:
1. **Type-Safe Rendering**: The renderer is written in TypeScript with full type
safety through [Zod schemas](/docs/compiler/schema/zod).
2. **Template System**: Templates are modular and extensible. While we ship with
`calm` initially, the architecture supports multiple templates. Future
templates can be added easily.
3. **CSS Methodology**: We use a combination of CSS Reset (based on modern-normalize)
and scoped template styles to ensure consistent rendering across browsers.
4. **Escape Handling**: All content is [properly
HTML-escaped](https://github.com/yamlresume/yamlresume/blob/v0.9.1/packages/core/src/utils/string.ts#L34-L44)
to prevent injection vulnerabilities and ensure special characters render
correctly.
5. **Comprehensive Testing**: The HTML renderer includes over 1,000 lines of
[test
cases](https://github.com/yamlresume/yamlresume/blob/v0.9.1/packages/core/src/renderer/html/renderer.test.ts)
which achieves 100% test coverage and guarantees the renderer works as
expected.
## Comparison: LaTeX vs Markdown vs HTML
Let's see how the three engines compare:
| Feature | LaTeX (PDF) | Markdown | HTML |
| ----------------- | ---------------- | ------------------- | ----------- |
| **Use Case** | Job applications | AI/LLMs, content | Web hosting |
| **Formatting** | Pixel-perfect | Minimal | Responsive |
| **Portability** | Universal | Universal | Web-native |
| **Customization** | Extensive | Limited | Growing |
| **File Size** | \~50-200 KB | \~5-20 KB | \~20-50 KB |
| **Dependencies** | LaTeX toolchain | None | None |
| **Interactive** | No | No | Yes |
| **SEO** | No | When published | Yes |
| **Responsive** | No | Depends on renderer | Yes |
Each engine excels in its domain. The beauty of YAMLResume's architecture is that
you don't have to choose—generate all three from the same source file and use
each where it fits best.
## What's Next?
The v0.9 HTML engine has set a solid foundation, but we have ambitious plans for
future enhancements:
### More Templates
We'll be adding additional templates with different design aesthetics—minimalist,
creative, corporate, etc. Want to contribute a template? Check out our
[contribution guide](/docs/contributing).
### Extended Customization
Future releases will expand typography options to include font families, color
schemes, and spacing controls, giving you more control over the visual
presentation.
### Dark Mode
Built-in dark mode support using CSS variables and `prefers-color-scheme` media
queries.
### Accessibility Enhancements
While the current implementation uses semantic HTML, we plan to add comprehensive
ARIA labels and keyboard navigation support to make resumes accessible to all
users.
## Conclusion
YAMLResume v0.9 brings HTML layout support, completing the core output format
trilogy. Now, from a single `resume.yml` file, you can generate:
* A professional PDF via LaTeX for job applications
* A clean Markdown file for LLMs and content workflows
* A responsive HTML page for web hosting and online portfolios
This release reinforces our commitment to the "Resume as Code" philosophy: write
once, render anywhere. Your resume data remains the single source of truth, and
the outputs are just different views optimized for different contexts.
We invite you to upgrade to v0.9 and experience the flexibility of web-native
resumes:
```console
$ npm install -g yamlresume@latest
$ pnpm install -g yamlresume@latest
$ yarn global add yamlresume@latest
$ bun add -g yamlresume@latest
$ brew install yamlresume
```
Have feedback or ideas for new templates? Join the discussion on
[GitHub](https://github.com/yamlresume/yamlresume/discussions) or reach out on
[X/Twitter](https://x.com/xiaohanyu1988). We can't wait to see how you use HTML
layouts in your workflow!
# Introducing YAMLResume
URL: (/en/blog/introducing-yamlresume)
import { Tab, Tabs } from 'fumadocs-ui/components/tabs';
Every developer needs a resume unless you are a world-famous professional.
Writing a resume may not be hard, but it is definitely not fun and tedious. Many
spend days crafting their resumes, chasing after a 100% typo-free, grammar
checked resumes with professional layout and typesetting.
[YAMLResume](https://yamlresume.dev) allows you to create and version control
your resumes using [YAML](https://yaml.org/) and generate professional looking
PDFs with beautiful typesetting in a breeze.
It started as the core typesetting engine for [PPResume](https://ppresume.com)—a
[LaTeX](https://www.latex-project.org/) based, commercial, pixel perfect resume
builder—which already helps thousands of people create beautifully typeset
resumes. Without too much hesitation, we decided to open source it so that
people can always have the right to say [no to vendor
lock-in](https://blog.ppresume.com/posts/no-vendor-lock-in).
## Quick Start
YAMLResume provides a [CLI tool](https://www.npmjs.com/package/yamlresume),
besides, it has a mandatory dependency on a typesetting engine in order to
generate PDF. In other words, you should [install a typesetting
engine](/docs/installation#typesetting-engine) first if you want to generate
PDF.
Installing `yamlresume` CLI is a breeze. You can install it using your favourite
Node.js package manager:
<>
```console
npm install -g yamlresume
```
```console
pnpm add -g yamlresume
```
```console
yarn global add yamlresume
```
```console
bun add -g yamlresume
```
>
Verify `yamlresume` is installed successfully:
```console
$ 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 build a resume to LaTeX and PDF
languages i18n and l10n support
templates manage resume templates
help [command] display help for command
```
We also recommend that you install [Linux
Libertine](http://yamlresume.dev/docs/installation#linux-libertine) font in
order to get the best looking PDFs.
Last but not least, if you want to create a CJK resume, we also recommend that
you install [Google Noto fonts](https://fonts.google.com/noto/) for [best
unicode coverage](https://github.com/ppresume/community/issues/63).
### Create a New Resume
You can create a new resume with a one-liner:
```console
$ yamlresume new my-resume.yml
✔ Created my-resume.yml successfully.
```
Under the hood `yamlresume new` would clone a sample resume from
[here](https://github.com/yamlresume/yamlresume/blob/main/packages/cli/resources/resume.yml).
Then you can get a PDF with a one-liner again:
```console
$ yamlresume build my-resume.yml
◐ Generating resume PDF with command: xelatex -halt-on-error my-resume.tex...
✔ Generated resume PDF successfully.
```
You are done! Check out the generated resume PDF:
You can check [PPResume Gallery](https://ppresume.com/gallery) for more examples
powered by YAMLResume as the typesetting engine.
### Troubleshooting
YAMLResume CLI provides a verbose flag `-v`/`--verbose` to show more detailed
logging information. If you have trouble building a resume, you can try to run
the commands again with this verbose flag and paste the output into [github
issues](https://github.com/yamlresume/yamlresume/issues), I will take a look and
get back to you.
## How Does It Work?
Under the hood, YAMLResume works like a mini compiler, i.e, it takes an input,
parses it to an [AST](https://en.wikipedia.org/wiki/Abstract_syntax_tree) and
then generates an output.
The core design principle of YAMLResume is [separation of
concerns](https://en.wikipedia.org/wiki/Separation_of_concerns). One of the most
famous examples that follows this principle is HTML & CSS, which are the
foundation of the modern web—HTML is used to organize the content in a webpage,
CSS is used to define the content presentation style.
Following the core principle, YAMLResume is designed based on the following
requirements:
* the resume content should be written in plain text, which is version control
friendly
* the plain text should use a fully structured format, which gives us more
control and flexibility
* YAML is better than JSON because it is more human-readable and human-writable
* the YAML plain text is then rendered into a PDF with a pluggable typesetting
engine
* an opinionated layout should be provided out of the box, while still allowing
people to adjust options accordingly like font sizes, page margins, etc.
## Why YAML?
[JSON Resume](https://jsonresume.org/) is another project that allows people to
create resumes in a structured format. However, most developers would agree that
YAML is better than JSON with regard to human readability and writability. For
example, it is quite inconvenient to represent multi-line strings in JSON, while
YAML has native support for it.
Compare a resume snippet in JSON and YAML:
```json
{
"content": {
"basics": {
"name": "Andy Dufresne",
"headline": "Headed for the Pacific",
"phone": "(213) 555-9876",
"email": "hi@ppresume.com",
"url": "https://ppresume.com/gallery",
"summary": "- Computer Science major with strong foundation in data structures, algorithms, and software development\n- Pixel perfect full stack web developer, specialised in creating high-quality, visually appealing websites\n- Experiened in databases (SQL, NoSQL), familiar with server-side technologies (Node.js, Express, etc.)\n- Team player, with detail-oriented mindset and a keen eye for design and user experiences"
}
}
}
```
```yml lineNumbers
content:
basics:
name: Andy Dufresne
headline: Headed for the Pacific
phone: "(213) 555-9876"
email: hi@ppresume.com
url: https://ppresume.com/gallery
summary: |
- Computer Science major with strong foundation in data structures, algorithms, and software development
- Pixel perfect full stack web developer, specialised in creating high-quality, visually appealing websites
- Experiened in databases (SQL, NoSQL), familiar with server-side technologies (Node.js, Express, etc.)
- Team player, with detail-oriented mindset and a keen eye for design and user experiences
```
Which one is more readable and writable? The answer is obvious.
JSON Resume has no concern about the layout of the resume. In the real world,
you can't just send a JSON file to recruiters right? The structured resume
format needs to be converted to a human-readable document format like docx, PDF,
etc. YAMLResume offers an opinionated layout configuration, and guarantees
pixel perfect PDF output.
At the time of writing, YAMLResume's opinionated layout supports:
* locale languages
* English
* Simplified Chinese
* Traditional Chinese
* Spanish
* margins
* top
* left
* right
* bottom
* page numbers
* template
* typography
* font size
Here is a sample code snippet for layout configuration in YAMLResume:
```yml lineNumbers
layout:
locale:
language: en
margins:
top: 2.5cm
left: 1.5cm
right: 1.5cm
bottom: 2.5cm
page:
showPageNumbers: true
template: moderncv-banking
typography:
fontSize: 11pt
```
## Why Not Markdown?
[Markdown](https://en.wikipedia.org/wiki/Markdown) is a another popular choice
for writing resumes, there are also some resume builders that adopt markdown as
the main input format. However, markdown is a general-purpose markup language
for creating formatted text, while resumes only use a very limited set of
markdown features.
For example, the following markdown syntax are very unlikely to be used in a
resume:
* blockquote
* code block
* horizontal rules
* images
* tables
* html markup
* etc.
Second, markdown is far too flexible, often giving users more freedom than they
need to create a resume. It would be pretty hard to reliably parse a generic
markdown document as a resume.
Third, features like templates switching, precise layout control (like `\hfill`
and `\hspace` in LaTeX) is very hard to implement in markdown.
In conclusion, using a fully structured format such as YAML/JSON gives us more
control and reliability over formatting and layout for resumes.
## Why still LaTeX?
[LaTeX](https://www.latex-project.org/) is a very mature and stable typesetting
engine that can produce extremely high-quality PDFs. However, many LaTeX users,
even LaTeX enthusiasts, would agree that the LaTeX language is somewhat
outdated—its error messages are often quite confusing, and the reliance on
global variables often leads to conflicts between packages, the compilation
speed is slow for large documents and often quite complicated, and it produces
ugly intermediate files (`.aux`, `.log`, etc.).
Some suggest to replace LaTeX with [typst](https://github.com/typst/typst),
which is a modern typesetting engine, with much better DX and much faster
compilation. However, after careful evaluation, I decided to stick with LaTeX.
The deal breaker here is that, YAMLResume is designed to support multi languages
with the best possible typesetting quality, however, typst [CJK
support](https://blog.ppresume.com/posts/on-typesetting-engines#cjk-3) is still
unstable and lacking.
Later on I may add a new
[renderer](https://github.com/yamlresume/yamlresume/blob/main/packages/core/src/renderer/base.ts)
backend to support typst.
## Rich Text Support
Although we have decided not to use markdown as the resume input format, we do
support a limited set of markdown rich text syntax for the `summary` field in
various sections.
For now, we support the following markdown syntax:
* `**bold**`
* `*italic*`
* `[link](https://www.google.com)`
* ordered list
* unordered list
* nested list
* paragraphs
For example, this is a sample snippet for the `content.basics.summary` field:
```yml lineNumbers
---
content:
basics:
# ...
summary: |
This is a sample YAML resume that support limited set of markdown rich text syntax (bold, italics, links, lists):
- Computer Science major with **strong foundation** in data structures, *algorithms*, and software development
1. Pixel perfect full stack web developer, specialised in creating high-quality, visually appealing websites
2. Experiened in databases (SQL, NoSQL), familiar with server-side technologies ([Node.js](https://nodejs.org/en), Express, etc.)
- Team player, with detail-oriented mindset and a keen eye for design and user experiences
```
And this is the generated PDF:
You can see that the rich text syntax is rendered correctly with bold, italics,
links, lists, pretty solid, right?
## Roadmap
Overall the project is still in a very early stage, we have a long way to go.
I've already planned a list of features to do in the near future:
1. more languages, Japanese, Germany, French, etc
2. more templates
3. [section alias](https://github.com/yamlresume/yamlresume/issues/11)
4. [section reordering](https://github.com/yamlresume/yamlresume/issues/12)
5. [schema validation](https://github.com/yamlresume/yamlresume/issues/10)
For any trouble, you can:
* raise an [issue](https://github.com/yamlresume/yamlresume/issues/)
* open a [discussion](https://github.com/yamlresume/yamlresume/discussions)
* leave a [message](https://discord.gg/9SyT7mVV4K)
Stay tuned!
# YAMLResume v0.8: Markdown Output
URL: (/en/blog/markdown-output)
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
We are thrilled to announce the release of
[YAMLResume v0.8](https://github.com/yamlresume/yamlresume/releases/tag/v0.8.0),
a significant milestone in our journey to make "Resume as Code" the standard for
developers and professionals worldwide.
Since its inception, YAMLResume has focused on one core mission: allowing you to
craft resumes in a clean, version-controlled YAML format and compile them into
beautifully typeset, pixel perfect PDFs. While PDF remains the gold standard for
job applications, we realized that our users often need their resume data in
other formats—for their personal websites, for pasting into applicant tracking
systems (ATS), or even for feeding into Large Language Models (LLMs) for
optimization.
With v0.8, we are introducing a powerful new architecture: [multiple
layouts](/docs/layouts), and with it, first-class support for [Markdown
output](/docs/layouts/markdown).
TL;DR, a quick demo:
[](https://asciinema.org/a/759578)
## YAMLResume with Layouts
In previous versions of YAMLResume, the compilation pipeline was linear and
singular. You provided a YAML file, and the engine spit out a PDF. If you wanted
a different [template](/docs/layouts/latex#templates), you changed the
`layout.template` field. If you wanted a different font size, you tweaked the
[typography](/docs/layouts/latex#typography) settings. But ultimately, the
destination was always a PDF file generated via the [LaTeX](/docs/layouts/latex)
engine.
This worked well, but it was limiting. What if you wanted to generate a PDF for
emailing recruiters, but also a plain text version for a legacy form? What if
you wanted a [Markdown](/docs/layouts/markdown) version to publish on your
[Hugo](https://gohugo.io/) or [Next.js](https://nextjs.org/) blog?
In v0.8, we've completely redesigned the [layouts
schema](/docs/compiler/schema/zod#layoutsschema) to support [multiple
layouts](/docs/layouts). Instead of a single set of output settings, you can now
define a list of layouts in your resume's YAML file. Each layout specifies an
`engine` (like `latex` or `markdown`) and its own specific configuration
options.
This means a single [`yamlresume build`](/docs/cli#build) command can now
produce multiple artifacts—a PDF, a Markdown file, and in the future, HTML or
docx files—simultaneously. This adheres to the "Source of Truth" principle: your
`resume.yml` remains the single source of truth, while the outputs are just
derived representations tailored for different delivery channels.
Here is how the new configuration looks in your YAML file:
```yml lineNumbers
# Multiple output layouts configuration
layouts:
- engine: latex
page:
margins:
top: 2.5cm
left: 1.5cm
right: 1.5cm
bottom: 2.5cm
showPageNumbers: true
template: moderncv-banking
typography:
fontSize: 11pt
- engine: markdown
```
As you can see, we have defined two layouts here. The first one uses the
[`latex`](/docs/layouts/latex) engine (our classic PDF generator) with specific template,
page margins and typography settings, etc. The second one uses the new
[`markdown`](/docs/layouts/markdown) engine. The beauty of this approach is that
you can add or remove layouts as needed without touching the actual content of
your resume.
## Markdown as the New Output
Why markdown? Markdown has become the lingua franca of the developer world. It
is lightweight, readable, and universally supported. By adding Markdown as an
output target, YAMLResume bridges the gap between a formal resume document and
the flexible, web-first world.
Let's see it in action. If you have `yamlresume` installed (version 0.8.0 or
higher), you can generate a new resume and build it with just two commands.
### Step 1: Create a New Resume
First, let's generate a boilerplate resume using the [CLI](/docs/cli):
```console
$ yamlresume new my-resume.yml
✔ Created my-resume.yml successfully.
```
This creates a `my-resume.yml` file with the default configuration, which now
includes both [LaTeX](/docs/layouts/latex) and
[Markdown](/docs/layouts/markdown) layouts by default.
Here is the content of a sample resume file `my-resume.yml`—you can ignore the
`content` and take a look for the last line to see the
`markdown` layout configuration:
```yml lineNumbers
---
# yaml-language-server: $schema=https://yamlresume.dev/schema.json
content:
basics:
name: Andy Dufresne
headline: Headed for the Pacific
phone: "(213) 555-9876"
email: hi@ppresume.com
url: https://ppresume.com/gallery
summary: |
- Computer Science major with strong foundation in data structures, algorithms, and software development
- Pixel perfect full stack web developer, specialised in creating high-quality, visually appealing websites
- Experiened in databases (SQL, NoSQL), familiar with server-side technologies (Node.js, Express, etc.)
- Team player, with detail-oriented mindset and a keen eye for design and user experiences
location:
address: 123 Main Street
city: Sacramento
region: California
country: United States
postalCode: "95814"
profiles:
- network: Line
url: https://line.com/PPResumeX
username: PPResumeX
- network: Twitter
url: https://twitter.com/PPResumeX
username: PPResumeX
education:
- institution: University of Southern California
url: https://www.cs.usc.edu/
degree: Bachelor
area: Computer Engineering and Computer Science
score: "3.8"
startDate: Sep 1, 2016
endDate: Jul 1, 2020
courses:
- Discrete Methods in Computer Science
- Programming Language Concepts
- Data Structures and Object-Oriented Design
- Operating Systems
- Computer Architecture
- Database Systems
- Computer Networking
- Introduction to the Theory of Computing
summary: |
- Developed proficiency in programming languages such as Java, C++, and Python
- Gained hands-on experience in software development through various projects and assignments
- Strong communication and teamwork skills acquired through group projects and presentations
work:
- name: PPResume
url: https://ppresume.com
startDate: Dec 1, 2022
endDate:
position: Senior Software Engineer
summary: |
- Developed and implemented efficient and scalable code, ensuring high-quality and maintainable web applications
- Collaborated with cross-functional teams to gather project requirements and translate them into technical solutions
- Conducted thorough testing and debugging to identify and resolve any issues or bugs in the software
- Actively participated in code reviews, providing valuable feedback to improve code quality and adherence to best practices
- Mentored and guided junior developers, fostering a collaborative and growth-oriented team environment
keywords:
- Scalability
- Growth
- Quality
- Mentorship
- name: PPResume
url: https://ppresume.com
startDate: Sep 1, 2020
endDate: Dec 1, 2022
position: Software Engineer
summary: |
- Created reusable React components to ensure code efficiency and maintainability
- Integrated with RESTful APIs to fetch and display dynamic data on the frontend
- Implemented client-side routing using React Router for smooth navigation between pages
- Actively participated in Agile development methodologies, attending daily stand-up meetings and sprint planning sessions
keywords:
- RESTful
- React
- Agile
languages:
- language: English
fluency: Native or Bilingual Proficiency
keywords:
- TOEFL 110
- IELTS 7.5
- language: Chinese
fluency: Elementary Proficiency
keywords: []
skills:
- name: Web Development
level: Expert
keywords:
- Python
- Ruby
- CSS
- React
- JavaScript
- name: DevOps
level: Intermediate
keywords:
- Python
- Kubernetes
- Docker
- Shell
- Ansible
- name: Design
level: Intermediate
keywords:
- Sketch
- Figma
- Photoshop
awards:
- title: Dean's List
awarder: University of Southern California
date: Oct 2016
summary: |
Awarded to students who achieve a high academic standing by maintaining a specified grade point average (GPA) during a semester.
certificates:
- name: AWS Certified Developer - Associate
url: https://aws.amazon.com/certification/
issuer: AWS
date: Mar 2021
publications:
- publisher: ACM Transactions on Interactive Intelligent Systems
url: https://dl.acm.org/journal/tiis
name: Enhancing Human-Computer Interaction through Augmented Reality
releaseDate: Dec 2017
summary: |
- Explores the potential of augmented reality (AR) in improving interaction between humans and computers
- Highlights benefits of AR in various areas such as gaming, education, healthcare, and design
- Discusses challenges and future directions of AR technology in enhancing user experience
references:
- name: Dr. Amanda Reynolds
phone: "(555) 123-4567"
relationship: Computer Science Professor
email: amanda.reynolds@usc.edu
summary: |
Andy Dufresne shows exceptional problem-solving skills and a solid understanding of programming concepts, he would bring immense value to any team or organization he becomes a part of.
projects:
- name: EduWeb
url: https://www.eduweb.xyz/
description: A web-based educational platform for interactive learning
startDate: Sep 2016
endDate: Dec 2016
summary: |
- Designed to enhance online learning experiences
- Facilitates students' engagement and collaboration through interactive features and user-friendly interface
- Offers a wide range of courses across various subjects
- Aims to improve the way students learn through the power of the web
keywords:
- Education
- Online Learning
- HCI
interests:
- name: Sports
keywords:
- Soccer
- Swimming
- Bicycling
- Hiking
- name: Music
keywords:
- Piano
- Guitar
volunteer:
- organization: USC Computer Science and Engineering Society
url: https://www.usccsesociety.org/
position: Tech Mentor
startDate: Sep 2015
endDate: Jul 2023
summary: |
- Volunteered as a Tech Mentor at USC Computer Science and Engineering Society
- Provided guidance and assistance to fellow students in their technical projects and coursework
- Assisted in organizing workshops, coding competitions, and networking events for the society members
- Contributed to fostering a collaborative and supportive environment within the student community
locale:
language: en
layouts:
- engine: latex
page:
margins:
top: 2.5cm
left: 1.5cm
right: 1.5cm
bottom: 2.5cm
showPageNumbers: true
template: moderncv-banking
typography:
fontSize: 11pt
- engine: markdown #[!code highlight]
```
### Step 2: Build the Resume
Now, run the build command:
```console lineNumbers
$ 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 markdown file successfully: my-resume.md
```
Notice the last line:
`✔ Generated resume markdown file successfully: my-resume.md`. The CLI has
automatically detected the [`markdown`](/docs/layouts/markdown) layout in your
YAML configuration and generated the corresponding `.md` file alongside the PDF.
### The Resulting Markdown
Let's look at the generated `my-resume.md`. The engine intelligently transforms
your structured YAML data into a clean, well-formatted Markdown document using
standard syntax headers, lists, and links.
```markdown lineNumbers
# Andy Dufresne
Headline: Headed for the Pacific
- Email: hi@ppresume.com
- Phone: (213) 555-9876
- URL: https://ppresume.com/gallery
Location: 123 Main Street, Sacramento, California, United States, 95814
Profiles:
- Line: [@PPResumeX](https://line.com/PPResumeX)
- Twitter: [@PPResumeX](https://twitter.com/PPResumeX)
## Basics
- Computer Science major with strong foundation in data structures, algorithms, and software development
- Pixel perfect full stack web developer, specialised in creating high-quality, visually appealing websites
- Experiened in databases (SQL, NoSQL), familiar with server-side technologies (Node.js, Express, etc.)
- Team player, with detail-oriented mindset and a keen eye for design and user experiences
## Education
### University of Southern California
Bachelor, Computer Engineering and Computer Science, Score: 3.8, Sep 2016–Jul 2020
URL: https://www.cs.usc.edu/
Courses: Discrete Methods in Computer Science, Programming Language Concepts, Data Structures and Object-Oriented Design, Operating Systems, Computer Architecture, Database Systems, Computer Networking, Introduction to the Theory of Computing
Summary:
- Developed proficiency in programming languages such as Java, C++, and Python
- Gained hands-on experience in software development through various projects and assignments
- Strong communication and teamwork skills acquired through group projects and presentations
## Work
### Senior Software Engineer
PPResume, Dec 2022–Present
URL: https://ppresume.com
Keywords: Scalability, Growth, Quality, Mentorship
Summary:
- Developed and implemented efficient and scalable code, ensuring high-quality and maintainable web applications
- Collaborated with cross-functional teams to gather project requirements and translate them into technical solutions
- Conducted thorough testing and debugging to identify and resolve any issues or bugs in the software
- Actively participated in code reviews, providing valuable feedback to improve code quality and adherence to best practices
- Mentored and guided junior developers, fostering a collaborative and growth-oriented team environment
### Software Engineer
PPResume, Sep 2020–Dec 2022
URL: https://ppresume.com
Keywords: RESTful, React, Agile
Summary:
- Created reusable React components to ensure code efficiency and maintainability
- Integrated with RESTful APIs to fetch and display dynamic data on the frontend
- Implemented client-side routing using React Router for smooth navigation between pages
- Actively participated in Agile development methodologies, attending daily stand-up meetings and sprint planning sessions
## Languages
- English: Native or Bilingual Proficiency, Keywords: TOEFL 110, IELTS 7.5
- Chinese: Elementary Proficiency
## Skills
- Web Development: Expert, Keywords: Python, Ruby, CSS, React, JavaScript
- DevOps: Intermediate, Keywords: Python, Kubernetes, Docker, Shell, Ansible
- Design: Intermediate, Keywords: Sketch, Figma, Photoshop
## Awards
### Dean's List
University of Southern California, Oct 2016
Summary:
Awarded to students who achieve a high academic standing by maintaining a specified grade point average (GPA) during a semester.
## Certificates
### AWS Certified Developer - Associate
AWS, Mar 2021
URL: https://aws.amazon.com/certification/
## Publications
### Enhancing Human-Computer Interaction through Augmented Reality
ACM Transactions on Interactive Intelligent Systems, Dec 2017
URL: https://dl.acm.org/journal/tiis
Summary:
- Explores the potential of augmented reality (AR) in improving interaction between humans and computers
- Highlights benefits of AR in various areas such as gaming, education, healthcare, and design
- Discusses challenges and future directions of AR technology in enhancing user experience
## References
### Dr. Amanda Reynolds
Computer Science Professor, amanda.reynolds@usc.edu, (555) 123-4567
Summary:
Andy Dufresne shows exceptional problem-solving skills and a solid understanding of programming concepts, he would bring immense value to any team or organization he becomes a part of.
## Projects
### EduWeb
A web-based educational platform for interactive learning, Sep 2016–Dec 2016
URL: https://www.eduweb.xyz/
Keywords: Education, Online Learning, HCI
Summary:
- Designed to enhance online learning experiences
- Facilitates students' engagement and collaboration through interactive features and user-friendly interface
- Offers a wide range of courses across various subjects
- Aims to improve the way students learn through the power of the web
## Interests
- Sports: Soccer, Swimming, Bicycling, Hiking
- Music: Piano, Guitar
## Volunteer
### USC Computer Science and Engineering Society
Tech Mentor, Sep 2015–Jul 2023
URL: https://www.usccsesociety.org/
Summary:
- Volunteered as a Tech Mentor at USC Computer Science and Engineering Society
- Provided guidance and assistance to fellow students in their technical projects and coursework
- Assisted in organizing workshops, coding competitions, and networking events for the society members
- Contributed to fostering a collaborative and supportive environment within the student community
```
## Benefits of Markdown
You might be wondering, "I already have a nice PDF, why do I need a Markdown
version?" The benefits of having a structured, plain-text representation of your
resume are immense, especially in the modern AI-driven world.
### 1. LLM Friendly
This is perhaps the most significant advantage today. We are living in the era
of Large Language Models (LLMs). Tools like ChatGPT, Claude, and Gemini are
incredibly good at analyzing text, but they might have a hard time with binary
PDF files or complex LaTeX source code.
By generating a clean Markdown version of your resume, you have the perfect
input for an LLM. You can copy-paste your `resume.md` into ChatGPT and ask it
to:
* "Tailor my resume for this Job Description..."
* "Critique my summary section and suggest improvements..."
* "Extract my key skills and format them for a cover letter..."
Because Markdown is semantically structured (headers, lists, bold text), LLMs
can "understand" the hierarchy and content of your resume much better than they
can with raw text or PDF conversions.
### 2. Interoperability and Web Publishing
Markdown is the native content format for the web. If you have a personal
portfolio or blog built with Next.js, Hugo, Jekyll, or Gatsby, you can drop your
`resume.md` directly into your content folder.
With the new Markdown output, you can automate your personal branding workflow:
1. Update your `resume.yml` with your latest job or project.
2. Run `yamlresume build`.
3. The generated `resume.pdf` goes to your download link.
4. The generated `resume.md` updates your "About Me" page on your website.
No more manual copying and pasting or maintaining two separate versions of your
resume.
### 3. Human Readability and Git Diffs
While YAML is readable, Markdown is even more so for long-form text. It serves
as a great intermediate format for reviewing your content without the "noise" of
YAML syntax or LaTeX commands.
Furthermore, because the output is deterministic plain text, you can track
changes easily in Git. If you change a job description, the diff in `resume.md`
will clearly show the text change, which is much friendlier for peer reviews
(e.g., in a GitHub Pull Request) than trying to diff a binary PDF.
### 4. Universal Portability
Markdown can be easily converted into almost any other document format using
tools like [Pandoc](https://pandoc.org/). Need a `.docx` file for a recruiter
who insists on Word? `pandoc resume.md -f gfm -o resume.docx`. Need an HTML
snippet? `pandoc resume.md -f gfm -o resume.html`. The Markdown output acts as
a versatile "pivot" format that unlocks compatibility with the entire document
ecosystem.
## Next Thing: HTML Layout
The introduction of the layout system and Markdown engine is just the beginning.
We are actively working on an [HTML layout
engine](https://github.com/yamlresume/yamlresume/issues/45).
Imagine running `yamlresume build` and getting a fully responsive,
SEO-optimized, standalone HTML file that looks just as good as your PDF but is
native to the browser. This will allow you to host your resume as a simple
static page on GitHub Pages, Vercel, or Netlify with zero overhead.
The HTML layout will support:
* Responsive design for mobile viewing (no more pinching and zooming PDFs on
phones).
* SEO metadata automatically generated from your resume content.
* Theming support via CSS variables.
* Interactive elements (e.g., clickable project links, collapsible sections).
We believe that your resume data belongs to you, and you should be able to
render it in whatever format best suits your needs—whether that's a
pixel-perfect PDF for print, a clean Markdown file for AI, or a responsive HTML
page for the web.
## Conclusion
YAMLResume v0.8 is a major step forward in flexibility. By decoupling the
content (YAML) from the presentation (layouts), we are empowering developers to
use their resume data in new and creative ways.
We invite you to upgrade to v0.8, add the `markdown` engine to your layouts, and
experience the freedom of having your resume available in the format you need,
when you need it.
Give it a try:
```console lineNumbers
$ npm install -g yamlresume@latest
$ pnpm install -g yamlresume@latest
$ yarn global add yamlresume@latest
$ bun add -g yamlresume@latest
$ brew install yamlresume
```
# YAMLResume v0.6: Section Customization
URL: (/en/blog/section-customization)
YAMLResume [v0.6](https://github.com/yamlresume/yamlresume/releases/tag/v0.6.0)
is here, and it brings two powerful features for customizing your resume's
structure: [section aliases](/docs/layouts/sections/aliases) and [section
reorder](/docs/layouts/sections/reorder). These features allow you to rename
section titles and control their sequence in the final PDF, giving you greater
flexibility to tailor your resume.
Let's dive into how they work.
## Section Aliases
The default section titles in YAMLResume (e.g., `education`, `work`) are
automatically [translated](/docs/locale)
based on your chosen [locale language](/docs/layouts#locale). However, you might
prefer a different title. For instance, you might want to change "Work" to
"Professional Experience" for the `work` section.
To define aliases, use the `layout.sections.aliases` map in your `resume.yml`.
```yml lineNumbers title="resume.yml"
---
content:
# ...
layout: # [!code focus]
sections: # [!code focus]
aliases: # [!code focus]
work: Professional Experience # [!code focus]
education: Academic Background # [!code focus]
skills: Technical Skills # [!code focus]
```
## Section Reordering
By default, sections are rendered in a [standard
order](/docs/layouts/sections/reorder#default-section-order). The
`layout.sections.order` feature lets you change this sequence to highlight your
most important information first.
For example, to place your "Skills" and "Projects" sections before your "Work"
experience, you can define the order like this:
```yml lineNumbers title="resume.yml"
---
content:
# ...
layout: #[!code focus]
sections: #[!code focus]
order: #[!code focus]
- skills #[!code focus]
- projects #[!code focus]
- work #[!code focus]
```
Sections in the `order` list will appear first, followed by the remaining
sections in their default order.
## Putting It All Together: A Complete Example
Let's create a one-page resume that uses both features. We will alias and
reorder some sections at the same time.
```yml lineNumbers title="resume.yml"
# yaml-language-server: $schema=https://yamlresume.dev/schema.json
---
layout:
sections: # [!code highlight]
aliases: # [!code highlight]
work: Professional Experience # [!code highlight]
education: Academic Background # [!code highlight]
skills: Technical Skills # [!code highlight]
order: # [!code highlight]
- basics # [!code highlight]
- work # [!code highlight]
- education # [!code highlight]
- skills # [!code highlight]
template: moderncv-banking
typography:
fontSize: 11pt
content:
basics:
name: Jane Doe
headline: Senior Software Engineer
email: jane.doe@example.com
phone: "555-123-4567"
summary: |
A passionate and experienced software engineer with a proven track record
of designing, developing, and deploying robust web applications. Skilled
in both front-end and back-end development, with a keen eye for detail and
a dedication to writing clean, efficient code.
education:
- institution: Tech University
area: Software Engineering
degree: Master
startDate: 2018-09-01
endDate: 2020-06-01
summary: Specialized in distributed systems and cloud computing.
- institution: State University
area: Computer Science
degree: Bachelor
startDate: 2014-09-01
endDate: 2018-06-01
summary: |
- Graduated with honors.
- Focused on algorithms, data structures, and distributed systems.
courses:
- Data Structures & Algorithms
- Operating Systems
- Computer Networks
- Database Systems
work:
- name: Tech Solutions Inc.
position: Senior Software Engineer
startDate: 2020-07-01
summary: |
- Led the development of a new microservices-based architecture, improving system scalability and reliability.
- Mentored junior engineers, providing guidance on best practices and code quality.
- Optimized application performance, reducing API response times by 30%.
- name: Innovate Corp.
position: Software Engineer
startDate: 2018-07-01
endDate: 2020-06-30
summary: |
- Developed and maintained features for a large-scale e-commerce platform using React and Node.js.
- Collaborated with product managers and designers to deliver high-quality user experiences.
- Participated in on-call rotation to ensure application stability.
- name: Data Systems LLC
position: Software Engineer Intern
startDate: 2017-06-01
endDate: 2017-08-31
summary: |
- Assisted in the development of a data processing pipeline.
- Wrote unit tests to ensure code quality.
- Gained experience with Agile development methodologies.
skills:
- name: Programming Languages
level: Expert
keywords:
- JavaScript (ES6+)
- TypeScript
- Python
- Go
- name: Technologies & Frameworks
level: Advanced
keywords:
- React
- Node.js
- Express
- Docker
- Kubernetes
- PostgreSQL
- name: Developer Tools
level: Advanced
keywords:
- Git & GitHub
- Webpack
- Jest
- CircleCI
languages:
- language: English
fluency: Native or Bilingual Proficiency
- language: Spanish
fluency: Limited Working Proficiency
```
Here we alias the `work`, `education`, and `skills` sections, and reorder the
sections by assigning higher priority to `work` than `education`, followed by
the `skills` section:
Now, let's build the resume:
```bash
yamlresume build resume.yml
```
You will get a PDF file with the following content—I highlighted the sections
with customizations:
Great, it works as expected! Isn't this cool?
## In Summary
With section aliases and reordering, you now have fine-grained control over your
resume's structure. We hope these features help you create even more
personalized and effective resumes.
The best part of section customization is that you can always extend [YAMLResume's
i18n capabilities to support more
languages](/docs/layouts/sections/reorder#default-section-order) on your own. By
default, the default section titles will be translated to the target locale
language (set via `layout.locale.language`) automatically. However, there are
always cases where YAMLResume [hasn't supported your target language
yet](https://github.com/yamlresume/yamlresume/discussions/36), so you can
override the default section titles with your own.
Meanwhile, people with different backgrounds have different preferences for the
section order. For example, candidates looking for an industry job may order
`work` in front of `education`, while postdoc researchers looking for an
academic position would order `education` in front of `work`.
Hope you enjoy these new features!
# YAMLResume v0.10: VS Code Template & Dutch Support
URL: (/en/blog/v0.10)
import { Tab, Tabs } from "fumadocs-ui/components/tabs";
We are thrilled to announce the release of
[YAMLResume v0.10](https://github.com/yamlresume/yamlresume/releases/tag/v0.10.0).
This release focuses on expanding our layout ecosystem with a developer-favorite
theme, broadening our international support, and adding fine-grained control
over document formatting.
## New HTML Template: VS Code
For developers, your code editor is your home. Now your resume can feel just as
familiar. We've introduced a new [VS Code
template](/docs/layouts/html/templates/vscode) for the HTML engine, featuring a
dark theme inspired by the "Dark+" color scheme of Visual Studio Code.
It features syntax-highlighting aesthetics—treating your name like a class, your
skills like objects, and your experience like functions. To use it, simply
update your layout configuration:
```yml lineNumbers
layouts:
- engine: html
template: vscode #[!code highlight]
```
This template is perfect for software engineers, devops professionals, and
anyone who wants to signal their technical roots immediately.
## Dutch Language Support
YAMLResume continues to grow globally. Thanks to the contribution from
[MattiaPun](https://github.com/MattiaPun), we now support [Dutch
(nl)](/docs/locale/dutch)!
This brings our supported languages count to six:
* [English (en)](/docs/locale/english)
* [Chinese (zh)](/docs/locale/chinese)
* [Spanish (es)](/docs/locale/spanish)
* [French (fr)](/docs/locale/french)
* [Norwegian (no)](/docs/locale/norwegian)
* [Dutch (nl)](/docs/locale/dutch)
To generate your resume in Dutch, set the locale in your `resume.yml`:
```yml lineNumbers
locale:
language: nl
```
This will automatically translate section headers (e.g., "Werkervaring",
"Opleidingen"), date formats, and country names.
## LaTeX Paper Size Support
We've added explicit control over paper sizes for the LaTeX/PDF engine. While A4
is the standard in many parts of the world, US Letter is essential for North
America.
You can now specify your preferred paper size directly in the configuration:
```yml lineNumbers
layouts:
- engine: latex
page:
# Options: 'a4' (default) or 'letter'
paperSize: letter #[!code highlight]
```
This ensures your PDF resume prints perfectly regardless of your region. Special
thanks to [djryanj](https://github.com/djryanj) for driving this feature!
## Toggle Icons
Sometimes less is more. While icons add visual flair, certain formal or
ATS-focused contexts might require a stricter text-only presentation.
We've introduced a `showIcons` option under the `advanced` settings for both HTML
and LaTeX engines. This gives you the flexibility to toggle icons for contact
details and social profiles on or off.
```yml lineNumbers
layouts:
- engine: html
advanced:
showIcons: false #[!code highlight]
- engine: latex
advanced:
showIcons: false #[!code highlight]
```
## Conclusion
YAMLResume v0.10 is about giving you more choices—from how your resume looks to
how it fits your local standards.
Upgrade today to explore the new features:
```console
$ npm install -g yamlresume@latest
# or
$ brew upgrade yamlresume
```
As always, we welcome your feedback and contributions on
[GitHub](https://github.com/yamlresume/yamlresume). Happy building!
# YAMLResume v0.11: Playground, Doctor Command & More Languages
URL: (/en/blog/v0.11)
We're excited to announce [YAMLResume
v0.11](https://github.com/yamlresume/yamlresume/releases/tag/v0.11.1). This
release brings significant developer experience improvements with a new
embeddable Playground component, environment diagnostics via the `doctor`
command, expanded language support, and typography customization.
## New Package: @yamlresume/playground
We've extracted and published our web playground as a standalone React
component: [`@yamlresume/playground`](https://www.npmjs.com/package/@yamlresume/playground).
This package powers the official [playground](/playground) and can now be
integrated into your own applications.
```bash
npm install @yamlresume/playground @yamlresume/core
```
The Playground component provides:
* **Live YAML Editor**: [Monaco-based
editor](https://microsoft.github.io/monaco-editor/) with YAML syntax
highlighting
* **Real-time Preview**: Instant preview for HTML, Markdown and LaTeX layouts
* **Responsive Design**: Split-pane layout on desktop, tabbed interface on mobile
* **Export Options**: Download, copy, or print your resume
Basic usage is straightforward:
```tsx
import { useState } from "react"
import { Playground } from "@yamlresume/playground"
function App() {
const [yaml, setYaml] = useState("layouts: []");
return (
setYaml(newYaml)} />
)
}
```
The package also exports hooks like `useResumeState` and `useResumeRenderer` for
building custom editor experiences. See the [package
README](https://github.com/yamlresume/yamlresume/tree/main/packages/playground)
for the full API reference.
## New Command: yamlresume doctor
Setting up a LaTeX environment can be tricky. The new `doctor` command helps
diagnose your setup by checking for required dependencies:
```console
$ yamlresume doctor
System:
OS: macOS 14.6.1
CPU: (10) arm64 Apple M1 Max
Binaries:
Node: 25.6.0 - /opt/homebrew/bin/node
Yarn: 1.22.22 - /Users/hanyu/Library/pnpm/yarn
npm: 11.8.0 - /opt/homebrew/bin/npm
pnpm: 10.6.3 - /opt/homebrew/bin/pnpm
ℹ Checking XeTeX... 2:26:36 PM
XeTeX: XeTeX 3.141592653-2.6-0.999994 (TeX Live 2022)
ℹ Checking Tectonic... 2:26:36 PM
Tectonic: tectonic 0.15.0Tectonic 0.15.0
ℹ Checking Fonts... 2:26:36 PM
Linux Libertine O: Not Installed
Linux Libertine: Installed
Noto Serif CJK SC: Installed
Noto Sans CJK SC: Installed
```
The doctor command checks:
* **System information**: OS, CPU architecture
* **Binaries**: Node.js, npm, pnpm, Yarn, Bun
* **LaTeX engines**: XeTeX and Tectonic availability
* **Fonts**: Required fonts for optimal resume rendering (Linux Libertine for
Latin text, Noto CJK for Chinese/Japanese/Korean)
This is particularly helpful when setting up YAMLResume on a new machine or
troubleshooting resume build issues.
## Japanese and German Language Support
YAMLResume continues to expand its internationalization. We now support two more
languages:
* **Japanese (ja)**: Full support for Japanese section headers, date formats,
and country names
* **German (de)**: Thanks to [Daniel Bälz](https://github.com/dbaelz) for
contributing German translations
This brings our supported language count to eight:
* [English (en)](/docs/locale/english)
* [Chinese (zh)](/docs/locale/chinese)
* [Spanish (es)](/docs/locale/spanish)
* [French (fr)](/docs/locale/french)
* [Norwegian (no)](/docs/locale/norwegian)
* [Dutch (nl)](/docs/locale/dutch)
* [Japanese (ja)](/docs/locale/japanese)
* [German (de)](/docs/locale/german)
To generate your resume in Japanese or German:
```yml lineNumbers
locale:
language: ja # or 'de' for German
```
## Font Family Customization
You can now customize the font family for both HTML and LaTeX engines. This
gives you precise control over typography to match your personal brand or
regional preferences.
### HTML Engine
```yml lineNumbers
layouts:
- engine: html
typography:
fontFamily: '"Inter", "Helvetica Neue", sans-serif'
```
Each HTML template adopts a list of fonts as the default, and when you specify
the `fontFamily` in your layout configuration, it will be prepended to the
default list.
### LaTeX Engine
```yml lineNumbers
layouts:
- engine: latex
typography:
fontFamily: "EB Garamond"
```
`fontFamily` for LaTeX engine also supports CSS font family syntax, i.e, the
comma separated list of fonts. YAMLResume's LaTeX engine will use
`\IfFontExistsTF` macro to check the existence of each font and it will only
pick the first one which is accessible to XeTeX/Tectonic in the list.
Here is an example of LaTeX resume with [Big Calson font](https://fontsinuse.com/typefaces/555/big-caslon) on macOS:
## Other Improvements
* **Türkiye naming**: Updated country name from "Turkey" to "Türkiye" to reflect
the official name change ([#152](https://github.com/yamlresume/yamlresume/issues/152))
* **Improved test coverage**: Added cross-platform testing on Node.js 22 and 24
across macOS, Linux, and Windows
## Upgrade Today
Get the latest version:
```console
$ npm install -g yamlresume@latest
# or
$ brew upgrade yamlresume
```
Check your environment is ready:
```console
$ yamlresume doctor
```
As always, we welcome your feedback and contributions on
[GitHub](https://github.com/yamlresume/yamlresume). Happy building!
# YAMLResume v0.12: Jake's Template, Indonesian Language & Line Spacing
URL: (/en/blog/v0.12)
We're excited to announce [YAMLResume
v0.12](https://github.com/yamlresume/yamlresume/releases/tag/v0.12.0). This
release introduces the popular Jake's Resume LaTeX template, adds [Indonesian
language](/docs/locale/indonesian) support, brings flexible date formatting, and
includes various bug fixes and improvements.
## New Template: Jake's Resume (LaTeX)
We've adapted the popular [Jake's Resume](https://github.com/jakegut/resume)
template to YAMLResume's architecture. This clean, professional template has been
widely used in the LaTeX community.
The template simplified the original Jake's template a lot and keeps only
essential macros from the original:
* `\resumeSubheading` - for work, education, projects, etc. entries
* `\titleformat` - for section header styling
All YAMLResume features work out of the box with Jake's template, including
multi-language support, custom fonts, and all resume sections.
To use Jake's template:
```yml lineNumbers
layouts:
- engine: latex
template: jake
```
## Indonesian Language Support
YAMLResume continues to expand its internationalization. We're adding Indonesian
(Bahasa Indonesia), the official language of Indonesia—the world's largest
archipelagic nation with over 270 million speakers.
This brings our supported language count to nine:
* [English (en)](/docs/locale/english)
* [Chinese (zh-hans, zh-hant-tw, zh-hant-hk)](/docs/locale/chinese)
* [Spanish (es)](/docs/locale/spanish)
* [French (fr)](/docs/locale/french)
* [Norwegian (no)](/docs/locale/norwegian)
* [Dutch (nl)](/docs/locale/dutch)
* [Japanese (ja)](/docs/locale/japanese)
* [German (de)](/docs/locale/german)
* [Indonesian (id)](/docs/locale/indonesian)
To generate your resume in Indonesian:
```yml lineNumbers
locale:
language: id
```
All [predefined options](/docs/compiler/types#enum-types) will be translated
automatically to Indonesian.
## Year-Only Dates
You can now specify just the year for date fields, useful for ongoing or
year-focused resume entries:
```yml lineNumbers
work:
- name: Company Name
position: Software Engineer
startDate: "2024"
endDate: "2026"
```
This is particularly handy for:
* Current positions (specify start year only)
* Early career highlights (year-only for brief roles)
* Annual certifications or achievements
## Line Spacing Customization
Control the line spacing in your LaTeX resumes with the new `lineSpacing`
option:
```yml lineNumbers
layouts:
- engine: latex
typography:
lineSpacing: relaxed
```
Supported values:
* `tight` - Compact spacing for fitting more content
* `snug` - Slightly more space than tight
* `normal` - Balanced readability (default)
* `relaxed` - More breathing room between lines
* `loose` - Very spacious layout
This gives you fine-grained control over document density and readability.
For example, here is the tight line spacing:
And here is the loose line spacing:
## Bug Fixes
### URL Handling Improvements
* `\homepage` macro for general URLs in moderncv: The `basics.url` field now
supports various URL schemes beyond HTTP/HTTPS (`ftp://`, `ws://`, etc.), making
the schema more semantically consistent, [initial bug trial
here](https://github.com/yamlresume/yamlresume/pull/158)
### Playground Improvements
* Added localized tooltip messages for better international user experience
* Improved scroll area behavior for smoother editing
Big
[credit](https://github.com/yamlresume/yamlresume/commits?author=aojunhao123) to
[aojunhao123](https://www.aojunhao.com/) here.
## Upgrade Today
Get the latest version:
```console
$ npm install -g yamlresume@latest
# or
$ brew upgrade yamlresume
```
## Credit
I would like to thank [aojunhao123](https://www.aojunhao.com/) for his
contributions to this release, he made the [playground](/playground) better,
fixed some bugs in our website and optimized the whole dev workflow.
As always, we welcome your feedback and contributions on
[GitHub](https://github.com/yamlresume/yamlresume). Happy building!
# Automate Resume Builds with YAMLResume GitHub Action
URL: (/en/blog/yamlresume-action)
I am thrilled to announce the official
[YAMLResume GitHub Action](https://github.com/marketplace/actions/yamlresume)!
This new action brings the "Resume as Code" philosophy to its natural conclusion
by seamlessly integrating YAMLResume into your CI/CD pipelines.
## Why use a GitHub Action?
YAMLResume has been
[adopted by people on GitHub](https://github.com/yamlresume/yamlresume/discussions/50)
from all over the world. Each has figured out their own workflow to build and
deploy their resumes—some use Makefiles, some use shell scripts, some use GitHub
Actions, some publish to GitHub Pages, etc.
For example:
* [@drzero42](https://github.com/drzero42) use
[docker and gh-relase](https://github.com/drzero42/resume/blob/main/.github/workflows/build-resume.yaml)
to build and host resumes
* [@mortezaPRK](https://github.com/mortezaPRK) use
[Makefile](https://github.com/mortezaPRK/mortezaPRK.github.io/blob/main/Makefile)
* [@shamrt](https://github.com/shamrt) installed
[npm, yamlresume and TinyTeX on GitHub runner](https://github.com/shamrt/yamlresume/blob/main/.github/workflows/deploy.yml)
and use shell script to build and publish resumes )
It is time for us to provide a unified way to do this.
With `yamlresume/action`, you can automate this entirely. By pushing your
updated `resume.yml` to GitHub, the action can automatically:
1. Validate your resume against the YAMLResume schema.
2. Build the PDF, LaTeX, HTML, and Markdown outputs.
3. Attach the generated PDFs to a GitHub Release, upload them as workflow
artifacts, or publish them to GitHub Pages.
Theoretically you never have to build your resume locally again.
## Quick Start
Using the action is incredibly straightforward. Here is a minimal
`.github/workflows/build.yml` example that builds your resume and uploads the
generated PDF as a GitHub Actions artifact:
```yaml
name: Build Resume
on:
push:
branches: [main]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Build resume
id: build
uses: yamlresume/action@v0.2.3
with:
resumes: resume.yml
- name: Upload PDF
uses: actions/upload-artifact@v4
with:
name: resume
path: ${{ steps.build.outputs.pdf-files }}
```
## Key Features
The GitHub Action isn't just a simple wrapper; it comes with powerful features
designed for real-world resume management:
### Multiple Resumes in One Go
Many users maintain multiple versions of their resume (e.g., an English version
and a translated version, or a Frontend vs. Backend focused version). You can
build all of them simultaneously by passing a newline-separated list:
```yaml
- uses: yamlresume/action@v0.2.3
with:
resumes: |
resume-en.yml
resume-zh.yml
```
### Customizable Builds
If you have a custom PDF generation pipeline and only need the LaTeX output, or
if you want to skip schema validation for a quick draft, the action provides
`no-pdf` and `no-validate` inputs to tailor the workflow to your needs.
#### Skip PDF Generation
Generate only LaTeX files (useful for custom PDF pipelines):
```yaml
- uses: yamlresume/action@v0.2.3
with:
resumes: resume.yml
no-pdf: true
```
#### Skip Validation
Skip schema validation during build:
```yaml
- uses: yamlresume/action@v0.2.3
with:
resumes: resume.yml
no-validate: true
```
## Under the Hood
The `yamlresume/action` leverages the
[YAMLResume Docker image](https://hub.docker.com/r/yamlresume/yamlresume) that
we [introduced previously](/blog/yamlresume-docker).
Because LaTeX distributions are notoriously large and time-consuming to install
(often taking 20–30 minutes on a GitHub runner), building the resume directly on
the runner would drastically slow down your CI pipeline. By using our
pre-packaged Docker image, the action pulls the necessary environment in a
fraction of the time, resulting in fast, reliable, and consistent builds.
## Try It Out!
Ready to automate your career? Check out the
[yamlresume/action repository](https://github.com/marketplace/actions/yamlresume) to get
started, or read the detailed
[GitHub Action Ecosystem Documentation](/docs/ecosystem/action) for more
configuration options and advanced usage examples.
Happy automating!
# YAMLResume v0.5: The Resume Compiler
URL: (/en/blog/yamlresume-compiler)
We are thrilled to announce the release of [YAMLResume
v0.5](https://github.com/yamlresume/yamlresume/releases/tag/v0.8.1), a
significant milestone that transforms YAMLResume from a simple tool into a
full-fledged **resume compiler**. This release introduces a robust
architecture, powerful schema validation, and an enhanced CLI to make your
resume creation process more reliable, efficient, and error-free.
## The Problem with Manual Resume Writing
Drafting a resume is often a tedious and error-prone process. Whether you're
using a word processor or a simple markup language, it's easy to make
mistakes:
* A typo in a key field like `degree` or `fluency`.
* An incorrectly formatted email address or URL.
* Inconsistent date formats.
* Forgetting a required field for a job application.
These small errors can lead to a frustrating cycle of editing, generating, and
proofreading. The core issue is the lack of a system to enforce structure and
validate data *before* the final document is generated.
## The Solution: A Resume Compiler
Inspired by programming language compilers, [YAMLResume
v0.5](https://github.com/yamlresume/yamlresume/releases/tag/v0.8.1) introduces
a new compiler architecture that treats your resume's source file (in YAML) as
code. This "code" is then processed through a pipeline to produce a polished,
professional PDF.
This new architecture defines two core components:
1. A [standard data format](/docs/compiler/types) for a resume, along with a
[schema](/docs/compiler/schema) to validate the data.
2. A reference [compiler](/docs/compiler) that implements the data format and
schema validation.
This approach brings several key advantages:
* **Separation of Concerns**: You focus solely on the **content** of your
resume. The compiler handles the **presentation**—layout, typography, and
formatting.
* **Early Error Detection**: The compiler validates your resume against a
predefined schema, catching errors instantly with clear, actionable
feedback.
* **Consistency and Reliability**: By enforcing a standard structure, the
compiler ensures your resume data is always consistent and ready for any
template.
### See It in Action
For example, consider the following resume with several common errors:
```yml lineNumbers title="invalid-resume.yml"
# yaml-language-server: $schema=https://yamlresume.dev/schema.json
---
content:
basics:
name: Andy Dufresne
headline: Headed for the Pacific
phone: "(213) 555-9876"
email: hi@pp # [!code highlight]
url: https//ppresume.com/gallery # [!code highlight]
summary: |
- Computer Science major with strong foundation in data structures, algorithms, and software development
- Pixel perfect full stack web developer, specialised in creating high-quality, visually appealing websites
- Experiened in databases (SQL, NoSQL), familiar with server-side technologies (Node.js, Express, etc.)
- Team player, with detail-oriented mindset and a keen eye for design and user experiences
location:
address: 123 Main Street
region: California
city: S # [!code highlight]
country: United States
postalCode: "95814"
education:
- institution: University of Southern California
url: https://www.cs.usc.edu/
degree: Bachelor
area: Computer Engineering and Computer Science
score: "3.8"
startDate: Sep 1, 2016
endDate:
courses:
- D # [!code highlight]
- Programming Language Concepts
summary: |
- Developed proficiency in programming languages such as Java, C++, and Python
- Gained hands-on experience in software development through various projects and assignments
- Strong communication and teamwork skills acquired through group projects and presentations
layout:
typography:
fontSize: 13pt # [!code highlight]
```
We have several issues:
1. `email: hi@pp` - format is invalid
2. `url: https//ppresume.com/gallery` - protocol part is missing a `:`
3. `city: S` - too short, should be 2 characters or more, is there any city in the
world whose name is only 1 character?
4. `- D` - the first course is just too short, should be 2 characters or
more
5. `fontSize: 13pt` - should be 10pt, 11pt or 12pt, 13pt is just too large and make
little sense in resume drafting scenario
These errors, which might have gone unnoticed previously, are now caught
instantly. You can run `yamlresume validate my-resume.yml` or simply `yamlresume
build my-resume.yml`. YAMLResume will report all issues in the widely adopted
[clang-style error format](https://clang.llvm.org/diagnostics.html), allowing
you to fix them before the final PDF is generated.
## At the Heart of the Compiler: The Schema
The cornerstone of this new release is the **[YAMLResume
Schema](/docs/compiler/schema)**. We provide a comprehensive schema that
defines the structure and rules for every piece of data in your resume.
We use two powerful technologies for this:
* **[Zod](https://zod.dev)**: For runtime validation within the compiler,
providing a robust safety net and detailed error messages.
* **[JSON Schema](https://json-schema.org)**: For editor and IDE integration.
By adding a single line to your YAML file, you unlock auto-completion,
inline on-hover property documentation, and real-time format validation
right in your editor.
If you have a resume created prior to v0.5, you can still take advantage of
schema validation. Just add the following line to your resume file and install
the [YAML Language
Server](https://github.com/redhat-developer/yaml-language-server) for your
editor.
```yml lineNumbers
# yaml-language-server: $schema=https://yamlresume.dev/schema.json
```
This integration provides a suite of benefits that dramatically improve the
resume writing experience:
### Auto-Completion
Spend less time looking up field names. Your editor will suggest valid
properties as you type, ensuring you use the correct fields every time.
### Real-time Format Validation
Catch errors as they happen. The schema validation provides instant feedback on
everything from simple typos to incorrect email formats or missing required
fields.
If a required key is missing, the warning is escalated to its parent object,
making it easy to spot and fix.
### Inline Property Documentation
No more guessing what a field does. Hover over any property to get instant
documentation explaining its purpose, expected format, and allowed values.
## The Enhanced CLI
The `yamlresume` [CLI](/docs/cli) is now more powerful than ever. The
[build](/docs/cli#build) command runs the entire compiler pipeline, from
validation to PDF generation, while the new [validate](/docs/cli#validate)
command lets you check your resume without building it.
[](https://asciinema.org/a/728098)
This seamless workflow transforms your resume creation process, making it more
efficient and reliable while minimizing errors.
## What This Means for You
With [YAMLResume
v0.5](https://github.com/yamlresume/yamlresume/releases/tag/v0.8.1), you can:
* **Write with Confidence**: Know that your resume's structure is sound and
your data is valid.
* **Save Time**: Catch errors early and eliminate the tedious proofreading
cycle.
* **Stay Flexible**: Swap between different resume templates effortlessly.
* **Enjoy a Better Editing Experience**: Get real-time feedback and
auto-completion in your favorite editor.
We invite you to experience the power and simplicity of the new YAMLResume
compiler:
* **Install or update** to the latest version: `npm install -g
yamlresume@latest`
* **Read the new [Compiler Documentation](/docs/compiler)** to learn more about
the architecture and schema.
* **Join our community** on
[GitHub](https://github.com/yamlresume/yamlresume/discussions) to ask
questions, report issues, or contribute.
We believe this release marks a new era for resume creation, bringing the power
and reliability of compilers to everyone. We can't wait to see the amazing
resumes you'll build!
And don't forget, you can try out the new compiler with our [Docker
image](/blog/yamlresume-docker):
```sh
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
```
# YAMLResume in Docker
URL: (/en/blog/yamlresume-docker)
I am super excited to announce that YAMLResume now has a [docker
image](https://hub.docker.com/r/yamlresume/yamlresume), and you can [run
YAMLResume instantly with docker](https://asciinema.org/a/722057).
## Why Docker?
YAMLResume is a Node.js CLI tool and a
[library](https://www.npmjs.com/package/@yamlresume/core). Installing YAMLResume
itself is not difficult since it only requires Node.js. In fact, we can even compile it
to a binary and run it directly without installing Node.js.
However, YAMLResume has a mandatory dependency on LaTeX, which brings some new
problems:
* Installing LaTeX takes time; it usually takes about 5–10 minutes to download a
proper LaTeX distribution and configure it.
* LaTeX is not a single binary program; it is a collection of programs. Some
users [dislike installing many programs on their
machines](https://github.com/yamlresume/yamlresume/issues/6#issuecomment-2916479009).
Although we already provide a very comprehensive [installation
guide](/docs/installation) covering macOS, Windows, Ubuntu, and RHEL, even with
instructions on installing YAMLResume and LaTeX and making them work together,
the process can still be painful for some users.
Docker is a great solution to these problems: it can package everything into a
single image, making installation and configuration easy.
## How To Use It
A picture is worth a thousand words. Here is a screenshot showing how to use it:
Our [docker image](https://hub.docker.com/r/yamlresume/yamlresume) has
everything pre-packaged, including:
* [Node.js](/docs/installation#nodejs)
* [yamlresume CLI](/docs/installation#yamlresume)
* [XeTeX](/docs/installation#xetex)
* [some recommended fonts](/docs/installation#font)
You can create a new resume instantly with the following command:
```sh
docker run --rm -v $(pwd):/home/yamlresume yamlresume/yamlresume new my-resume.yml
```
Edit `my-resume.yml` accordingly and then build the resume from YAML to PDF:
```sh
docker run --rm -v $(pwd):/home/yamlresume yamlresume/yamlresume build my-resume.yml
```
#### Under the Hood
If you are familiar with docker, you may already know how this works. If not,
here is a quick explanation:
1. `docker run ... yamlresume/yamlresume` - runs a new container from the
`yamlresume/yamlresume` image. If this image does not exist on your local
machine, it will pull it from the [docker
Hub](https://hub.docker.com/r/yamlresume/yamlresume).
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` or `build my-resume.yml` - runs the yamlresume CLI
[new](/docs/cli#new) or [build](/docs/cli#build) sub-command to create or
build a resume with the filename `my-resume.yml`.
Basically, you can call all of the `yamlresume` [CLI sub-commands](/cli) in this
way—just append the sub-command after `yamlresume/yamlresume` and then follow
the corresponding usage guide.
The `-v` flag is quite important because it mounts the current directory
(`$(pwd)`) into the container at `/home/yamlresume`, allowing two-way file sync
between the local directory and the container. Without this flag, the build
output artifact will be lost after the container exits.
## Engineering
Building a docker image is not difficult if you know docker a bit. However,
wrapping YAMLResume in docker is not as easy as it sounds. Here are some of the
challenges.
### LaTeX Configuration is Tedious
Installing a workable LaTeX distribution takes time; it usually takes about 5–10
minutes to download and configure a proper LaTeX distribution. In GitHub Action
runners, this process is [even longer—up to 20+
minutes](https://github.com/yamlresume/yamlresume/actions/runs/15438395862/job/43450134447).
```docker
RUN apt update && \
apt install -y \
texlive-xetex \
texlive-fonts-extra \
texlive-lang-all \
fonts-noto-cjk \
fonts-noto-cjk-extra \
```
We make it a 3-step process to build [yamlresume's docker
image](https://hub.docker.com/r/yamlresume/yamlresume):
1. Start from a Node.js image as the base.
2. Install and configure a LaTeX distribution.
3. Install the yamlresume CLI.
As mentioned, step 2 is the most time-consuming part. If we had to start over
every time we needed to update the docker image, it would take 30 minutes to
build the docker image in a github action runner.
To avoid this, we use a multi-stage build to cache the LaTeX distribution, so we
don't need to install it from scratch every time we update the docker image.
Therefore, we created a new
[yamlresume/yamlresume-base](https://hub.docker.com/r/yamlresume/yamlresume-base),
which is a base image that has Node.js and a LaTeX distribution installed. This
base image is stable and won't be updated too often, and our `yamlresume/yamlresume`
image is built on top of this base image. It only takes 3 minutes to pull down
the `yamlresume/yamlresume-base` image and install the yamlresume CLI on it,
which drastically reduces the iteration time.
### Multi-Platform Support
Another challenge is to support [multi-platform
builds](https://docs.docker.com/build/building/multi-platform/). As we know,
macOS M1 and later are ARM-based machines. Although they can run docker images
with AMD64 architecture by emulation, the performance is 10x poorer.
Hence, we have to support multi-platform images for `yamlresume/yamlresume`.
Luckily, docker officially provides a detailed guide about how to [build
multi-platform images in github
actions](https://docs.docker.com/build/ci/github-actions/multi-platform/).
YAMLResume's docker image supports [two
platforms](https://hub.docker.com/r/yamlresume/yamlresume/tags): `linux/amd64`
and `linux/arm64`, which should be sufficient to cover most desktop and server
machines.
Enjoy YAMLResume with docker!
# YAMLResume Lands in Homebrew
URL: (/en/blog/yamlresume-homebrew)
YAMLResume has just been
[accepted](https://github.com/Homebrew/homebrew-core/pull/246949) by
[Homebrew](https://brew.sh) (the most popular package manager on macOS). That
means macOS users can now install and keep YAMLResume up to date with a single,
trustworthy command—no manual [Node.js](https://nodejs.org) global installs, no
path juggling. This post shows a more detailed step-by-step yamlresume setup with
Homebrew and a typesetting engine for best PDF output.
## Why This Matters
Previously, the typical path of getting YAMLResume CLI for macOS users was:
1. [install Node.js](/docs/installation#nodejs),
2. [install `yamlresume` CLI](/docs/installation#yamlresume-cli) by Node.js
package managers (npm/pnpm/yarn/bun)
3. [install a typesetting engine](/docs/installation#typesetting-engine) in
order to generate PDF
A [Homebrew formula](https://formulae.brew.sh/formula/yamlresume) can merge step
1 and 2 into one, since Homebrew can manage the Node.js dependency for you.
This reduces environment configuration issues and simplifies upgrades (`brew
upgrade yamlresume`).
## Quick Install
```sh
brew install yamlresume
```
Homebrew will install Node.js as a dependency if you don't have it yet.
Then verify:
```console
$ 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 [options] build a resume to LaTeX and PDF
dev [options] build a resume on file changes (watch mode)
languages i18n and l10n support
templates manage resume templates
validate validate a resume against the YAMLResume schema
help [command] display help for command
```
If you see the help output, the CLI binary is available in your `PATH`.
YAMLResume depends on a typesetting engine to generate PDF, you can either
install [MacTeX](/docs/installation#xetex) or
[Tectonic](/docs/installation#tectonic) via Homebrew.
### Option A: Full TeX Live (XeTeX)
Install via MacTeX cask (includes XeTeX):
```sh
# install the full mactex
brew install mactex
# or if you want to save some disk space
brew install mactex-no-gui
```
After installation, ensure the TeX binaries are on `PATH` (Homebrew usually
symlinks them under `/Library/TeX/texbin`). Test:
```console
$ xelatex --version
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
```
### Option B: Tectonic (Lightweight)
```console
$ brew install tectonic
$ tectonic --version
```
Which one should you pick?
| Engine | Pros | Cons |
| -------- | ---------------------------------------------------- | -------------------------------------- |
| XeTeX | maximal compatibility; mature ecosystem | large download (4-6 GBs) |
| Tectonic | tiny initial footprint; auto-fetches needed packages | occasional compatibility gaps vs XeTeX |
If you run into unexplained LaTeX package issues or advanced font handling edge
cases, fall back to XeTeX.
## Create and Build a Resume
As usual, you can create a starter YAML resume by:
```console
$ yamlresume new my-resume.yml
✔ Created my-resume.yml successfully.
```
Inspect and edit `my-resume.yml` in your editor, then build to PDF:
```console
$ yamlresume build my-resume.yml
◐ Generating resume PDF with command: xelatex -halt-on-error my-resume.tex...
✔ Generated resume PDF successfully.
```
Under the hood YAMLResume will:
1. transforms `my-resume.yml` into LaTeX (`my-resume.tex`).
2. invokes your typesetting engine (`xelatex` or `tectonic`).
3. produces `my-resume.pdf`.
## Upgrading
Stay current (new templates, fixes, i18n improvements):
```console
$ brew update
$ brew upgrade yamlresume
```
## Uninstalling
```console
$ brew uninstall yamlresume
```
Remove optional dependencies only if you no longer need them (fonts, TeX engine,
etc.).
## Troubleshooting
Verbose mode helps diagnose resume build issues:
```console
$ yamlresume build --verbose my-resume.yml
```
Common fixes:
* missing typesetting engine: install MacTeX or use Tectonic.
* permission denied writing files: ensure you are in a writable directory (avoid
system paths).
* engine mismatch/weird LaTeX errors on Tectonic: fall back to XeTeX (`brew
install mactex`).
## Final Notes
Being included in Homebrew lowers the barrier for new users and signals project
maturity. If you run into any edge cases, open an
[issue](https://github.com/yamlresume/yamlresume/issues/) or
[discussion](https://github.com/yamlresume/yamlresume/discussions)—we iterate
quickly. Happy hacking and may your resumes be always pixel perfect!
Last but not least, credit to [@chenrui333](https://github.com/chenrui333) again
for his initial [PR](https://github.com/Homebrew/homebrew-core/pull/246949) to
include YAMLResume in Homebrew.