Need help with HackMyResume?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

hacksalot
8.8K Stars 532 Forks MIT License 784 Commits 62 Opened issues

Description

Generate polished résumés and CVs in HTML, Markdown, LaTeX, MS Word, PDF, plain text, JSON, XML, YAML, smoke signal, and carrier pigeon.

Services available

!
?

Need anything else?

Contributors list

HackMyResume

Latest release Build status (MASTER) Build status (DEV) Join the chat at https://gitter.im/hacksalot/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:

  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. Analyze your resume for keyword density, gaps/overlaps, and other metrics.
  3. Convert resumes between FRESH and JSON Resume formats.
  4. 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#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, wkhtmltopdf, or WeasyPrint 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 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:
# 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 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  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
    
  • analyze inspects your resume for keywords, duration, and other metrics.

    # hackmyresume analyze 
    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  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
    
  • peek echoes your resume or any field, property, or object path on your resume to standard output.

    # hackmyresume peek  [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  to  [-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 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 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 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...
# Generate all resume formats (HTML, PDF, DOC, TXT, etc.)
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 any of...

..with support for other engines planned in the future. But for now, one or more 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
weasyprint 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 weasyprint
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 .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:
# 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 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  

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" },

"wkhtmltopdf": { "margin-top": "20mm" } }

If an option is specified on both the command line and in an external options file, the command-line option wins.

# path/to/options.json specifes the POSITIVE theme
# -t parameter specifies the COMPACT theme
# The -t parameter wins.
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

Disable Encoding

Use the

--no-escape
option to disable encoding in Handlebars themes. Note: this option has no effect for non-Handlebars themes.
hackmyresume build resume.json --no-escape

Private Resume Fields

Have a gig, education stint, membership, or other relevant history that you'd like to hide from most (e.g. public) resumes but sometimes show on others? Tag it with

"private": true
to omit it from outbound generated resumes by default.
"employment": {
  "history": [
    {
      "employer": "Acme Real Estate"
    },
    {
      "employer": "Area 51 Alien Research Laboratory",
      "private": true
    },
    {
      "employer": "H&R Block"
    }
  ]
}

Then, when you want a copy of your resume that includes the private gig / stint / etc., tell HackMyResume that it's OK to emit private fields. The way you do that is with the

--private
switch.
hackmyresume build resume.json private-resume.all --private

Custom theme helpers

You can attach your own custom Handlebars helpers to a FRESH theme with the

helpers
key of your theme's
theme.json
file.
{
  "title": "my-cool-theme",

// ...

"helpers": [ "../path/to/helpers/*.js", "some-other-helper.js" ] }

HackMyResume will attempt to load each path or glob and register any specified files with Handlebars.registerHelper, making them available to your theme.

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 in time. See CONTRIBUTING.md for details.

License

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

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.