Customizing the brilliant-cv template?

Hello!

I’m currently using the brilliant-cv package and have been enjoying it However, I’d like to customize and extend it to better suit my needs.

Could you please advise on the best practices for customizing this package? Specifically, I’m interested in:

  • Adding custom functions
  • Modifying the date format
  • Other general customization approaches

I’d appreciate any guidance for extending this package while maintaining compatibility with future updates.

Thank you for your assistance!

Hi there,

One way seems to be indicated in the Readme:

Alternatives

If you are not a fan of my approach, you will also have to take a look at:

  • typst-cv: A more minimalistic approach to typesetting this template, thanks munzirtaha for your work!

It seems more designed for customization.

1 Like

Thank you for sharing your template!

Hi! I’m the creator of brilliant-cv and just arrive in this forum :_)

The answer depends on what you want to customize. There are two layers:


Layer 1: Things you already own (no package modifications needed)

The template/ directory is entirely yours after typst init. You can freely:

  • Date format in entries: just pass whatever string you want as the date parameter:
    #cv-entry(
      title: [Software Engineer],
      date: [January 2023 – Present],  // any format you like
      ...
    )
    
  • Date in cover letter: override in your letter.typ:
    #show: letter.with(metadata, date: "15 March 2026", ...)
    
  • Define helper functions: put them directly in your module files (modules_en/professional.typ, etc.) — these are plain Typst files you own
  • Layout/style: all visual knobs (colors, fonts, spacing, paper size) live in metadata.toml

Layer 2: Modifying the package’s core functions

If you want to change things in src/ (entry layout, section styles, etc.), you need a local fork (You may follow the CONTRIBUTING.md in my repository for more detailed instructions):

  1. Clone the repo:

    git clone https://github.com/yunanwg/brilliant-CV.git
    cd brilliant-CV
    
  2. Install utpm, then link the local copy so Typst uses it instead of the cached version:

    just link
    # or: utpm ws link --force --no-copy
    
  3. Now edit anything in src/ and your changes take effect immediately. Run just dev for watch mode.

The downside of this approach is that you maintain a fork — pulling upstream changes requires a manual merge. The upside is full control.


Staying compatible with updates

  • Template layer (Layer 1): always safe. The public API (cv-entry, cv-section, etc.) follows semantic versioning and we keep backward-compatible aliases when renaming parameters.
  • Fork approach (Layer 2): you own the risk. We use conventional commits and keep a clean git history, so merging upstream changes is usually straightforward.

If something you need isn’t configurable today, feel free to open a feature request or PR — we’re generally happy to add new metadata.toml knobs for reasonable customization needs rather than forcing everyone to fork.