Responsive image

Org CV

Org-mode backend exporters for Curriculum Vita

Goal: Export backend for CV

This project aims to generate from an org-mode file with reasonably ordered items a latex file which compiles into a reasonably nice CV. In the same spirit the org-mode file must export to markdown so that it can be uses for web based CV.


This project is not on MELPA so you have to do a manual installation. First clone this git repository.

git clone

There are various modules to perform the export. As of now ox-moderncv, ox-altacv, ox-hugocv. Choose any or all that you prefer for install. I use use-package to manage the installation for example of ox-moderncv.

(use-package ox-moderncv
    :load-path "path_to_repository/org-cv/"
    :init (require 'ox-moderncv))

Basic Org file

The basic structure of an org file containing your CV is shown next.

Personal contact information

TITLE, AUTHOR and EMAIL are standard org options. But on TITLE you put your foreseen job.

Field Description
TITLE Desired job
AUTHOR Who you are?
EMAIL Your contact email
ADDRESS Mailing address, this can span over multiple lines
HOMEPAGE URL of your website
MOBILE Mobile phone
GITHUB GitHub user
GITLAB GitLab user
LINKEDIN Linkedin username
PHOTO path to photo file

#+TITLE: My dream job
#+AUTHOR: John Doe
#+email: john@doe.lost

#+ADDRESS: My Awesome crib
#+ADDRESS: Fantastic city -- Planet Earth
#+MOBILE: (+9) 87654321
#+GITHUB: Titan-C
#+GITLAB: Titan-C
#+LINKEDIN: oscar-najera
#+PHOTO: smile.png

You can use org-modes hierarchical structure to describe your CV. To make a specific subtree an item describing an experience point (Job you have, degree you pursued, etc.) you use the org properties drawer and with the :CV_ENV: cventry property. You should also include the FROM and TO properties defining the span of the event, as LOCATION and EMPLOYER.

* Employement
** One job
:CV_ENV: cventry
:FROM:     <2014-09-01>
:TO:     <2017-12-07>
:LOCATION: a city, a country
:EMPLOYER: The employer

I write about awesome stuff I do.
** Other job
:CV_ENV: cventry
:FROM:     <2013-09-01>
:TO:     <2014-08-07>
:LOCATION: my city, your country
:EMPLOYER: The other employer

I write about awesome stuff I do.

* Other stuff I do
- I work a lot
- I sleep a lot
- I eat a lot

Latex Exporter

Using modern-cv

moderncv is a standard \(\LaTeX\) package that you can find in many of your latex distributions. For I maintain for personal purposes a fork of it to better work with my use case at Feel free to use any or even your personal fork for your desired use case.

To configure the export for moderncv you need the addition options in your org file.

# CV theme - options include: 'casual' (default), 'classic', 'oldstyle' and 'banking'
#+CVSTYLE: banking
# CV color - options include: 'blue' (default), 'orange', 'green', 'red', 'purple', 'grey' and 'black'
#+CVCOLOR: green

When exporting you can call the following function to get the latex file.

(org-export-to-file 'moderncv "moderncv.tex")
(org-latex-compile "moderncv.tex")

Alternative text - include a link to the PDF!

Using alta-cv

AltaCV is another project to generate a CV, you will need to install it yourself. I maintain a fork too at because I need extra features and I encourage to use this fork on the sections branch.

The style of this CV is more involved and you need some configuration in your org file to get it to work. First define the margins, the large margin to the right is to allow for a second column.

#+LATEX_HEADER: \geometry{left=1cm,right=9cm,marginparwidth=6.8cm,marginparsep=1.2cm,top=1.25cm,bottom=1.25cm}

Content on the right column has the same structure of a org file, but you need to enclose it in the \marginpar{} command as shown next.

#+latex: \marginpar{
* Main Interests
- Free/Libre and Open Source Software (FLOSS)
- Free food
- Free beer

* Programming
- Python
- C/C++
- EmacsLisp
- Bash
- JavaScript

* Languages

- *English*  Fluent
- *German*   Fluent
- *Spanish*  Native
- *French*   Intermediate
#+latex: }

When exporting you can call the following function to get the latex file.

(org-export-to-file 'altacv "altacv.tex")
(org-latex-compile "altacv.tex")

Alternative text - include a link to the PDF!

Markdown Hugo Exporter

If your target is not a PDF file but a website, this exporter extends the ox-hugo exporter backend. So be sure to install that too.

To export, there is nothing fancy to keep track of, but as an example I exclude some tags during export.

(let ((org-export-exclude-tags '("noexport" "latexonly")))
     (org-export-to-file 'hugocv ""))

You are responsible for styling your website.