HackMyResume
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:
- 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 and JSON Resume 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.
- 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.
- 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
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 either Phantom.js or
wkhtmltopdf to be installed on your system and the phantomjs
and/or
wkhtmltopdf
binaries 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 and JSON Resume-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:
npm install jsonresume-theme-[theme-name]
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 or JSON Resume 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 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 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 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 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 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 rez.json
hackmyresume PEEK rez.json info.brief
hackmyresume PEEK rez.json employment.history[1]
hackmyresume PEEK rez.json rez2.json info.brief
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> <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:
hackmyresume BUILD resume.json TO out/resume.all -t modern
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
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:
npm install jsonresume-theme-[name]
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:
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 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:
hackmyresume BUILD me.json TO out1.doc out1.pdf foo.txt
Using .all
The special .all
extension tells HackMyResume to generate all supported output
formats for the given resume. For example, this...
hackmyresume BUILD me.json TO 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
out/resume.json
.
Building PDFs
Users who don't care about PDFs can turn off PDF generation across all themes
and formats with the --pdf none
switch.
HackMyResume takes a unique approach to PDF generation. Instead of enforcing
a specific PDF engine on users, HackMyResume will attempt to work with whatever
PDF engine you have installed through the engine's command-line interface (CLI).
Currently that means one or both of...
..with support for other engines planned in the future. But for now, one or
both of these engines must be installed and accessible on your PATH in order to
generate PDF resumes with HackMyResume. That means you should be able to
invoke either of these tools directly from your shell or terminal without error:
wkhtmltopdf input.html output.pdf
phantomjs script.js input.html output.pdf
Assuming you've installed one or both of these engines on your system, you can
tell HackMyResume which flavor of PDF generation to use via the --pdf
option
(-p
for short):
hackmyresume BUILD resume.json TO out.all --pdf phantom
hackmyresume BUILD resume.json TO out.all --pdf wkhtmltopdf
hackmyresume BUILD resume.json TO out.all --pdf none
Analyzing
HackMyResume can analyze your resume for keywords, employment gaps, and other
metrics. Run:
hackmyresume ANALYZE <my-resume>.json
Depending on the HackMyResume version, you should see output similar to:
*** HackMyResume v1.6.0 ***
Reading resume: resume.json
Analyzing FRESH resume: resume.json
SECTIONS (10):
employment: 12
education: 2
service: 1
skills: 8
writing: 1
recognition: 0
social: 4
interests: 2
references: 1
languages: 2
COVERAGE (61.1%):
Total Days: 6034
Employed: 3688
Gaps: 8 [31, 1065, 273, 153, 671, 61, 61, 31]
Overlaps: 1 [243]
KEYWORDS (61):
Node.js: 6 mentions
JavaScript: 9 mentions
SQL Server: 3 mentions
Visual Studio: 6 mentions
Web API: 1 mentions
N-tier / 3-tier: 1 mentions
HTML 5: 1 mentions
JavaScript: 6 mentions
CSS: 2 mentions
Sass / LESS / SCSS: 1 mentions
LAMP: 3 mentions
WISC: 1 mentions
HTTP: 21 mentions
JSON: 1 mentions
XML: 2 mentions
REST: 1 mentions
WebSockets: 2 mentions
Backbone.js: 3 mentions
Angular.js: 1 mentions
Node.js: 4 mentions
NPM: 1 mentions
Bower: 1 mentions
Grunt: 2 mentions
Gulp: 1 mentions
jQuery: 2 mentions
Bootstrap: 3 mentions
Underscore.js: 1 mentions
PhantomJS: 1 mentions
CoffeeScript: 1 mentions
Python: 11 mentions
Perl: 4 mentions
PHP: 7 mentions
MySQL: 12 mentions
PostgreSQL: 4 mentions
NoSQL: 2 mentions
Apache: 2 mentions
AWS: 2 mentions
EC2: 2 mentions
RDS: 3 mentions
S3: 1 mentions
Azure: 1 mentions
Rackspace: 1 mentions
C++: 23 mentions
C++ 11: 1 mentions
Boost: 1 mentions
Xcode: 2 mentions
gcc: 1 mentions
OO&AD: 1 mentions
.NET: 20 mentions
Unity 5: 2 mentions
Mono: 3 mentions
MonoDevelop: 1 mentions
Xamarin: 1 mentions
TOTAL: 180 mentions
Validating
HackMyResume can also validate your resumes against either the FRESH /
FRESCA or JSON Resume formats. To validate one or more existing
resumes, use the validate
command:
hackmyresume VALIDATE resumeA.json resumeB.json
HackMyResume will validate each specified resume in turn:
*** HackMyResume v1.6.0 ***
Validating JSON resume: resumeA.json (INVALID)
Validating JSON resume: resumeB.json (VALID)
Converting
HackMyResume can convert between the FRESH and JSON Resume
formats. Just run:
hackmyresume CONVERT <INPUTS> <OUTPUTS>
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).
File-based Options
You can pass options into HackMyResume via an external options or ".hackmyrc"
file with the --options
or -o
switch:
hackmyresume BUILD resume.json -o path/to/options.json
The options file can contain any documented HackMyResume option, including
theme
, silent
, debug
, pdf
, css
, and other settings.
{
"theme": "compact",
"sectionTitles": {
"employment": "Work"
}
}
If a particular option is specified both on the command line and in an external
options file, the explicit command-line option takes precedence.
hackmyresume BUILD resume.json -o path/to/options.json -t compact
> Reading resume: resume.json
> Applying COMPACT theme (7 formats)
Prettifying
HackMyResume applies js-beautify-style HTML prettification by default to
HTML-formatted resumes. To disable prettification, the --no-prettify
or -n
flag can be used:
hackmyresume BUILD resume.json out.all --no-prettify
Silent Mode
Use -s
or --silent
to run in silent mode:
hackmyresume BUILD resume.json -o someFile.all -s
hackmyresume BUILD resume.json -o someFile.all --silent
Debug Mode
Use -d
or --debug
to force HMR to emit a call stack when errors occur. In
the future, this option will emit detailed error logging.
hackmyresume BUILD resume.json -d
hackmyresume ANALYZE resume.json --debug
Contributing
HackMyResume is a community-driven free and open source project under the MIT
License. Contributions are encouraged and we respond to all PRs and issues,
usually within 24 hours. See CONTRIBUTING.md for details.
License
MIT. Go crazy. See LICENSE.md for details.