HackMyResume
Generate polished résumés and CVs in HTML, Markdown, LaTeX, MS Word, PDF, plain text, JSON, XML, YAML, smoke signal, and carrier pigeon.
Install / Use
/learn @hacksalot/HackMyResumeREADME
HackMyResume
[![Latest release][img-release]][latest-release] [![Build status (MASTER)][img-master]][travis-url-master] [![Build status (DEV)][img-dev]][travis-url-dev] [![Join the chat at https://gitter.im/hacksalot/HackMyResume][badge]][gh]
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][fresca] and [JRS][6] resumes.

HackMyResume is a dev-friendly, local-only Swiss Army knife for resumes and CVs. Use it to:
- 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.
- Analyze your resume for keyword density, gaps/overlaps, and other metrics.
- Convert resumes between [FRESH][fresca] and [JSON Resume][6] formats.
- Validate resumes against either format.
HackMyResume is built with Node.js and runs on recent versions of OS X, Linux, or Windows. View the FAQ.

Features
- OS X, Linux, and Windows.
- Choose from dozens of FRESH or JSON Resume themes.
- Private, local-only resume authoring and analysis.
- Analyze your resume for keywords, gaps, and other metrics.
- Store your resume data as a durable, versionable JSON or YAML document.
- Generate polished resumes in multiple formats without violating [DRY][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.
- Convert between FRESH and JSON Resume resumes.
- Use from your command line or [desktop][7].
- Free and open-source through the MIT license.
- Updated daily / weekly. Contributions are welcome.
Install
Install the latest stable version of HackMyResume with NPM:
[sudo] npm install hackmyresume -g
Alternately, install the latest bleeding-edge version (updated daily):
[sudo] npm install hacksalot/hackmyresume#dev -g
Installing PDF Support (optional)
HackMyResume tries not to impose a specific PDF engine requirement on the user, but will instead work with whatever PDF engines you have installed.
Currently, HackMyResume's PDF generation requires one of [Phantom.js][2], [wkhtmltopdf][3], or [WeasyPrint][11] to be installed on your system and the corresponding binary to be accessible on your PATH. This is an optional requirement for users who care about PDF formats. If you don't care about PDF formats, skip this step.
Installing Themes
HackMyResume supports both [FRESH][fresh-themes] and [JSON Resume][jrst]-style résumé themes.
- FRESH themes currently come preinstalled with HackMyResume.
- JSON Resume themes can be installed from NPM, GitHub, or manually.
To install a JSON Resume theme, just cd to the folder where you want to store
your themes and run one of:
# Install with NPM
npm install jsonresume-theme-[theme-name]
# Install with GitHub
git clone https://github.com/[user-or-org]/[repo-name]
Then when you're ready to generate your resume, just reference the location of the theme folder as you installed it:
hackmyresume build resume.json TO out/resume.all -t node_modules/jsonresume-theme-classy
Note: You can use install themes anywhere on your file system. You don't need a package.json or other NPM/Node infrastructure.
Getting Started
To use HackMyResume you'll need to create a valid resume in either [FRESH][fresca] or [JSON Resume][6] format. Then you can start using the command line tool. There are five 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 formats.
# hackmyresume build <INPUTS...> TO <OUTPUTS...> [-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 <OUTPUTS...> [-f <FORMAT>] hackmyresume new resume.json hackmyresume new resume.json -f fresh hackmyresume new r1.json r2.json -f jrs -
analyze inspects your resume for keywords, duration, and other metrics.
# hackmyresume analyze <INPUTS...> hackmyresume analyze resume.json hackmyresume analyze r1.json r2.json -
convert converts your source resume between FRESH and JSON Resume formats. Use it to convert between the two formats to take advantage of tools and services.
# hackmyresume convert <INPUTS...> TO <OUTPUTS...> 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 <INPUTS...> hackmyresume validate resume.json hackmyresume validate r1.json r2.json r3.json -
peek echoes your resume or any field, property, or object path on your resume to standard output.
# hackmyresume peek <INPUTS...> [OBJECT-PATH] hackmyresume peek rez.json # Echo the whole resume hackmyresume peek rez.json info.brief # Echo the "info.brief" field hackmyresume peek rez.json employment.history[1] # Echo the 1st job hackmyresume peek rez.json rez2.json info.brief # Compare value
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) that can be processed with pdflatex, xelatex, and similar tools. MS Word | .doc | A Microsoft Word office document (XML-driven; WordProcessingML). Adobe Acrobat (PDF) | .pdf | A binary PDF document driven by an HTML theme (through wkhtmltopdf). 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.
Use
Assuming you've got a JSON-formatted resume handy, generating resumes in different formats and combinations is easy. Just run:
hackmyresume build <inputs> to <outputs> [-t theme].
Where <INPUTS> is one or more .json resume files, separated by spaces;
<OUTPUTS> is one or more destination resumes, and <THEME> is the desired
theme (default to Modern). For example:
# Generate all resume formats (HTML, PDF, DOC, TXT, YML, etc.)
hackmyresume build resume.json TO 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 v1.4.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
Advanced
Applying a theme
HackMyResume can work with any FRESH or JSON Resume theme (the latter must be
installed first). To specify a theme when generating your resume, use the -t
or --theme parameter:
hackmyresume build resume.json TO out/rez.all -t [theme]
The [theme] parameter can be the name of a predefined theme OR the path to any
FRESH or JSON Resume theme folder:
hackmyresume build resume.json TO out/rez.all -t modern
hackmyresume build resume.json TO OUT.rez.all -t ../some-folder/my-custom-theme/
hackmyresume build resume.json TO OUT.rez.all -t node_modules/jsonresume-theme-classy
FRESH themes are currently pre-installed with HackMyResume. JSON Resume themes can be installed prior to use:
# Install a JSON Resume theme into a local node_modules subfolder:
npm install jsonresume-theme-[name]
# Use it with HackMyResume
hackmyresume build resume.json -t node_modules/jsonresume-theme-[name]
As of v1.6.0, available predefined FRESH themes are positive, modern,
compact, minimist, and hello-world. For a list of JSON Resume themes,
check the NPM Registry.
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 TO 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 foll
