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