YAML -> LaTeX -> PDF resume builder with strict theme schemas.
Project description
resumex
An easy, YAML-based, theme-driven resume generator. resumex takes your structured data and produces professional LaTeX and PDF resumes with strict schema validation.
Features
- YAML-first: Store your career data in a clean, versionable format.
- Strict Validation: Powered by Pydantic to ensure your data matches your theme's requirements.
- Theme System: Fully customizable layouts using Jinja2 templates.
- Dual Usage: Use it via CLI or as a Python module in your own scripts.
- Smart Compilation: Automatically handles LaTeX runs using
latexmkor falls back to direct engines likepdflatex.
Installation
Requirements
- Python: 3.12 or higher.
- LaTeX: A distribution (like TeX Live, MacTeX, or MiKTeX) providing
latexmk(recommended) orpdflatex.
Using uv (Recommended)
uv tool install resumex-py
Using pip
pip install resumex-py
Quickstart
- Create your resume: Save your data in
resume.yaml(see examples/resume.yaml). - Generate PDF:
resumex build resume.yaml --out build
- Generate TeX only:
resumex tex resume.yaml --out build
Custom Themes
resumex allows you to go beyond the bundled themes by creating your own.
Using a local theme
You can point the generator to a folder containing your theme:
resumex build resume.yaml --theme ./path/to/my-theme
Theme Structure
A theme directory must contain:
theme.yaml: Configuration for allowed sections, templates, and models.templates/main.tex.j2: The main entry point for the resume layout.partials/: Reusable Jinja2 fragments for specific sections.
To start a new theme, copy the default theme data from the package:
cp -r src/resumex/themes_data/default ./my-theme
Module Usage
You can also integrate resumex into your Python applications:
from pathlib import Path
from resumex.engine.pipeline import build_pdf
result = build_pdf(
yaml_path=Path("resume.yaml"),
theme_id="default", # or a path like "./my-theme"
out_dir=Path("output")
)
print(f"Resume generated at: {result.pdf_path}")
Development & Testing
We use uv for development. To run tests:
uv run pytest tests/
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file resumex_py-0.1.0.tar.gz.
File metadata
- Download URL: resumex_py-0.1.0.tar.gz
- Upload date:
- Size: 6.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bea9bc083f122e8dee73311a4f8234a66f09ec5f5ba471127a09ef578298e4ad
|
|
| MD5 |
13e956cc7f75e991da42d4ac93b0ba89
|
|
| BLAKE2b-256 |
dfeea13eb6165f919c0306bf6a31792a33aa5c8adef3146ed153c259041998f4
|
Provenance
The following attestation bundles were made for resumex_py-0.1.0.tar.gz:
Publisher:
publish.yml on rsm-vsivasankaran/resumex
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
resumex_py-0.1.0.tar.gz -
Subject digest:
bea9bc083f122e8dee73311a4f8234a66f09ec5f5ba471127a09ef578298e4ad - Sigstore transparency entry: 814282400
- Sigstore integration time:
-
Permalink:
rsm-vsivasankaran/resumex@0b00d0b696b2f754994197dd8daeee9d0fbdea03 -
Branch / Tag:
refs/tags/v1.2 - Owner: https://github.com/rsm-vsivasankaran
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0b00d0b696b2f754994197dd8daeee9d0fbdea03 -
Trigger Event:
push
-
Statement type:
File details
Details for the file resumex_py-0.1.0-py3-none-any.whl.
File metadata
- Download URL: resumex_py-0.1.0-py3-none-any.whl
- Upload date:
- Size: 10.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2c53edb033bab84ebd1e1f35159d36c3c2aa04b873d0e262f8ae3e41f4518a99
|
|
| MD5 |
6d3f5b2c96141baa96bc2bcfab40fd9b
|
|
| BLAKE2b-256 |
3414e38471dcfb21d7719cb19f7df937303d21d55f7ab79d5ff33c99449e9dac
|
Provenance
The following attestation bundles were made for resumex_py-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on rsm-vsivasankaran/resumex
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
resumex_py-0.1.0-py3-none-any.whl -
Subject digest:
2c53edb033bab84ebd1e1f35159d36c3c2aa04b873d0e262f8ae3e41f4518a99 - Sigstore transparency entry: 814282401
- Sigstore integration time:
-
Permalink:
rsm-vsivasankaran/resumex@0b00d0b696b2f754994197dd8daeee9d0fbdea03 -
Branch / Tag:
refs/tags/v1.2 - Owner: https://github.com/rsm-vsivasankaran
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@0b00d0b696b2f754994197dd8daeee9d0fbdea03 -
Trigger Event:
push
-
Statement type: