Changelog
Source:NEWS.md
curriculr 0.3.1.9000
New features
-
cv_render_section()now aggregates multi-row entries automatically. Rows sharing the sametitle,unit,startMonth,startYear,endMonth,endYear, andwherevalues are treated as a single entry: one header renders at the top with the date and location right-aligned, and eachdetailvalue appears as an indented bullet beneath it. Single-detail entries continue to render exactly as before. Row order in the workbook controls bullet order. This behavior applies to all sections, not just experience.
Improvements
create_cv()now writes the intermediateCV.qmdto a temporary directory rather than the workbook folder. The file is never visible to the user and is cleaned up automatically. As a result,overwriteno longer has any effect in render mode – re-runningcreate_cv()on an existing project requires no flags.Fixed bullet spacing in multi-responsibility CV entries. An earlier implementation wrapped each bullet in a block-level
#pad(), causing the gap between bullets to inherit from the document’spar.spacingrather than from the package. Spacing is now set explicitly, which also makes rendered output consistent across different rendering environments. Thanks for @orestesI for the bug report
curriculr 0.3.1
Bug fixes
cv_contact_line(): whenuse_icons = "fontawesome", contact fields now render as icons only. Previously the icon and the text label both appeared, producing redundant output like the globe icon followed by “erwinlares.com”.cv_contact_line(): email addresses no longer render with a spurious backslash before the@symbol in Typst PDF output. The double call totypst_escape()inside theswitch()default arm caused@to be escaped twice, producing a literal backslash in the rendered document. Fixed by removing the innertypst_escape()call so all fields are escaped exactly once (thanks @gygl!).
curriculr 0.3.0
CRAN release: 2026-05-13
Breaking changes
read_cv_data()now requires theopenxlsx2package instead ofreadxl. Removereadxland addopenxlsx2to any explicit dependencies in your own projects that callread_cv_data()directly.create_cv()no longer falls back to a bundled placeholder image whenphoto = NULLin render mode. Omittingphotonow produces a single-column header layout with no image. Supply a path explicitly to restore the two-column layout with a profile photo.
New features
Resume variant.
create_cv()andread_cv_data()gain avariantargument ("cv"or"resume"). Whenvariant = "resume", only rows whereinclude_in_resumeis checked in the workbook are included in the rendered output. Every section sheet now carries aninclude_in_resumecolumn for row-level control.Font Awesome icons.
create_cv()gains ause_iconsargument ("fontawesome"or"none"). When"fontawesome"(the default), contact fields in the CV header are rendered with Font Awesome icons via the Typst@preview/fontawesomepackage. Fields with no icon equivalent fall back to plain text with a warning. The new exported functioncv_contact_line()assembles the contact line and can be called directly in custom templates.Workbook-controlled theming. A new
themesheet in the workbook controls fonts, colors, and page layout. Keys map directly to the Typst style block and the Quartoformat: typst:YAML block, both of which are now injected bycreate_cv()via sentinel substitution. If thethemesheet is absent, built-in defaults are used and individual missing keys are filled from defaults, so partial theme sheets are supported.add_section(). New exported function that adds a new sheet to an existing curriculr workbook and registers it in thesectionscontrol sheet. The new sheet is pre-populated with the standard column spine includinginclude_in_resume. Thesectionsrow is appended or updated in place without touching the sheet’s formatting.No-photo header layout. When
photo = NULL,CV.qmdnow emits a single full-width centered header block instead of a two-column grid with an empty left column.
Improvements
-
read_cv_data()reads thethemesheet as a named character vector keyed by thekeycolumn, parallel to theprofilesheet. ReturnsNULLif the sheet is absent. -
read_cv_data()coerces all section columns to character after import, including numeric year columns and logical boolean columns, giving the rendering pipeline a uniform contract. -
read_cv_data()gains a.coerce_col()internal helper that normalizesNAstrings produced byas.character(NA)back toNA_character_. -
create_cv()injectsvariantanduse_iconsintoCV.qmdas Quarto params so the Quarto subprocess applies the same filtering and icon settings as the calling R session. - The
cv-data-template.xlsxtemplate workbook gains athemesheet with all twelve default theming keys and adescriptioncolumn for in-workbook documentation. Thereadmesheet is updated to document thethemesheet and to reflect thatinclude_in_resumeis now present on all section sheets. - Internal helpers
.cv_theme_defaults(),.resolve_theme(),.build_format_block(),.build_typst_theme_block(), and.fa_icon_map()are added to support theming and icon assembly.
curriculr 0.2.0
Breaking changes
-
create_cv()has been redesigned. The old scaffolding behavior is replaced by two distinct modes triggered by whetherdatais supplied or not.
New features
-
create_cv()scaffold mode (no arguments) copies the template workbook and placeholder image to the current working directory and prints step-by-step instructions. Does not render. -
create_cv()render mode (withdataandphoto) reads the workbook, writesCV.qmd, and rendersCV.pdfinto the same directory as the workbook. - Added
sectionssheet support. The workbook now controls which sections are rendered and in what order. Row order is render order. Deleting a row excludes a section. Adding a row for any sheet that follows the standard column schema renders it automatically. - Added
resolve_date_fun()which mapsdate_funtoken strings ("date","year","month_year","year_only","none") to R date formatting functions. -
typst_escape(),cv_section(), andresolve_date_fun()are now exported. -
inst/templates/CV.qmdsimplified – section rendering is now driven by iterating overcv$sections. The template uses sentinel strings thatcreate_cv()replaces with resolved paths at render time.
Improvements
-
read_cv_data()skips thereadmesheet entirely. -
read_cv_data()validates thesectionssheet column names on read. -
read_cv_data()returns thesectionssheet in row order without sorting. - Non-ASCII characters in cli messages replaced with Unicode escapes for CRAN portability.
curriculr 0.1.0
- Initial release.
-
read_cv_data()reads a curriculr-formatted Excel workbook into a named list of data frames. -
cv_render_section()renders a CV section from a data frame into raw Typst output inside a Quarto document. -
create_cv()scaffolded a new CV project with a template workbook, placeholder image, and ready-to-render Quarto document.