CLI Tools
Render your JSON Resume to HTML, PDF, and more from the command line
Overview
JSON Resume can be rendered to HTML using command-line tools. The recommended CLI is resumed, a lightweight, fully-tested Node.js tool that renders your resume using any compatible theme.
All official JSON Resume themes are compatible with resumed and can be used to generate beautiful HTML resumes from your resume.json file.
Installation
Install resumed globally using npm:
npm install -g resumedOr use it directly with npx (no installation required):
npx resumed --helpBasic Usage
The basic command to render a resume requires a resume.json file and a theme:
# Render to HTML (outputs to stdout) resumed render resume.json --theme jsonresume-theme-even # Save to a file resumed render resume.json --theme jsonresume-theme-even > resume.html # Or use the --output flag resumed render resume.json --theme jsonresume-theme-even --output resume.htmlUsing Themes
Themes are npm packages that transform your JSON Resume into HTML. To use a theme, first install it:
# Install a theme npm install jsonresume-theme-even # Then render with it resumed render resume.json --theme jsonresume-theme-evenTheme Naming Convention
All JSON Resume themes follow the naming pattern jsonresume-theme-{name}. When specifying a theme, you can use either the full package name or just the theme name:
# These are equivalent resumed render resume.json --theme jsonresume-theme-even resumed render resume.json --theme evenUsing Local Themes
You can also use themes from a local directory, which is useful during theme development:
# Use a local theme resumed render resume.json --theme ./path/to/my-theme # For themes with a build step, use the dist directory resumed render resume.json --theme ./my-theme/distOfficial Themes
JSON Resume provides many official themes that are tested and maintained. Here are some popular ones:
Scoped Themes (@jsonresume)
These themes are published under the @jsonresume scope on npm:
# Install scoped themes npm install @jsonresume/jsonresume-theme-professional npm install @jsonresume/jsonresume-theme-creative-studio npm install @jsonresume/jsonresume-theme-consultant-polished npm install @jsonresume/jsonresume-theme-tokyo-modernist # Use them resumed render resume.json --theme @jsonresume/jsonresume-theme-professionalCommunity Themes
Many community-maintained themes are available on npm. Search for jsonresume-theme on npm to discover more:
# Popular community themes npm install jsonresume-theme-even npm install jsonresume-theme-elegant npm install jsonresume-theme-kendall npm install jsonresume-theme-stackoverflow npm install jsonresume-theme-macchiatoPreview Themes Online
You can preview how your resume looks with different themes on the JSON Resume Registry. Just host your resume and append ?theme={name} to the URL.
PDF Export
To generate a PDF, you can use browser-based tools or Puppeteer. The resumed CLI supports PDF generation with Puppeteer:
# Install Puppeteer (required for PDF) npm install puppeteer # Generate PDF resumed render resume.json --theme jsonresume-theme-even --type pdf --output resume.pdfAlternatively, you can render to HTML and use any HTML-to-PDF tool:
# Using wkhtmltopdf resumed render resume.json --theme jsonresume-theme-even | wkhtmltopdf - resume.pdf # Using Chrome headless resumed render resume.json --theme jsonresume-theme-even > resume.html google-chrome --headless --print-to-pdf=resume.pdf resume.htmlValidation
Before rendering, you can validate your resume.json against the official JSON Resume schema:
# Validate your resume resumed validate resume.json # The command exits with code 0 if valid, non-zero otherwise resumed validate resume.json && echo "Valid!" || echo "Invalid!"Programmatic API
You can also use resumed programmatically in your Node.js applications:
import { render } from 'resumed'; import * as theme from 'jsonresume-theme-even'; import { readFileSync } from 'fs'; // Load your resume const resume = JSON.parse(readFileSync('resume.json', 'utf-8')); // Render to HTML const html = await render(resume, theme); console.log(html);Using Themes Directly
Each theme exports a render function that you can call directly:
import { render } from 'jsonresume-theme-even'; import { readFileSync } from 'fs'; const resume = JSON.parse(readFileSync('resume.json', 'utf-8')); const html = render(resume); // Write to file import { writeFileSync } from 'fs'; writeFileSync('resume.html', html);Creating Your Own Theme
Want to create a custom theme? Check out our Theme Development Guide to learn how to build themes that work with resumed and the JSON Resume ecosystem.
The basic requirements for a theme are:
- Export a
render(resume)function that returns HTML - Name your package
jsonresume-theme-{name} - Publish to npm for others to use
// Minimal theme example export function render(resume) { return ` <!DOCTYPE html> <html> <head> <title>${resume.basics?.name || 'Resume'}</title> </head> <body> <h1>${resume.basics?.name}</h1> <p>${resume.basics?.label}</p> <!-- Add more sections... --> </body> </html> `; }Troubleshooting
Theme Not Found
Make sure the theme is installed in your project or globally:
# Install locally npm install jsonresume-theme-even # Or globally npm install -g jsonresume-theme-evenModule Errors
Some themes require peer dependencies. Install them if you see module errors:
# Common peer dependencies npm install react react-dom styled-componentsGetting Help
If you encounter issues, check the resumed GitHub issues or the JSON Resume repository.
Quick Reference
# Install resumed npm install -g resumed # Validate resume resumed validate resume.json # Render to HTML resumed render resume.json --theme jsonresume-theme-even --output resume.html # Render to PDF (requires puppeteer) resumed render resume.json --theme jsonresume-theme-even --type pdf --output resume.pdf # List available options resumed --help resumed render --help