rendercv
Create professional CVs and resumes with perfect typography using RenderCV (v2.8). Users write content in YAML, and RenderCV produces publication-quality PDFs via Typst typesetting. Full control over every visual detail: colors, fonts, margins, spacing, section title styles, entry layouts, and more.
By rendercv · 1,954 installs
npx skills add rendercv/rendercv-skill --skill rendercv
Source repository · Upstream listing
Quick Start
Available themes: classic , harvard , engineeringresumes , engineeringclassic , sb2nov , moderncv
Available locales: english , arabic , danish , dutch , french , german , hebrew , hindi , hungarian , indonesian , italian , japanese , korean , mandarin chinese , norwegian bokmål , norwegian nynorsk , persian , portuguese , russian , spanish , turkish , vietnamese
These are starting points — every aspect of the design and locale can be fully customized in the YAML file.
YAML Structure
A RenderCV input has four sections. Only cv is required — the others have sensible defaults.
Single file vs. separate files: All four sections can live in one YAML file, or each can be a separate file. Separate files are useful for reusing the same design/locale across multiple CVs:
When using separate files, each file contains only its section (e.g., design.yaml has design: as the top level key). CLI loaded files override values in the main YAML file.
The YAML maps directly to Pydantic models. The complete type safe schema is provided below so you can understand every field, its type, and its default value.
Pydantic Schema
The YAML input is validated against these Pydantic models.
Top Level Model
CV Content ( cv )
The cv.sections field is a dictionary where keys are section titles (any string you want) and values are lists of entries. Each section contains entries of the same type.
Entry Types
cv.sections is a dictionary: keys are section titles (any string), values are lists of entries. Each section must use a single entry type — you cannot mix different entry types within the same section. The entry type is auto detected from the fields present in each entry.
Shared fields — these are available on entry types that support dates and complex fields (ExperienceEntry, EducationEntry, NormalEntry, PublicationEntry):
Field Type Default Notes
date str \ int \ null null Free form: "2020 09" , "Fall 2023" , etc. Mutually exclusive with start date / end date .
start date str \ int \ null null Strict format: YYYY MM DD, YYYY MM, or YYYY.
end date str \ int \ "present" \ null null Same formats as start date , or "present" . Omitting defaults to "present" when start date is set.
location str \ null null
summary str \ null null
highlights list[str] \ null null Bullet points.
9 entry types:
Entry Type Required Fields Optional Fields Typical Use
ExperienceEntry company , position all shared fields Jobs, positions
EducationEntry institution , area degree + all shared fields Degrees, schools
PublicationEntry title , authors doi , url , journal , summary , date Papers, articles
NormalEntry name all shared fields Projects, awards
OneLineEntry label , details — Skills, languages
BulletEntry bullet — Simple bullet points
NumberedEntry number — Numbered list items
ReversedNumberedEntry reversed number — Reverse numbered items (5, 4, 3...)
TextEntry (plain string) — Free form paragraphs
Example:
Entries also accept arbitrary extra keys (silently ignored during rendering). A typo in a field name will NOT cause an error.
Design ( design )
All built in themes share the same structure — they only differ in default values. See the sample designs below for every available field and its default. Set design.theme to pick a theme, then override any field.
Locale ( locale )
Built in locales: english , arabic , danish , dutch , french , german , hebrew , hindi , hungarian , indonesian , italian , japanese , korean , mandarin chinese , norwegian bokmål , norwegian nynorsk , persian , portuguese , russian , spanish , turkish , vietnamese
Set locale.language to a built in locale name to use it. Override any field to customize translations. Set language to any string and provide all translations for a fully custom locale.
Settings ( settings )
Key fields: bold keywords (list of strings to auto bold), current date (override today's date), render command. (output paths, generation flags).
Important Patterns
YAML quoting
ALWAYS quote string values that contain a colon ( : ). This is the most common cause of invalid YAML. Highlights, titles, summaries, and any free form text often contain colons:
Rule: if a string value contains : , it MUST be quoted. When in doubt, quote it.
Bullet characters
The design.highlights.bullet field only accepts these exact characters: ● , • , ◦ , , ◆ , ★ , ■ , — , ○ . Do not use en dash ( – ), , , or any other character. When in doubt, omit bullet to use the theme default.
Phone numbers
Phone numbers MUST be in international format with country code (E.164). Never invent a phone number — only include one if the user provides it.
If the user provides a local number without country code, ask which country, or omit the phone field.
Text formatting
All text fields support inline Markdown: bold , italic , [link text](url) . Block level Markdown (headers, lists, blockquotes, code blocks) is not supported. Raw Typst commands and math ( $$f(x)$$ ) also pass through.
Date handling
date and start date / end date are mutually exclusive. If date is provided, start date and end date are ignored.
If only start date is given, end date defaults to "present" .
start date / end date require strict formats: YYYY MM DD, YYYY MM, or YYYY.
date is flexible: accepts any string ("Fall 2023") in addition to date formats.
Section titles
snake case keys auto capitalize: work experience → "Work Experience"
Keys with spaces or uppercase are used as is.
Publication authors
Use Name (single asterisks, italic) to highlight the CV owner in author lists.
Nested highlights (sub bullets)
CLI Reference
rendercv new "Full Name"
Generate a starter YAML file.
Option Short What it does
theme THEME Theme to use (default: classic )
locale LOCALE Locale to use (default: english )
create typst templates Also create editable Typst template files for full design control
rendercv render <input.yaml
Generate PDF, Typst, Markdown, HTML, and PNG from a YAML file.
Option Short What it does
watch w Re render automatically when the YAML file changes
quiet q Suppress all output messages
design FILE d Load design section from a separate YAML file
locale catalog FILE lc Load locale section from a separate YAML file
settings FILE s Load settings section from a separate YAML file
output folder DIR o Custom output directory
Per format controls: {format} path PATH sets custom output path, dont generate {format} skips generation. Formats: pdf , typst , markdown , html , png .
Override any YAML field from the CLI using dot notation (overrides without editing the file):
rendercv create theme "theme name"
Scaffold a custom theme directory with editable Typst templates for complete design control.
JSON Schema
For YAML editor autocompletion and validation:
Complete Example
Sample CV
Sample Design (classic — complete reference)
This shows every available design field with its default value. All themes share the same structure.
Other Theme Overrides
Other themes only override specific fields from the classic defaults above. To use a theme, set design.theme and optionally override any field. Each theme also customizes design.templates (entry layout patterns) — see the classic sample above for the full template structure. The override YAMLs below omit templates for brevity.
harvard
engineeringresumes
engineeringclassic
sb2nov
moderncv