Skip to content

Structure of the YAML Input File

RenderCV's input file consists of four parts: cv, design, locale and rendercv_settings.

Your_Name_CV.yaml
cv:
  ...
  YOUR CONTENT
  ...
design:
  ...
  YOUR DESIGN
  ...
locale:
  ...
  TRANSLATIONS TO YOUR LANGUAGE
  ...
rendercv_settings:
  ...
  RENDERCV SETTINGS
  ...
  • The cv field is mandatory. It contains the content of the CV.
  • The design field is optional. It contains the design options of the CV. If you don't provide a design field, RenderCV will use the default design options with the classic theme.
  • The locale field is optional. It contains all the strings that define the CV's language (like month names, etc.). If you don't provide a locale field, the default English strings will be used.
  • The rendercv_settings field is optional. It contains the settings of RenderCV (output paths, keywords to make bold, etc.). If you don't provide a rendercv_settings field, the default settings will be used.

Tip: JSON Schema

To maximize your productivity while editing the input YAML file, set up RenderCV's JSON Schema in your IDE. It will validate your inputs on the fly and give auto-complete suggestions.

  1. Install YAML language support extension.
  2. Then the Schema will be automatically set up because the file ends with _CV.yaml.
  3. Press Ctrl + Space to see the auto-complete suggestions.
  1. Ensure your editor of choice has support for JSON Schema.
  2. Add the following line at the top of Your_Name_CV.yaml:

    # yaml-language-server: $schema=https://github.com/rendercv/rendercv/blob/main/schema.json?raw=true
    
  3. Press Ctrl + Space to see the auto-complete suggestions.

"cv" field

The cv field of the YAML input starts with generic information, as shown below.

cv:
  name: John Doe
  location: Your Location
  email: youremail@yourdomain.com
  phone: +905419999999 
  website: https://example.com/
  social_networks:
    - network: LinkedIn 
      username: yourusername
    - network: GitHub 
      username: yourusername
  ...

None of the values above are required. You can omit any or all of them, and RenderCV will adapt to your input. These generic fields are used in the header of the CV.

The main content of your CV is stored in a field called sections.

cv:
  name: John Doe
  location: Your Location
  email: youremail@yourdomain.com
  phone: +905419999999
  website: https://yourwebsite.com/
  social_networks:
    - network: LinkedIn
      username: yourusername
    - network: GitHub
      username: yourusername
  sections:
    ...
    YOUR CONTENT
    ...

"cv.sections" field

The cv.sections field is a dictionary where the keys are the section titles, and the values are lists. Each item of the list is an entry for that section.

Here is an example:

cv:
  sections:
    this_is_a_section_title: 
      - This is a TextEntry. 
      - This is another TextEntry under the same section.
      - This is another another TextEntry under the same section.
    this_is_another_section_title:
      - company: This time it's an ExperienceEntry. 
        position: Your position
        start_date: 2019-01-01
        end_date: 2020-01
        location: TX, USA
        highlights: 
          - This is a highlight (a bullet point).
          - This is another highlight.
      - company: Another ExperienceEntry.
        position: Your position
        start_date: 2019-01-01
        end_date: 2020-01-10
        location: TX, USA
        highlights: 
          - This is a highlight (a bullet point).
          - This is another highlight.

There are seven different entry types in RenderCV. Different types of entries cannot be mixed under the same section, so for each section, you can only use one type of entry.

The available entry types are: EducationEntry, ExperienceEntry, PublicationEntry, NormalEntry, OneLineEntry, BulletEntry, and TextEntry.

Each entry type is a different object (a dictionary). Below, you can find all the entry types along with their optional/mandatory fields and how they appear in each built-in theme.

EducationEntry

Mandatory Fields:

  • institution: The name of the institution.
  • area: The area of study.

Optional Fields:

  • degree: The type of degree (e.g., BS, MS, PhD)
  • location: The location
  • start_date: The start date in YYYY-MM-DD, YYYY-MM, or YYYY format
  • end_date: The end date in YYYY-MM-DD, YYYY-MM, or YYYY format or "present"
  • date: The date as a custom string or in YYYY-MM-DD, YYYY-MM, or YYYY format. This will override start_date and end_date.
  • summary: The summary
  • highlights: The list of bullet points
institution: Boğaziçi University
area: Mechanical Engineering
degree: BS
location: Istanbul, Turkey
start_date: 2015-09
end_date: 2020-06
highlights:
  - 'GPA: 3.24/4.00 ([Transcript](https://example.com))'
  - "Awards: Dean's Honor List, Sportsperson of the Year"

ExperienceEntry

Mandatory Fields:

  • company: The name of the company
  • position: The position

Optional Fields:

  • location: The location
  • start_date: The start date in YYYY-MM-DD, YYYY-MM, or YYYY format
  • end_date: The end date in YYYY-MM-DD, YYYY-MM, or YYYY format or "present"
  • date: The date as a custom string or in YYYY-MM-DD, YYYY-MM, or YYYY format. This will override start_date and end_date.
  • summary: The summary
  • highlights: The list of bullet points
company: Some Company
position: Software Engineer
location: TX, USA
start_date: 2020-07
end_date: '2021-08-12'
highlights:
  - Developed an [IOS application](https://example.com) that has
    received more than **100,000 downloads**.
  - Managed a team of **5** engineers.

NormalEntry

Mandatory Fields:

  • name: The name of the entry

Optional Fields:

  • location: The location
  • start_date: The start date in YYYY-MM-DD, YYYY-MM, or YYYY format
  • end_date: The end date in YYYY-MM-DD, YYYY-MM, or YYYY format or "present"
  • date: The date as a custom string or in YYYY-MM-DD, YYYY-MM, or YYYY format. This will override start_date and end_date.
  • summary: The summary
  • highlights: The list of bullet points
name: Some Project
date: 2021-09
summary: This is a summary of the project.
highlights:
  - Developed a web application with **React** and **Django**.
  - Implemented a **RESTful API**

PublicationEntry

Mandatory Fields:

  • title: The title of the publication
  • authors: The authors of the publication

Optional Fields:

  • doi: The DOI of the publication
  • url: The URL of the publication
  • journal: The journal of the publication
  • date: The date as a custom string or in YYYY-MM-DD, YYYY-MM, or YYYY format
title: Magneto-Thermal Thin Shell Approximation for 3D Finite
  Element Analysis of No-Insulation Coils
authors:
  - J. Doe
  - '***H. Tom***'
  - S. Doe
  - A. Andsurname
date: '2021-12-08'
journal: IEEE Transactions on Applied Superconductivity
doi: 10.1109/TASC.2023.3340648

OneLineEntry

Mandatory Fields:

  • label: The label of the entry
  • details: The details of the entry
label: Programming
details: Python, C++, JavaScript, MATLAB

BulletEntry

Mandatory Fields:

  • bullet: The bullet point
bullet: This is a bullet entry.

NumberedEntry

Mandatory Fields:

  • number: The content of the numbered entry
number: This is a numbered entry.

ReversedNumberedEntry

The ReversedNumberedEntry displays entries in descending numerical order.

Mandatory Fields:

  • reversed_number: The content of the reversed numbered entry
reversed_number: This is a reversed numbered entry.

TextEntry

Mandatory Fields:

  • The text itself
This is a *TextEntry*. It is only a text and can be useful for
sections like **Summary**. To showcase the TextEntry completely,
this sentence is added, but it doesn't contain any information.
...

Markdown Syntax

All the fields in the entries support Markdown syntax.

You can make anything bold by surrounding it with **, italic with *, and links with [](), as shown below.

company: "**This will be bold**, *this will be italic*, 
  and [this will be a link](https://example.com)."
...

Using arbitrary keys

RenderCV allows the usage of any number of extra keys in the entries. For instance, the following is an ExperienceEntry containing an additional key, an_arbitrary_key.

company: Some Company
location: TX, USA
position: Software Engineer
start_date: 2020-07
end_date: '2021-08-12'
an_arbitrary_key: Developed an [IOS application](https://example.com).
highlights:
  - Received more than **100,000 downloads**.
  - Managed a team of **5** engineers.

By default, the an_arbitrary_key key will not affect the output as the default design options do not use it. However, you can use the an_arbitrary_key key in your own design options (see design.entry_types field).

"design" field

The design field contains your theme selection and its options. Currently, the available themes are: classic, sb2nov, engineeringresumes, engineeringclassic, moderncv. The only difference between the themes are the design options. Their Typst templates are the same. Any theme can be obtained by playing with the design options. Custom themes can also be created (see here).

design:
  theme: classic
  ...

Use an IDE that supports JSON schema to avoid missing any available options for the theme (see above).

An example design field for a classic theme is shown below:

design:
  theme: classic 
  page:
    size: us-letter 
    top_margin: 2cm
    bottom_margin: 2cm
    left_margin: 2cm
    right_margin: 2cm
    show_page_numbering: true
    show_last_updated_date: true
  colors:
    text: black
    name: '#004f90'
    connections: '#004f90'
    section_titles: '#004f90'
    links: '#004f90'
    last_updated_date_and_page_numbering: grey
  text:
    font_family: Source Sans 3 
    font_size: 10pt
    leading: 0.6em
    alignment: justified 
    date_and_location_column_alignment: right 
  links:
    underline: false
    use_external_link_icon: true
  header:
    name_font_family: Source Sans 3
    name_font_size: 30pt
    name_bold: true
    small_caps_for_name: false
    photo_width: 3.5cm
    vertical_space_between_name_and_connections: 0.7cm
    vertical_space_between_connections_and_first_section: 0.7cm
    horizontal_space_between_connections: 0.5cm
    connections_font_family: Source Sans 3
    separator_between_connections: ''
    use_icons_for_connections: true
    alignment: center 
  section_titles:
    type: with-partial-line 
    font_family: Source Sans 3
    font_size: 1.4em
    bold: true
    small_caps: false
    line_thickness: 0.5pt
    vertical_space_above: 0.5cm
    vertical_space_below: 0.3cm
  entries:
    date_and_location_width: 4.15cm
    left_and_right_margin: 0.2cm
    horizontal_space_between_columns: 0.1cm
    vertical_space_between_entries: 1.2em
    allow_page_break_in_sections: true
    allow_page_break_in_entries: true
    short_second_row: false
    show_time_spans_in: []
  highlights:
    bullet:  
    top_margin: 0.25cm
    left_margin: 0.4cm
    vertical_space_between_highlights: 0.25cm
    horizontal_space_between_bullet_and_highlight: 0.5em
    summary_left_margin: 0cm
  entry_types:
    one_line_entry:
      template: '**LABEL:** DETAILS'
    education_entry:
      main_column_first_row_template: '**INSTITUTION**, AREA'
      degree_column_template: '**DEGREE**'
      degree_column_width: 1cm
      main_column_second_row_template: |-
        SUMMARY
        HIGHLIGHTS
      date_and_location_column_template: |-
        LOCATION
        DATE
    normal_entry:
      main_column_first_row_template: '**NAME**'
      main_column_second_row_template: |-
        SUMMARY
        HIGHLIGHTS
      date_and_location_column_template: |-
        LOCATION
        DATE
    experience_entry:
      main_column_first_row_template: '**COMPANY**, POSITION'
      main_column_second_row_template: |-
        SUMMARY
        HIGHLIGHTS
      date_and_location_column_template: |-
        LOCATION
        DATE
    publication_entry:
      main_column_first_row_template: '**TITLE**'
      main_column_second_row_template: |-
        AUTHORS
        URL (JOURNAL)
      main_column_second_row_without_journal_template: |-
        AUTHORS
        URL
      main_column_second_row_without_url_template: |-
        AUTHORS
        JOURNAL
      date_and_location_column_template: DATE

"locale" field

This field is what makes RenderCV a multilingual tool. RenderCV uses some English strings to render PDFs. For example, it takes the dates in ISO format (2020-01-01) and converts them into human-friendly strings ("Jan 2020"). However, you can override these strings for your own language or needs with the locale field.

Here is an example:

locale:
  language: en
  phone_number_format: national 
  page_numbering_template: NAME - Page PAGE_NUMBER of TOTAL_PAGES 
  last_updated_date_template: Last updated in TODAY 
  date_template: MONTH_ABBREVIATION YEAR 
  month: month
  months: months
  year: year
  years: years
  present: present
  to: 
  abbreviations_for_months:
    - Jan
    - Feb
    - Mar
    - Apr
    - May
    - June
    - July
    - Aug
    - Sept
    - Oct
    - Nov
    - Dec
  full_names_of_months:
    - January
    - February
    - March
    - April
    - May
    - June
    - July
    - August
    - September
    - October
    - November
    - December

"rendercv_settings" field

The rendercv_settings field contains RenderCV settings.

rendercv_settings:
  date: "2025-01-06" 
  bold_keywords:
    - Python 
  render_command:
    output_folder_name: rendercv_output
    pdf_path: NAME_IN_SNAKE_CASE_CV.pdf 
    typst_path: NAME_IN_LOWER_SNAKE_CASE_cv.typ
    html_path: NAME_IN_KEBAB_CASE_CV.html
    markdown_path: NAME.md
    dont_generate_html: false 
    dont_generate_markdown: false 
    dont_generate_png: false