HackMyResume is a dev-friendly, local-only Swiss Army knife for resumes and CVs


Create polished résumés and CVs in multiple formats from your command line or
shell. Author in clean Markdown and JSON, export to Word, HTML, PDF, LaTeX,
plain text, and other arbitrary formats. Fight the power, save trees. Compatible
with FRESH and JRS resumes.

HackMyResume is a dev-friendly, local-only Swiss Army knife for resumes and CVs.
Use it to:

  1. Generate HTML, Markdown, LaTeX, MS Word, PDF, plain text, JSON, XML,
    YAML, print, smoke signal, carrier pigeon, and other arbitrary-format resumes
    and CVs, from a single source of truth—without violating DRY.
  2. Convert resumes between FRESH and JSON Resume formats.
  3. Validate resumes against either format.

HackMyResume is built with Node.js and runs on recent versions of OS X, Linux,
or Windows.


  • OS X, Linux, and Windows.
  • Store your resume data as a durable, versionable JSON or YAML document.
  • Generate polished resumes in multiple formats without violating DRY.
  • Output to HTML, Markdown, LaTeX, PDF, MS Word, JSON, YAML, plain text, or XML.
  • Validate resumes against the FRESH or JSON Resume schema.
  • Support for multiple input and output resumes.
  • Use from your command line or desktop.
  • Free and open-source through the MIT license.


Install HackMyResume with NPM:

[sudo] npm install hackmyresume -g

Note: for PDF generation you’ll need to install a copy of wkhtmltopdf for
your platform. For LaTeX generation you’ll need a valid LaTeX environment with
access to xelatex and similar.

Getting Started

To use HackMyResume you’ll need to create a valid resume in either
FRESH or JSON Resume format. Then you can start using the command
line tool. There are four basic commands you should be aware of:

  • build generates resumes in HTML, Word, Markdown, PDF, and other formats.
    Use it when you need to submit, upload, print, or email resumes in specific

    # hackmyresume BUILD  TO  [-t THEME]
    hackmyresume BUILD resume.json TO out/resume.all
    hackmyresume BUILD r1.json r2.json TO out/rez.html out/rez.md foo/rez.all
  • new creates a new resume in FRESH or JSON Resume format.

    # hackmyresume NEW  [-f ]
    hackmyresume NEW resume.json
    hackmyresume NEW resume.json -f fresh
    hackmyresume NEW r1.json r2.json -f jrs
  • convert converts your source resume between FRESH and JSON Resume
    Use it to convert between the two formats to take advantage of tools and

    # hackmyresume CONVERT  TO 
    hackmyresume CONVERT resume.json TO resume-jrs.json
    hackmyresume CONVERT 1.json 2.json 3.json TO out/1.json out/2.json out/3.json
  • validate validates the specified resume against either the FRESH or JSON
    Resume schema. Use it to make sure your resume data is sufficient and complete.

    # hackmyresume VALIDATE 
    hackmyresume VALIDATE resume.json
    hackmyresume VALIDATE r1.json r2.json r3.json

Supported Output Formats

HackMyResume supports these output formats:

Output Format Ext Notes
HTML .html A standard HTML 5 + CSS resume format that can be viewed in a browser, deployed to a website, etc.
Markdown .md A structured Markdown document that can be used as-is or used to generate HTML.
LaTeX .tex A structured LaTeX document (or collection of documents).
MS Word .doc A Microsoft Word office document.
Adobe Acrobat (PDF) .pdf A binary PDF document driven by an HTML theme.
plain text .txt A formatted plain text document appropriate for emails or copy-paste.
JSON .json A JSON representation of the resume.
YAML .yml A YAML representation of the resume.
RTF .rtf Forthcoming.
Textile .textile Forthcoming.
image .png, .bmp Forthcoming.


HackMyResume requires a recent version of Node.js and NPM. Then:

  1. Install the latest official wkhtmltopdf binary for your platform.
  2. Optionally install an updated LaTeX environment (LaTeX resumes only).
  3. Install HackMyResume with [sudo] npm install hackmyresume -g.
  4. You’re ready to go.


Assuming you’ve got a JSON-formatted resume handy, generating resumes in
different formats and combinations easy. Just run:

hackmyresume BUILD <INPUTS> <OUTPUTS> [-t theme].

Where is one or more .json resume files, separated by spaces;
is one or more destination resumes, and is the desired
theme (default to Modern). For example:

# Generate all resume formats (HTML, PDF, DOC, TXT, YML, etc.)
hackmyresume build resume.json -o out/resume.all -t modern

