Emacs Version Manager
Ruby Shell
Latest commit e43c170 Nov 25, 2016 @rejeep v0.9.1
Failed to load latest commit information.
bin Exit with correct code when command failed Oct 17, 2015
lib Add disuse command Oct 24, 2016
recipes Include minor version in recipes Sep 23, 2016
.gitignore Add config command Oct 10, 2015
.ruby-version Reverting to upstream version Dec 9, 2015
Gemfile Remove some gems Oct 10, 2015
evm.gemspec v0.9.1 Nov 25, 2016
go Do not hide output from git command Apr 15, 2015


Emacs Version Manager

Deprecation Warning!

As Travis is moving towards a container-based infrastructure, hence sudo is not possible, EVM added support for Travis specific binaries (ends with -travis), which will be installed in /tmp.

All -bin versions will are deprecated and will be removed. Do not use them!

To run EVM on Travis, set the EVM path to /tmp:

$ evm config path /tmp

See https://gist.github.com/rejeep/ebcd57c3af83b049833b for more information on how to use EVM on Travis.

Why EVM?

  • Did you ever wonder how to install Emacs? Homebrew, apt-get, Emacs for OSX, Compile from scratch, etc...

  • Are you currently maintaining an Emacs package? How do you know it works? Because you have tests of course. Ok, so you know it works on your platform and with your Emacs version. But what about all other versions that people are using? Does your package work for them?

  • EVM provides pre compiled binaries to allow for quick installation on CI systems.

Platform Support






Not supported. Need help from someone running Windows.


Default installation directory for EVM Emacs versions is /usr/local/evm. This can be changed with the config command:

$ evm config path /foo/bar

No matter what installation approach you choose, create the installation directory and give your user access rights, for example:

$ sudo mkdir /usr/local/evm
$ sudo chown $USER: /usr/local/evm


$ curl -fsSkL https://raw.github.com/rejeep/evm/master/go | bash

Add EVM's bin directory to your PATH.

$ export PATH="$HOME/.evm/bin:$PATH"



$ brew install evm

Ruby gem

$ gem install evm


$ git clone https://github.com/rejeep/evm.git ~/.evm

Add EVM's bin directory to your PATH.

$ export PATH="$HOME/.evm/bin:$PATH"


In the Evm bin directory, there are a few commands:

  • evm - Manage Emacs packages
  • emacs/evm-emacs - Emacs shim with currently selected Emacs package


To list all available Emacs versions you can install, run:

$ evm list

The output will look something like this:

emacs-24.1 [I]
* emacs-24.3 [I]
emacs-24.3-travis [I]

The [I] shows what versions are currently installed and the * shows what version is currently selected.


To install a version, run:

$ evm install version


$ evm install emacs-24.3


To start using a specific package, run:

$ evm use name


$ evm use emacs-24.2

The Evm binary will update and use that Emacs package.


To stop using an EVM binary and restore your personal or system defaults:

$ evm disuse


To uninstall a version, run:

$ evm uninstall emacs-24.2

bin [name]

Prints the full path to name's Emacs executable. If no name is specified, use currently selected.

$ evm bin # /usr/local/evm/emacs-24.5/Emacs.app/Contents/MacOS/Emacs
$ evm bin emacs-24.2 # /usr/local/evm/emacs-24.2/Emacs.app/Contents/MacOS/Emacs


For more information, run:

$ evm --help


Be sure to!

Implement the features and don't forget to test it. Run the tests with:

$ rspec spec

If all passes, send us a pull request with the changes.

Adding a new Emacs version

Copy an existing recipe in the recipes directory and make modifications for the new version. Also add the new version to the Travis configuration.

Adding Travis binary

If you want to contribute a Travis binary, these instructions will help.

$ sudo apt-get install build-essential
$ sudo apt-get install libncurses-dev
$ sudo apt-get install autoconf
$ sudo apt-get install automake
$ sudo apt-get install autogen
$ sudo apt-get install git
$ sudo apt-get install texinfo
$ sudo apt-get install libtool
  • Download Emacs source
$ wget http://ftpmirror.gnu.org/emacs/emacs-MAJOR.MINOR.tar.gz
  • Unzip it
$ tar -xvzf emacs-MAJOR-MINOR.tar.gz
  • Compile and Install Emacs
$ ./autogen.sh # for snapshot
$ ./configure --without-all --prefix=/tmp/emacs-MAJOR.MINOR-travis
$ make bootstrap
$ make install
  • Tar it
$ cd /tmp
$ tar -cvzf emacs-MAJOR.MINOR-travis.tar.gz emacs-MAJOR.MINOR-travis
  • Copy from VM
$ vagrant scp ID:/tmp/emacs-MAJOR.MINOR-travis.tar.gz .
  • Create a new recipe and make a pull request.

  • Ask maintainer to add a new release and add the binary.