A data-driven resume generator that separates content from formatting. Define your resume in a simple JSON file and compile it into a polished PDF — or export a standalone .tex file for cloud-based compilation on platforms like Overleaf.
- Python 3.8+ with a virtual environment
- Pydantic for data validation
- TeX Distribution with
pdflatexandpythontex— only required for PDF output (e.g., TeX Live or MacTeX)
# Clone the repository
git clone https://github.com/your-username/LaTex-Resume-Generator.git
cd LaTex-Resume-Generator
# Create a virtual environment and install dependencies
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtAll output is written to the output/ directory and named after the input JSON file (e.g. input/john.json → output/john.pdf or output/john.tex). The directory is created automatically if it doesn't exist.
./build.sh [--pdf|--tex] [path/to/data.json]
| Flag | Description |
|---|---|
--pdf |
Compile to PDF using a local LaTeX installation (default) |
--tex |
Export a standalone .tex file, ready to upload to Overleaf or similar |
# Uses input/default.json by default → output/default.pdf
./build.sh
# With your own data
./build.sh input/myresume.json # → output/myresume.pdf
./build.sh --pdf input/myresume.json # explicit, same resultNo LaTeX installation required — upload the output to Overleaf or any cloud LaTeX compiler.
./build.sh --tex # → output/default.tex
./build.sh --tex input/myresume.json # → output/myresume.tex./clean.shThe JSON has two top-level keys: header and sections. See schema.json for the full JSON Schema, or use the structure below as a reference.
| Field | Type | Required | Description |
|---|---|---|---|
name |
string |
Yes | Your full name |
links |
array |
Yes | Contact links as [text, url] pairs |
centered |
boolean |
No | Center-align the header (default: false) |
targetRoles |
string[] |
No | Target job titles shown below name |
Each section has a title and an array of elements:
| Field | Type | Required | Description |
|---|---|---|---|
header |
string[] |
No | [left, right] — e.g., company name and dates |
headerLink |
string |
No | URL attached to the header |
subheader |
string[] |
No | [left, right] — e.g., role and location |
content |
string[] |
Yes | 1 item = paragraph, multiple items = bullet list |
Content strings can include LaTeX formatting like \textbf{} and \underline{}.
MIT