This guide covers the command-line interface (CLI) and Python API.
The simple-resume CLI generates resumes.
The generate command creates a resume in a specified format.
# Generate a PDF file
uv run simple-resume generate --format pdf
# Generate an HTML file
uv run simple-resume generate --format htmlThe --open flag opens the generated file automatically.
uv run simple-resume generate --format pdf --openThe --browser flag specifies a browser for opening HTML files.
uv run simple-resume generate --format html --browser firefoxThe --data-dir argument processes all YAML files within a specified directory.
uv run simple-resume generate --data-dir my_resumes --format htmlDirectory names matching input are detected case-insensitively (input/, Input/, INPUT/), so the grandparent-directory logic works on case-preserving filesystems such as macOS HFS+ and Windows NTFS.
simple-resume supports importing JSON Resume files (.json from jsonresume.org). Drop a JSON Resume file into your input directory and simple-resume will automatically convert it at load time.
Schema reference: v1.0.x JSON Resume schema is supported.
# Place your JSON Resume in the input folder
cp my-resume.json resume_private/input/
# Generate - automatic conversion happens at load time
uv run simple-resume generate --format pdfThe importer converts:
- Key content (basics, work, education, projects)
- JSON Resume highlights to markdown bullet points
- Required simple-resume structure (template, config)
- JSON Resume fields to simple-resume equivalents
Field mapping (partial):
| JSON Resume | simple-resume |
|---|---|
basics.name |
full_name |
basics.email |
email |
basics.phone |
phone |
basics.url |
web |
work[] |
body.Experience |
education[] |
body.Education |
projects[] |
body.Projects |
skills[] |
body.Skills |
The conversion is not 1:1 — some JSON Resume fields may not map directly. Review the converted output and adjust as needed.
The screen command scores a resume against a job description using multiple NLP algorithms.
# Basic screening with text output
uv run simple-resume screen my_resume.yaml job_description.txt
# Generate a YAML report
uv run simple-resume screen my_resume.yaml job.txt --format yaml --output report.yaml
# Use specific scorer only
uv run simple-resume screen resume.yaml job.txt --scorers tfidf
# Verbose output with detailed breakdown
uv run simple-resume screen resume.yaml job.txt --verbose
# Batch mode: rank all resumes in a directory against a job description
uv run simple-resume screen resumes_dir/ job.txt --batch
# Batch mode with top-N filtering
uv run simple-resume screen resumes_dir/ job.txt --batch --top 5
# Batch mode with YAML report output
uv run simple-resume screen resumes_dir/ job.txt --batch --format yaml --output rankings.yamlBatch mode (--batch) treats the resume argument as a directory. All files with supported suffixes (.txt, .md, .yaml, .yml, .json) are scored and ranked by overall score. Use --top N to limit output to the top N results.
Output formats:
text(default): Human-readable text reportyaml: Structured YAML report for automationjson: Machine-readable JSON report
Scorer options:
all(default): Uses TF-IDF, Jaccard, and Keyword scorers combinedtfidf: Statistical term frequency analysis onlyjaccard: N-gram phrase overlap onlykeyword: Exact keyword matching only
Exit codes:
0: Score >= 50% (passing)1: Score < 50% or error occurred
Import the generate and preview functions for programmatic use.
All symbols exported from simple_resume and simple_resume.api.* modules are covered by semantic versioning guarantees:
- Stable: No breaking changes within a major version
- Documented: Public APIs include docstrings
- Typed: Full type annotations for IDE support
Internal modules (simple_resume.core.*, simple_resume.shell.*) are implementation details and may change without notice.
The generate function accepts a resume file path and a GenerationConfig object.
from simple_resume import generate
from simple_resume.core.models import GenerationConfig
# Generate both PDF and HTML formats
results = generate(
"resume_private/input/my_resume.yaml",
GenerationConfig(formats=["pdf", "html"])
)The preview function opens a resume in your web browser without saving it to a file.
from simple_resume import preview
preview("resume_private/input/my_resume.yaml", open_after=True)Set output_mode: latex in the config section of your YAML file to generate a .tex file. This allows for typesetting, custom fonts, and mathematical equations, often used for academic and research applications.
config:
output_mode: latexWhen this setting is enabled, the generate command will produce a .tex file instead of an HTML or PDF file.
Install a LaTeX distribution:
- TeX Live (cross-platform)
- MiKTeX (Windows)
- MacTeX (macOS)
Compile the generated .tex file with a LaTeX engine.
# 1. Generate the LaTeX source file.
uv run simple-resume generate
# 2. Compile the .tex file with a LaTeX engine.
pdflatex resume_output.texFor better font support, use xelatex or lualatex.
xelatex resume_output.tex
lualatex resume_output.texA color scheme can be specified in the YAML file or as a command-line argument.
# In the YAML file
config:
color_scheme: "Professional Blue"# From the command line
uv run simple-resume generate --palette resume_private/palettes/my-theme.yamlSee the Color Schemes Guide.
The layout of template elements can be adjusted in the config section of the YAML file. Icon-related values are specified as numbers (unit: mm).
config:
section_icon_circle_size: 7.8
section_icon_circle_x_offset: -0.5
section_icon_design_size: 4
section_icon_design_x_offset: -0.1
section_icon_design_y_offset: -0.4
section_heading_text_margin: -6Font sizes can be customized in the config section. Values are specified in points (pt).
config:
description_font_size: 8.5 # Body text in experience/education entries
date_font_size: 9 # Primary date labels
sidebar_font_size: 8.5 # Sidebar content
bold_font_weight: 600 # Weight for bold textThe tool validates the following fields:
full_name: Must not be empty.email: Must be a valid email address.- Date fields: Must be in
YYYYorYYYY-MMformat.