Your first PDF in five steps.

This guide takes you from a fresh machine to a compiled CV and a tailored branch. Follow it in order; each step builds on the previous one.

Preview the output PDF before you start.

Prerequisites

Install all three before continuing. Open a new terminal after each installer so PATH updates take effect.

If latexmk is not found after installing LaTeX

latexmk is a Perl script that drives the LaTeX compiler. It is not always installed automatically, even when LaTeX itself is present.
On Windows, open MiKTeX Console → Packages and install latexmk; also install Strawberry Perl.
On macOS, MacTeX includes it; if it is missing, install through TeX Live Utility.
On Linux, sudo apt install latexmk adds it separately from the base TeX package.
After installing, open a new terminal and run latexmk --version to confirm it resolves.

Install commands by platform

Windows (PowerShell)

winget install --id Git.Git -e --source winget
winget install --id astral-sh.uv -e
# Then install MiKTeX from https://miktex.org and Strawberry Perl from https://strawberryperl.com
# Open a new PowerShell window after installation, then verify:
Get-Command uv, git, latexmk, pdflatex, perl

macOS (Terminal)

# Install Git via Xcode Command Line Tools (prompts automatically on first use)
xcode-select --install
# Install uv
curl -Ls https://astral.sh/uv/install.sh | sh
# Install MacTeX from https://www.tug.org/mactex/ then verify:
command -v uv git latexmk pdflatex perl

Linux (Ubuntu / Debian)

sudo apt update
sudo apt install git texlive-latex-base texlive-latex-recommended latexmk perl
curl -Ls https://astral.sh/uv/install.sh | sh
# Open a new terminal, then verify:
command -v uv git latexmk pdflatex perl

Step 1 of 5

Install VITA and open the starter

Install the CLI from the public package index:

uv tool install vita-cv

If vita is not found afterwards, run uv tool update-shell and reopen your terminal. Use uv tool list to confirm the installed version. For exact version reproduction use uv tool install vita-cv==2.0.2.

Download starter.zip

Extract the archive into a new directory. The ZIP contains a single vita-cv-starter/ folder with five files: main.tex, resume.cls, job.md, README.md, and a hidden .gitignore.

Why doesn't vita init create main.tex?

vita init creates local configuration in .vita/ and initializes Git — it does not create a CV document. That is expected behavior. The starter ZIP provides a working main.tex, its resume.cls layout, job.md, and .gitignore so you have something to build immediately. Download it, extract it into your project folder, and then run vita init.

Extract and enter the project directory:

Expand-Archive -LiteralPath .\starter.zip -DestinationPath .\my-cv
Set-Location .\my-cv\vita-cv-starter
unzip starter.zip -d my-cv
cd my-cv/vita-cv-starter

Then, inside the extracted folder, verify your prerequisites and initialize the project:

git --version
latexmk --version
vita init

Stop and fix a missing tool before continuing.


Step 2 of 5

Configure and commit the base

Open .vita/config.json in your editor. Find the author field and set it to jordan-lee. This value controls the output filename; it does not change the name inside main.tex.

"author": "jordan-lee"

Leave the other generated fields unchanged. Save valid JSON.

Check that .gitignore exists and excludes .vita/ and out/:

git status --short
git check-ignore .vita/config.json .vita/.env out/check.pdf

Status should list only .gitignore, README.md, job.md, main.tex, and resume.cls as untracked. The ignore check should print all three paths. Never stage .vita/, credentials, or generated PDFs.

First commit on this machine? Set your Git identity.

Git records a name and email address with every commit. If you have not set these on this machine, the first git commit will fail with an error asking you to configure them. Run these two commands in your project folder first — use your own name and email:

git config user.name "Your Name"
git config user.email "you@example.com"

These values are recorded in commit metadata inside this repository. They are not sent anywhere by VITA.

Commit the base CV, build the PDF, and create an application branch:

git add .gitignore main.tex resume.cls job.md README.md
git commit -m "Create base CV"
git branch -M master
vita build
vita new etp company "software engineer"

After vita build, check that out/cv-jordan-lee.pdf exists and opens correctly — some VITA 2.0.2 failure paths return without a nonzero exit code, so inspect the file directly.

At the vita new prompt: press Enter at Base branch? [gen-swe]:. VITA creates the missing gen-swe base from master, then creates and checks out etp-company-swe. The command is interactive — it does not change the CV content on its own.


Step 3 of 5

Tailor the CV manually

Read job.md — it describes a fictional backend Python engineering role at a fictional company. In main.tex, find the summary sentence and replace it:

Software engineer with experience in Python services, SQL data, automated tests, and developer documentation.
Software engineer building Python HTTP APIs with SQL, input validation, and automated tests.

Save the file, inspect the diff, rebuild, and commit:

git diff
vita build

Open out/cv-jordan-lee.pdf. Confirm the revised summary is present, the document is readable, and it fits on one page. The output filename is reused on each branch — save a separate copy if you need to keep both PDFs. Git tracks the source, not the ignored PDF.

git add main.tex
git commit -m "Tailor CV for software engineering role"
vita diff company
vita status
git status --short

vita diff company compares the committed LaTeX branch with its base. The final Git status should be clean. Nothing in this walkthrough uploads the CV or submits an application.


Step 4 of 5 — optional

Generate AI prompts (no account needed)

The PDF above needs no AI account. If you want suggestions, VITA can generate a prompt file you then give to any assistant yourself:

vita analyze
vita adapt

Each command writes .vita/current_prompt.md; the next command replaces that file. Read the analysis prompt before generating the adaptation prompt if you want both. Prompt-only mode does not call any AI service or edit your CV — it just produces the file. Sharing that file with an assistant sends its contents to that service.

Automatic AI: what you need to configure first

The --auto flag sends your CV content and job description to an external AI provider. Before using it, you need: a supported provider entry in .vita/extensions.json, a credential set via VITA's key commands or in .vita/.env, and a model name that is currently available to your account — do not assume default model names remain available. Consult the package documentation on PyPI for configuration keys and supported providers in version 2.0.2. Provider costs and usage limits are separate from VITA itself.

Automatic adaptation can overwrite main.tex. Always commit a clean baseline first, then review git diff, rebuild, and inspect the PDF before committing or sharing the output.


Step 5 of 5

Replace fictional data with your own

The starter uses Jordan Lee and a fictional company as placeholders. Before using this for a real application:


Troubleshooting


Where to go next

You built the PDF. Now make it yours.

Replace the fictional data with your own, create a branch for a real application, and keep every version in Git.

Open the quickstart