Resume builder for academics and engineers with a smart AI assistant

22 Mar, 2026

Share on

What Is Resume as Code?

Your resume is structured data. Treat it like a software project: YAML in, PDF out, Git for version control.

Resume as code means treating your resume like a software project. Your content lives in a structured data file (YAML), a rendering engine handles formatting (Typst), and you track changes with Git. No Word documents, no drag-and-drop editors, no resume_v3_final_FINAL.docx.

The idea comes from infrastructure as code: declare what you want in a file, run a build, get a deterministic output. Applied to resumes, you get reproducibility, clean diffs, automation, and full control over the result.

Why the traditional workflow breaks

Most resume tools are WYSIWYG. Type into a form, pick a template, download a PDF. For developers, this creates real problems:

No version control. Every version is a separate file or an overwritten state in some cloud app. No way to diff, branch, or roll back.

Content and design are tangled together. Change a template and you're re-adjusting content. Your data is stuck inside a proprietary format you can't easily move.

No automation. Multiple resume variants means repeating the same formatting work by hand. There's no make build for resumes.

No validation. Typos, missing dates, broken formatting. You catch these by eyeballing the PDF, if you catch them at all.

How it actually works

The workflow has four parts:

1. Structured data file

Your resume content lives in YAML. Each section is a structured object with defined fields. This file is the single source of truth.

cv:
  name: Jane Smith
  sections:
    experience:
      - company: Stripe
        position: Senior Backend Engineer
        start_date: 2022-03
        end_date: present
        highlights:
          - Designed a payment reconciliation pipeline processing $2B+ monthly

Plain text. Works with any editor, any OS, any version control system.

2. Validation

A schema checks your data before rendering. Missing field? Malformed date? End date before start date? You find out immediately, not after staring at a broken PDF. In RenderCV, this is powered by Pydantic, which enforces types and constraints on every field.

3. Templates

Jinja2 templates control how data maps to layout. Templates define structure (what goes where), while the typesetting engine handles pixel-level rendering. Switch templates without touching your content. Edit content without breaking your layout.

4. Typesetting

The final PDF comes from Typst, a modern typesetting engine. Correct kerning, proper ligatures, balanced whitespace. The output is deterministic: same input, same PDF, every time.

The full pipeline

RenderCV implements all of this end-to-end:

YAML → Pydantic validation → Jinja2 templates → Typst → PDF

Install it:

pip install "rendercv[full]"

Scaffold a new resume:

rendercv new "Jane Smith"

Edit the YAML, then render:

rendercv render jane_smith_cv.yaml

Want a different look? Change the theme field to classic, sb2nov, moderncv, engineeringresumes, or engineeringclassic and re-render. Your content stays the same.

Or skip the CLI entirely and use rendercv.com, which runs the same pipeline in your browser.

Version control changes everything

Once your resume is a text file, Git becomes your resume manager.

git diff shows exactly what changed: which bullet you rewrote, which date you corrected, which skill you added.

Branches let you maintain variants. A backend-focused branch and an ml-focused branch share a common base and diverge only where needed.

Commit history is a complete audit trail. You can trace when you added a role, when you revised a description, and why.

CI/CD for your resume

Once you have a text file with a deterministic build, it fits into CI/CD like any other artifact:

name: Build Resume
on:
  push:
    paths:
      - "resume/*.yaml"
jobs:
  render:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: pip install "rendercv[full]"
      - run: rendercv render resume/cv.yaml
      - uses: actions/upload-artifact@v4
        with:
          name: resume-pdf
          path: rendercv_output/*.pdf

Push your YAML, the pipeline validates it, renders the PDF, and stores the artifact. No manual "render and upload" ceremony. Combined with branches, you can maintain parallel pipelines: a frontend branch and a backend branch each producing a tailored PDF automatically.

Who is this for?

Software engineers, DevOps engineers, data scientists, researchers, open-source contributors. Anyone who already works in terminals and text editors. If you've never used Git or a command line, a traditional resume builder is probably a better fit.

Resume as code isn't universally better. It's specifically better for people who think in structured data and version-controlled workflows.

RenderCV is open source (MIT license, 16,000+ GitHub stars) and free to use. Your resume directly affects your career. It deserves the same rigor you apply to your code.

Try it at rendercv.com

Share this article