# Generate a specific resume format
hackmyresume build resume.json TO out/resume.html
hackmyresume build resume.json TO out/resume.pdf
hackmyresume build resume.json TO out/resume.md
hackmyresume build resume.json TO out/resume.doc
hackmyresume build resume.json TO out/resume.json
hackmyresume build resume.json TO out/resume.txt
hackmyresume build resume.json TO out/resume.yml

# Specify 2 inputs and 3 outputs
hackmyresume build in1.json in2.json TO out.html out.doc out.pdf

You should see something to the effect of:

*** HackMyResume v0.9.0 ***
Reading JSON resume: foo/resume.json
Applying MODERN Theme (7 formats)
Generating HTML resume: out/resume.html
Generating TXT resume: out/resume.txt
Generating DOC resume: out/resume.doc
Generating PDF resume: out/resume.pdf
Generating JSON resume: out/resume.json
Generating MARKDOWN resume: out/resume.md
Generating YAML resume: out/resume.yml


Applying a theme

You can specify a predefined or custom theme via the optional -t parameter.
For a predefined theme, include the theme name. For a custom theme, include the
path to the custom theme’s folder.

hackmyresume build resume.json -t modern
hackmyresume build resume.json -t ~/foo/bar/my-custom-theme/

As of v1.0.0, available predefined themes are positive, modern, compact,
minimist, and hello-world.

Merging resumes

You can merge multiple resumes together by specifying them in order from
most generic to most specific:

# Merge specific.json onto base.json and generate all formats
hackmyresume build base.json specific.json -o resume.all

This can be useful for overriding a base (generic) resume with information from
a specific (targeted) resume. For example, you might override your generic
catch-all “software developer” resume with specific details from your targeted
“game developer” resume, or combine two partial resumes into a “complete”
resume. Merging follows conventional extend()-style behavior and there’s
no arbitrary limit to how many resumes you can merge:

hackmyresume build in1.json in2.json in3.json in4.json TO out.html out.doc
Reading JSON resume: in1.json
Reading JSON resume: in2.json
Reading JSON resume: in3.json
Reading JSON resume: in4.json
Merging in4.json onto in3.json onto in2.json onto in1.json
Generating HTML resume: out.html
Generating WORD resume: out.doc

Multiple targets

You can specify multiple output targets and HackMyResume will build them:

# Generate out1.doc, out1.pdf, and foo.txt from me.json.
hackmyresume build me.json -o out1.doc -o out1.pdf -o foo.txt

You can also omit the output file(s) and/or theme completely:

# Equivalent to "hackmyresume resume.json resume.all -t modern"
hackmyresume build resume.json

Using .all

The special .all extension tells HackMyResume to generate all supported output
formats for the given resume. For example, this…

# Generate all resume formats (HTML, PDF, DOC, TXT, etc.)
hackmyresume build me.json -o out/resume.all

..tells HackMyResume to read me.json and generate out/resume.md,
out/resume.doc, out/resume.html, out/resume.txt, out/resume.pdf, and


HackMyResume can also validate your resumes against either the FRESH /
or JSON Resume formats. To validate one or more existing
resumes, use the validate command:

# Validate myresume.json against either the FRESH or JSON Resume schema.
hackmyresume validate resumeA.json resumeB.json

HackMyResume will validate each specified resume in turn:

*** HackMyResume v0.9.0 ***
Validating JSON resume: resumeA.json (INVALID)
Validating JSON resume: resumeB.json (VALID)


HackMyResume can convert between the FRESH and JSON Resume
formats. Just run:


where is one or more resumes in FRESH or JSON Resume format, and
is a corresponding list of output file names. HackMyResume will
autodetect the format (FRESH or JRS) of each input resume and convert it to the
other format (JRS or FRESH).


HackMyResume applies js-beautify-style HTML prettification by default to
HTML-formatted resumes. To disable prettification, the --nopretty or -n flag
can be used:

hackmyresume generate resume.json out.all --nopretty

Silent Mode

Use -s or --silent to run in silent mode:

hackmyresume generate resume.json -o someFile.all -s
hackmyresume generate resume.json -o someFile.all --silent


MIT. Go crazy. See LICENSE.md for details.

Original URL: http://feedproxy.google.com/~r/feedsapi/BwPx/~3/dm_83eLUGwc/HackMyResume

Original article

Comments are closed.

Proudly powered by WordPress | Theme: Baskerville 2 by Anders Noren.

Up ↑

%d bloggers like this: