Skill detail
rendercv
Purpose-built for creating, editing, customizing, and rendering CVs and resumes.
Inspect before use
Automated review checks relevance, not safety or endorsement. Read the source instructions before using this skill.
SKILL.md
The saved excerpt is a snapshot from review. The external source remains the complete and most current version.
---
name: rendercv
description: >-
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. 6 built-in themes with unlimited
customization. Any language supported (22 built-in, or define your own). Outputs
PDF, PNG, HTML, and Markdown. Use when the user wants to create, edit,
customize, or render a CV or resume.
---
## 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.
```bash
# Install RenderCV
uv tool install "rendercv[full]"
# Create a starter YAML file (you can specify theme and locale)
rendercv new "John Doe"
rendercv new "John Doe" --theme moderncv --locale german
# Render to PDF (also generates Typst, Markdown, HTML, PNG by default)
rendercv render John_Doe_CV.yaml
# Watch mode: auto-re-render whenever the YAML file changes
rendercv render John_Doe_CV.yaml --watch
# Render only PNG (useful for previewing or checking page count)
rendercv render John_Doe_CV.yaml --dont-generate-pdf --dont-generate-html --dont-generate-markdown
# Override fields from the CLI without editing the YAML
rendercv render cv.yaml --cv.name "Jane Doe" --design.theme "moderncv"
```
## YAML Structure
A RenderCV input has four sections. Only `cv` is required — the others have sensible defaults.
```yaml
cv: # Your content: name, contact info, and all sections
design: # Visual styling: theme, colors, fonts, margins, spacing, layouts
locale: # Language: month names, phrases, translations
settings: # Behavior: output paths, bold keywords, current date
```
**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:
```bash
# Single self-contained file (all sections in one file)
rendercv render John_Doe_CV.yaml
# Separate files: CV content + design + locale loaded independently
rendercv render cv.yaml --design design.yaml --locale-catalog locale.yaml --settings settings.yaml
```
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
```python
class RenderCVModel(BaseModelWithoutExtraKeys):
cv: Cv = pydantic.Field(default_factory=Cv, title='CV', description='The content of the CV.')
design: Design = pydantic.Field(default_factory=ClassicTheme, title='Design')
locale: Locale = pydantic.Field(default_factory=EnglishLocale, title='Locale Catalog')
settings: Settings = pydantic.Field(default_factory=Settings, title='RenderCV Settings', description='The settings of the RenderCV.')
```
### 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.
```python
class Cv(BaseModelWithoutExtraKeys):
name: str | None = pydantic.Field(default=None, examples=['John Doe', 'Jane Smith'])
headline: str | None = pydantic.Field(default=None, examples=['SoftwarRead the full source on GitHub (opens external page)