Clicky

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 resumed

Or use it directly with npx (no installation required):

npx resumed --help

Basic 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.html

Using 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-even

Theme 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 even

Using 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/dist

Official 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-professional

Community 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-macchiato

Preview 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.pdf

Alternatively, 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.html

Validation

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-even

Module Errors

Some themes require peer dependencies. Install them if you see module errors:

# Common peer dependencies
npm install react react-dom styled-components

Getting 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