fluentCV ======== *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.* ![](assets/resume-bouqet.png) FluentCV 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][fresca] and [JSON Resume][6] formats. 3. **Validate** resumes against either format. FluentCV is built with Node.js and runs on recent versions of OS X, Linux, or Windows. ![](assets/fluentcv_cli_ubuntu.png) ## Features - 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][dry]. - Output to HTML, Markdown, LaTeX, PDF, MS Word, JSON, YAML, plain text, or XML. - Compatible with [FRESH][fresh], [JSON Resume][6], [FRESCA][fresca], and [FCV Desktop][7]. - Validate resumes against the FRESH or JSON Resume schema. - Support for multiple input and output resumes. - Use from your command line or [desktop][7]. - Free and open-source through the MIT license. ## Install Install FluentCV with NPM: ```bash [sudo] npm install fluentcv -g ``` Note: for PDF generation you'll need to install a copy of [wkhtmltopdf][3] for your platform. For LaTeX generation you'll need a valid LaTeX environment with access to `xelatex` and similar. ## Getting Started To use FluentCV 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 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 formats. ```bash # fluentcv BUILD TO [-t THEME] fluentcv BUILD resume.json TO out/resume.all fluentcv 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. ```bash # fluentcv NEW [-f ] fluentcv NEW resume.json fluentcv NEW resume.json -f fresh fluentcv NEW r1.json r2.json -f jrs ``` - `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. ```bash # fluentcv CONVERT TO fluentcv CONVERT resume.json TO resume-jrs.json fluentcv 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. ```bash # fluentcv VALIDATE fluentcv VALIDATE resume.json fluentcv VALIDATE r1.json r2.json r3.json ``` ## Supported Output Formats FluentCV 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. ## Install FluentCV requires a recent version of [Node.js][4] and [NPM][5]. Then: 1. Install the latest official [wkhtmltopdf][3] binary for your platform. 2. Optionally install an updated LaTeX environment (LaTeX resumes only). 2. Install **fluentCV** with `[sudo] npm install fluentcv -g`. 3. You're ready to go. ## Use Assuming you've got a JSON-formatted resume handy, generating resumes in different formats and combinations easy. Just run: ```bash fluentcv BUILD [-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: ```bash # Generate all resume formats (HTML, PDF, DOC, TXT, YML, etc.) fluentcv build resume.json -o out/resume.all -t modern # Generate a specific resume format fluentcv build resume.json TO out/resume.html fluentcv build resume.json TO out/resume.pdf fluentcv build resume.json TO out/resume.md fluentcv build resume.json TO out/resume.doc fluentcv build resume.json TO out/resume.json fluentcv build resume.json TO out/resume.txt fluentcv build resume.json TO out/resume.yml # Specify 2 inputs and 3 outputs fluentcv build in1.json in2.json TO out.html out.doc out.pdf ``` You should see something to the effect of: ``` *** FluentCV 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 ``` ## Advanced ### 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. ```bash fluentcv build resume.json -t modern fluentcv build resume.json -t ~/foo/bar/my-custom-theme/ ``` As of v0.9.0, available predefined themes are `modern`, `minimist`, and `hello-world`, and `compact`. ### Merging resumes You can **merge multiple resumes together** by specifying them in order from most generic to most specific: ```bash # Merge specific.json onto base.json and generate all formats fluentcv 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()][9]-style behavior and there's no arbitrary limit to how many resumes you can merge: ```bash fluentcv 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 FluentCV will build them: ```bash # Generate out1.doc, out1.pdf, and foo.txt from me.json. fluentcv build me.json -o out1.doc -o out1.pdf -o foo.txt ``` You can also omit the output file(s) and/or theme completely: ```bash # Equivalent to "fluentcv resume.json resume.all -t modern" fluentcv build resume.json ``` ### Using .all The special `.all` extension tells FluentCV to generate all supported output formats for the given resume. For example, this... ```bash # Generate all resume formats (HTML, PDF, DOC, TXT, etc.) fluentcv build me.json -o out/resume.all ``` ..tells FluentCV 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`. ### Validating FluentCV can also validate your resumes against either the [FRESH / FRESCA][fresca] or [JSON Resume][6] formats. To validate one or more existing resumes, use the `validate` command: ```bash # Validate myresume.json against either the FRESH or JSON Resume schema. fluentcv validate resumeA.json resumeB.json ``` FluentCV will validate each specified resume in turn: ```bash *** FluentCV v0.9.0 *** Validating JSON resume: resumeA.json (INVALID) Validating JSON resume: resumeB.json (VALID) ``` ### Converting FluentCV can convert between the [FRESH][fresca] and [JSON Resume][6] formats. Just run: ```bash fluentcv CONVERT ``` where is one or more resumes in FRESH or JSON Resume format, and is a corresponding list of output file names. FluentCV will autodetect the format (FRESH or JRS) of each input resume and convert it to the other format (JRS or FRESH). ### Prettifying FluentCV applies [js-beautify][10]-style HTML prettification by default to HTML-formatted resumes. To disable prettification, the `--nopretty` or `-n` flag can be used: ```bash fluentcv generate resume.json out.all --nopretty ``` ### Silent Mode Use `-s` or `--silent` to run in silent mode: ```bash fluentcv generate resume.json -o someFile.all -s fluentcv generate resume.json -o someFile.all --silent ``` ## License MIT. Go crazy. See [LICENSE.md][1] for details. [1]: LICENSE.md [2]: http://phantomjs.org/ [3]: http://wkhtmltopdf.org/ [4]: https://nodejs.org/ [5]: https://www.npmjs.com/ [6]: http://jsonresume.org [7]: http://fluentcv.com [8]: https://youtu.be/N9wsjroVlu8 [9]: https://api.jquery.com/jquery.extend/ [10]: https://github.com/beautify-web/js-beautify [fresh]: https://github.com/fluentdesk/FRESH [fresca]: https://github.com/fluentdesk/FRESCA [dry]: https://en.wikipedia.org/wiki/Don%27t_repeat_yourself