GitHub - athola/simple-resume: Generate a simple, elegant PDF/HTML/LaTeX resume from YAML

4 min read Original article ↗

Simple-Resume preview screenshot

Generate polished PDF and HTML resumes from a single YAML file.

PyPI Downloads MIT License Code Quality Linting Test Suite Code Coverage PyPI Version

simple-resume

simple-resume is a Python 3.10+ CLI and library for converting structured YAML into production-ready resumes (PDF, HTML, or LaTeX). Templates and static assets ship with the package such that users can render without needing to create additional content.

Supported platforms

  • Python: 3.10+ (tested in CI)
  • OS: Linux, macOS, Windows. PDF output uses WeasyPrint; ensure Cairo/Pango/GTK are available on your platform (see Usage Guide).

Installation

# With uv (recommended)
uv add simple-resume

# With pip
pip install simple-resume

Why Simple-Resume

  • Keep your resume version-controlled as plain YAML.
  • Swap templates, palettes, and formats without rewriting content.
  • Pure-Python core with shell adapters; effects are testable and side-effect aware.
  • Bundled HTML templates and static assets prevent "TemplateNotFound" errors in wheels/editable installs.

Feature Comparison

Feature simple-resume JSON Resume HackMyResume Resume.io
Open Source
Data Format YAML JSON JSON/FRESH Proprietary
Version Control ✓ Git-friendly ✓ Git-friendly ✓ Git-friendly ✗ Cloud-only
Local Processing ✓ 100% private ✓ 100% private ✓ 100% private ✗ Cloud storage
Template System HTML + Jinja2 JSON themes Multiple formats Web builder
LaTeX Support ✓ Professional
Python API ✓ Native
CLI Tools
Real-time Preview ✓ HTML + auto-reload
Custom Themes ✓ Unlimited ~ Limited ~ Limited ~ Paid only
Color Palettes ✓ Professional ~ Basic ~ Limited
Privacy ✗ Data stored on servers
Setup Time 5 min 10 min 15 min 2 min
Learning Curve Moderate Easy Easy Easiest

Key Advantages

Best for Developers: Version control, automation, Python integration, privacy Best for Privacy: 100% local processing with no data exposure Most Flexible: HTML templates + unlimited customization Professional Output: LaTeX typesetting for academic/technical resumes

Legend: ✓ = Supported, ✗ = Not Supported, ~ = Limited

See Detailed Comparison for full analysis and use case recommendations.

Development setup

git clone https://github.com/athola/simple-resume.git
cd simple-resume
uv sync --dev --extra utils   # or: pip install -e .[dev,utils]

Quick start (CLI)

Create a minimal YAML in resume_private/input/my_resume.yaml:

template: resume_no_bars
full_name: Jane Doe
email: jane.doe@example.com
body:
  Experience:
    - title: Senior Engineer
      company: TechCorp
      start: 2022
      end: Present
      description: |
        - Lead microservices migration
        - Improved latency by 40%

Generate output:

uv run simple-resume generate --format pdf         # PDF
uv run simple-resume generate --format html --open # HTML + open in browser

Built-in templates: resume_no_bars, resume_with_bars, demo.html (see src/simple_resume/shell/assets/templates/html/). Static assets live under .../assets/static/.

Python API

from simple_resume import generate, preview
from simple_resume.shell.generate import GenerateOptions

options = GenerateOptions(formats=["pdf", "html"], template="resume_with_bars")
results = generate("resume_private/input/my_resume.yaml", options)
print(results["pdf"].output_path)

# Browser preview
preview("resume_private/input/my_resume.yaml")

For batch operations:

from simple_resume.shell.session import ResumeSession

with ResumeSession(data_dir="resume_private") as session:
    session.generate_all(format="pdf")

Customization

  • Palettes: --palette "Professional Blue" or --palette path/to/palette.yaml.
  • Custom templates: --template custom.html with --templates-dir /path/to/templates.
  • LaTeX: set config.output_mode: latex and compile with your TeX toolchain (see Usage Guide).
  • Color utilities: simple_resume.core.colors.get_contrasting_text_color for accessibility checks.

Release workflow

Releases are automated via GitHub Actions. To create a new release:

# Tag the version (must start with 'v')
git tag v0.1.2
git push origin v0.1.2

The workflow builds the package, generates a changelog from commit history, and publishes a GitHub release with distribution artifacts.

Workflows & docs

Troubleshooting

  • TemplateNotFound: confirm installation includes packaged assets (bundled in wheels/editable installs); custom templates require --templates-dir.
  • PDF on Linux: install system libs cairo, pango, gdk-pixbuf (WeasyPrint requirement).

Contributing

  1. Follow the Development Guide to set up tools.
  2. Run make lint and make test (or make check-all validate) before opening a PR.
  3. Submit issues or ideas in GitHub Issues or discussions.

License

MIT License. See LICENSE.

Star history

Star History Chart