vitae is a resume/CV generator in Guile Scheme. You write your resume or cover letter as a Scheme data value; vitae renders it to HTML, LaTeX, Typst, Markdown, or JSON Resume.
A resume is a Scheme file whose last expression is a <resume> record. vitae new <path> (or vitae new --letter <path>) scaffolds a runnable starting point.
Most renderers (HTML, LaTeX, Typst, Markdown) drive a generic walker over the document, so look-and-feel is customised by inheriting from the format's default walker and overriding only the slots you care about — primitives, document chrome, or per-element rendering. JSON Resume uses its own whole-document backend instead.
Built-in renderers: html, latex, typst, markdown, and json. Run vitae list-renderers to list them.
A minimal resume:
(use-modules (vitae data))
(make-resume
#:person (make-person #:name "Jane Doe" ...)
#:sections (list ...))
Build it:
vitae build my-resume.scm --renderer typst -o out.typ
From a fresh checkout:
./bootstrap && ./configure && make sudo make install
Or via Guix:
guix install -f guix.scm
GPL-3.0-or-later
vitae is developed using the Git version control system. The official repository is hosted at https://git.sr.ht/~campbellr/vitae.
To clone the repository, run:
git clone https://git.sr.ht/~campbellr/vitae
For full details, see the README at https://git.sr.ht/~campbellr/vitae.
Patches and bug reports welcome — see the repository for details.