Directory macros/luatex/latex/jsonresume
JSON Resume LaTeX Package
A minimal LuaLaTeX package for rendering JSON Resume data into clean, professional resumes.
Features
- Full JSON Resume Schema Support: All 12 sections (basics, work, volunteer, education, awards, certificates, publications, skills, languages, interests, references, projects)
- Load from File or URL: Local JSON files or remote URLs
- Schema Validation: Strict mode warns about schema violations
- Clean FAANG-style Formatting: Professional typography with no distracting design elements
- Customizable Section Titles: Override default section headers
Requirements
- LuaLaTeX (part of TeX Live or MiKTeX)
- curl (for URL loading, pre-installed on most systems)
Installation
- Copy
jsonresume.styandjsonresume.luato your project directory, or - Install to your local texmf tree:
mkdir -p ~/texmf/tex/latex/jsonresume cp jsonresume.sty jsonresume.lua ~/texmf/tex/latex/jsonresume/
Quick Start
\documentclass[11pt,letterpaper]{article} \usepackage[margin=0.5in]{geometry} \usepackage{jsonresume} \begin{document} % Load from URL \resumefromurl{https://example.com/resume.json} % Or load from local file % \resumefromfile{resume.json} % Render all sections \renderresume \end{document}
Compile with:
lualatex --shell-escape yourfile.tex
Commands
Loading Data
| Command | Description |
|---|---|
\resumefromfile{path} |
Load resume from a local JSON file |
\resumefromurl{url} |
Load resume from a remote URL |
Rendering Sections
| Command | Description |
|---|---|
\renderresume |
Render all available sections in standard order |
\renderresumecore |
Render core sections only (basics, work, education, skills) |
\resumebasics |
Render name, contact info, and summary |
\resumework[title] |
Render work experience |
\resumevolunteer[title] |
Render volunteer experience |
\resumeeducation[title] |
Render education |
\resumeawards[title] |
Render awards and honors |
\resumecertificates[title] |
Render certifications |
\resumepublications[title] |
Render publications |
\resumeskills[title] |
Render skills |
\resumelanguages[title] |
Render languages |
\resumeinterests[title] |
Render interests |
\resumereferences[title] |
Render references |
\resumeprojects[title] |
Render projects |
Validation Commands
| Command | Description |
|---|---|
\resumevalidate |
Manually trigger validation |
\resumevalidationsummary |
Print validation summary to document |
\resumewarningcount |
Get number of validation warnings |
Data Access (Advanced)
| Command | Description |
|---|---|
\jrget{path} |
Get a value using dot notation (e.g., \jrget{basics.name}) |
\jrifexists{path}{yes}{no} |
Conditional based on path existence |
Package Options
Strict Mode
Enable strict mode to get warnings about schema violations:
\usepackage[strict]{jsonresume}
In strict mode, the package warns about:
- Unknown top-level sections
- Missing required fields (e.g.,
basics.name) - Invalid date formats (should be YYYY, YYYY-MM, or YYYY-MM-DD)
- Invalid URL formats
- Type mismatches (e.g., string instead of array)
Warnings appear in the LaTeX log file and can be reviewed after compilation.
Custom Layout Example
\documentclass[11pt]{article} \usepackage[strict]{jsonresume} \begin{document} \resumefromfile{resume.json} % Custom order and titles \resumebasics \resumeskills[Technical Expertise] \resumework[Professional Experience] \resumeprojects[Side Projects] \resumeeducation[Academic Background] \resumecertificates[Professional Certifications] \resumelanguages \end{document}
JSON Resume Format
This package supports the full JSON Resume schema. Example:
{
"basics": {
"name": "Jane Doe",
"label": "Software Engineer",
"email": "jane@example.com",
"phone": "+1-555-123-4567",
"url": "https://janedoe.dev",
"summary": "Experienced engineer...",
"location": {
"city": "San Francisco",
"region": "CA",
"countryCode": "US"
},
"profiles": [
{"network": "GitHub", "username": "janedoe", "url": "https://github.com/janedoe"}
]
},
"work": [
{
"name": "Company",
"position": "Engineer",
"startDate": "2020-01",
"highlights": ["Built things", "Led teams"]
}
],
"education": [...],
"skills": [...],
"volunteer": [...],
"awards": [...],
"certificates": [...],
"publications": [...],
"languages": [...],
"interests": [...],
"references": [...],
"projects": [...]
}
Running Tests
cd tests ./run-tests.sh # Skip network tests (URL loading) ./run-tests.sh --skip-network
Development
Building Locally
Build the CTAN package locally:
./scripts/build-ctan.sh 1.0.0
This creates:
dist/jsonresume.zip- Package for manual installationdist/jsonresume-ctan.zip- Package for CTAN submission
Continuous Integration
The project uses GitHub Actions for CI/CD:
- CI workflow (
ci.yml): Runs tests on every push and PR - Release workflow (
release.yml): Creates releases when tags are pushed
Creating a Release
- Update the version in
jsonresume.styif needed - Commit all changes
- Create and push a version tag:
- The release workflow will automatically:
- Run tests
- Build the example PDF
- Create CTAN package
- Create a GitHub release with all artifacts
git tag v1.0.0 git push origin v1.0.0
Publishing to CTAN
Prerequisites
Before submitting to CTAN, ensure:
- Package is stable - All tests pass
- Documentation is complete - README covers all features
- License is clear - MIT license file included
- Example works - Example PDF generates correctly
Submission Steps
- Build the CTAN package:
./scripts/build-ctan.sh 1.0.0
- Go to CTAN Upload: https://ctan.org/upload
- Fill in the submission form:
Field | Value | ——-|——-| Package name | jsonresume | Summary | LuaLaTeX package for rendering JSON Resume data | Description | A LuaLaTeX package that parses JSON Resume files (local or remote URL) and renders professional resumes. Supports the full JSON Resume schema with 12 sections, schema validation, and customizable formatting. | Author | Your name and email | License | MIT | CTAN directory | /macros/luatex/latex/jsonresume | Topics | curriculum-vitae, luatex, json | Home page | Your GitHub repository URL | Bug tracker | Your GitHub issues URL | Repository | Your GitHub repository URL |
- Upload the package: Select
dist/jsonresume-ctan.zip
- Submit and wait: CTAN volunteers will review your submission (usually 1-3 days)
After CTAN Acceptance
Once accepted on CTAN:
- The package will be available at
https://ctan.org/pkg/jsonresume - It will be included in TeX Live and MiKTeX updates
- Users can install via their TeX distribution's package manager
Updating the Package
For updates, follow the same process:
- Increment version number
- Create a new git tag
- Submit updated package to CTAN
- In the upload form, select "Update" instead of "New package"
License
Copyright (c) 2026 Lukas Wolfsteiner <lukas@wolfsteiner.media>
This project is licensed under the MIT License - see the LICENSE file for details.
Download the contents of this package in one zip archive (72.5k).
jsonresume – A minimal LuaLaTeX package for rendering JSON Resume data into LaTeX documents
A minimal LuaLaTeX package for rendering JSON Resume data into clean, professional resumes.
Features
- Full JSON Resume Schema Support
- All 12 sections (basics, work, volunteer, education, awards, certificates, publications, skills, languages, interests, references, projects)
- Load from File or URL
- Local JSON files or remote URLs
- Schema Validation
- Strict mode warns about schema violations
- Clean FAANG-style Formatting
- Professional typography with no distracting design elements
- Customizable Section Titles
- Override default section headers
Requirements
- LuaLaTeX
- Part of TeX Live or MiKTeX
- curl
- For URL loading, pre-installed on most systems
| Package | jsonresume |
| Bug tracker | https://github.com/dotWee/TeXed-JSON-Resume/issues |
| Repository | https://github.com/dotWee/TeXed-JSON-Resume |
| Version | 1.0.0 |
| Licenses | MIT License |
| Copyright | 2026 Lukas Wolfsteiner |
| Maintainer | Lukas Wolfsteiner |
| Contained in | TeX Live as jsonresume |
| Topics | Data manipulation |