Configuration Reference — profile_<name>/metadata.toml¶
Each profile_<name>/metadata.toml is a complete, self-contained configuration for that CV variant. There is no shared root or merge mechanism — looking at one file shows the full effective config for that profile.
Switch profiles at compile time:
To add a new profile, copy profile_en/ to profile_<new>/ and edit the fields that differ.
How to read this page¶
The reference below is the canonical template/profile_en/metadata.toml included verbatim — comments in the TOML are the field documentation. This file is the source of truth: the docs site and the offline PDF reference (docs/pdf/docs.typ Section 6) both pull from it via live snippets, so you can never read a stale field description here.
Every other shipped profile (profile_fr, profile_de, profile_it, profile_zh) follows the same schema; differences are in field values, not field names.
Annotated reference¶
#:schema https://raw.githubusercontent.com/yunanwg/brilliant-CV/main/metadata.toml.schema.json
# Profile: English. Each profile_<name>/metadata.toml is a complete, self-
# contained CV configuration. Switch profiles at compile time:
# typst compile cv.typ --input profile=fr
# To add a new profile, copy this directory to profile_<name>/ and edit
# the fields that differ.
# Italic tagline displayed below your name and contact info
header_quote = "Experienced Data Analyst looking for a full time job starting from now"
# Text shown in the left side of the footer on CV pages
cv_footer = "Curriculum vitae"
# Text shown in the left side of the footer on cover letter pages
letter_footer = "Cover letter"
[layout]
# Accent color used for section titles, icons, and highlights in the rendered PDF
# Preset: skyblue, red, nephritis, concrete, darknight — or any hex like "#1E90FF"
awesome_color = "skyblue"
# Controls vertical spacing; increase to spread out sections/entries, decrease to compact
before_section_skip = "1pt"
# Vertical space before each entry within a section
before_entry_skip = "1pt"
# Vertical space before entry description text
before_entry_description_skip = "1pt"
# Page dimensions and margins applied to the PDF output. Possible values: a4 (default), us-letter
paper_size = "a4"
# Width of the right-side date column in entries. Tune per locale (zh
# benefits from ~4.7cm, fr from ~3.4cm, it from ~3.9cm).
date_width = "3.6cm"
# Overrides base font size for body text; affects overall density of content
#font_size = "9pt"
[layout.fonts]
# Body and entry text. List multiple fonts to mix scripts — typst's
# codepoint-level fallback picks per character (e.g. add "Heiti SC"
# after "Source Sans 3" for a Latin+CJK profile).
regular_fonts = ["Source Sans 3"]
# Font used for the name and section headings in the header
header_font = "Roboto"
[layout.header]
# Aligns the entire header block (name, info, quote). Possible values: left, center, right
header_align = "left"
# false hides the photo and gives full width to name/info
display_profile_photo = true
# "50%" = circle, "0%" = square, "10%" = rounded corners
profile_photo_radius = "50%"
# Font size for the contact-info line (email, phone, links) in the header
info_font_size = "10pt"
[layout.entry]
# true = company name bold on top, role below; false = role bold on top
# Must be true to use cv-entry-start / cv-entry-continued pattern
display_entry_society_first = true
# false hides all company/organisation logos in entries
display_logo = true
[layout.section]
# How the section title is highlighted:
# "first-letters" (default) - first N letters in accent color, rest in black (Latin convention)
# "full" - the whole title in accent color (CJK / non-Latin convention)
# "none" - the whole title in black, no accent
title_highlight = "first-letters"
# Number of leading characters to render in accent color when
# title_highlight = "first-letters". Ignored for the other modes.
title_highlight_letters = 3
[layout.footer]
# true shows "1/2" style page numbers in the footer
display_page_counter = false
# false removes the footer entirely (no page text, no counter)
display_footer = true
[inject]
# Hidden text injected into the PDF for ATS keyword matching (invisible to readers)
# custom_ai_prompt_text = "Custom prompt text here..." # Uncomment to add a custom ATS prompt string
# Hidden keywords injected into PDF metadata for ATS keyword matching (invisible to readers)
injected_keywords_list = ["Data Analyst", "GCP", "Python", "SQL", "Tableau"]
[personal]
# Your first name, displayed in the header
first_name = "John"
# Your last name, displayed in the header
last_name = "Doe"
# (Optional) display_name overrides the Latin "first (light) + last (bold)"
# split with a single styled string. Use this for CJK profiles or any
# profile where the split treatment feels wrong:
# display_name = "王道尔"
# Your mailing address, used as default sender-address in the cover letter
# address = "123 Main St, San Francisco, CA 94102"
# The order of entries below controls the display order of icons/links in the header.
# Custom entries use a `custom-<descriptive-name>` key (e.g. custom-degree,
# custom-cert). Descriptive names keep `custom-icons:` mapping in cv.typ readable.
[personal.info]
# Shown as clickable icon in header; auto-links to github.com/<value>
github = "yunanwg"
# Shown as phone icon in header; displayed as-is with a tel: link
phone = "+33 6 12 34 56 78"
# Shown as envelope icon in header; auto-links to mailto:<value>
email = "john.doe@me.org"
# Shown as clickable icon in header; auto-links to linkedin.com/in/<value>
linkedin = "johndoe"
# Shown as clickable icon in header; auto-links to gitlab.com/<value>
gitlab = "yunanwg"
# Shown as clickable globe icon in header; auto-links to https://<value>
homepage = "johndoe.dev"
# Shown as ORCID icon in header; auto-links to orcid.org/<value>
orcid = "0000-0000-0000-0000"
# researchgate = "John-Doe" # Shown as a clickable ResearchGate icon in header
# Shown as map-marker icon in header; displayed as plain text (no link)
location = "San Francisco, CA"
# extraInfo = "Available for remote work" # Shown as extra text with an info icon in header
# Insert a line break in the header info, splitting icons across two lines
#linebreak = ""
# Custom info with awesome icon
[personal.info.custom-degree]
awesomeIcon = "graduation-cap" # See https://typst.app/universe/package/fontawesome/
# Display text shown next to the icon in the header
text = "PhD in Data Science"
# URL the icon/text links to; omit for non-clickable entries
link = "https://www.example.com"
# Custom info with image icon
# To use a custom image icon, pass it via custom-icons in cv.typ:
# custom-icons: ("custom-cert": image("assets/my-icon.png"))
[personal.info.custom-cert]
awesomeIcon = "certificate"
text = "AWS Certified"
link = "https://aws.amazon.com/certification/"
Schema¶
A JSON Schema is also published at metadata.toml.schema.json. If your editor supports #:schema directives (helix, neovim with taplo, VS Code with Even Better TOML), you'll get inline validation, autocomplete, and error highlighting on every metadata.toml.
The schema is enforced at compile time by cv() and letter() for v3-removed fields (panic-with-migration-message — see Migration Guide) but TOML key typos are silently ignored by typst's TOML parser, so the JSON Schema is your first line of defense against headerAlign (wrong) vs header_align (correct).