A package management tool for Emacs, built on Cask.
Emacs Lisp Makefile
Latest commit 0e1ae11 May 12, 2015 @rdallasgray Build 0.9.2


Melpa Status


Pallet is a package management helper for Emacs.

It uses @rejeep's excellent Cask as a platform to keep track of your installed packages.


Version 0.9 introduces support for Cask version and VC references, which will now be retained if specified in your Cask file:

(depends-on "graphene" "20141030.219")
(depends-on "pallet" :git "https://github.com/rdallasgray/pallet" :ref "master")

Many thanks to Sam Brightman for implementing this feature.

Version 0.8 introduces the ;;;pallet-ignore comment, which allows you to tell Pallet to ignore (and retain) text following the comment.

Version 0.7 introduces a significant breaking change: it is now necessary to start pallet-mode for pallet to track your package installs and deletes. See the instructions below.

Version 0.7 introduces a new integration test harness using Servant. This is intended to allow safer and quicker addition of new features going forward.

Target platform

Pallet is currently tested with Emacs versions 24.3 through 24.4.


Pallet has a very simple interface:

  • M-x pallet-init creates a Cask file using information about installed packages from the package.el system
  • M-x pallet-install installs packages listed in your Cask file
  • M-x pallet-update updates installed packages

Pallet's main job, though, is to add and delete package references from your Cask file as you install and delete them using the built-in Emacs package management system. Turn this on by adding (pallet-mode t) to your Emacs init file, or by calling pallet-mode interactively (M-x pallet-mode).


To install pallet, you should first install Cask, following the instructions here. At present, just install Cask -- don't add anything to your .emacs or init.el file.

After installing Cask, there are two ways you can go, depending on your situation:

  1. I have a working Emacs install, with packages already installed, and can access Melpa.

    In this case run M-x list-packages, and install pallet. Then, run M-x pallet-init. Now you have a Cask file in your emacs.d directory which contains listings for all files you've previously installed via package-install. Run M-x pallet-install, and your .emacs.d/elpa directory will be replicated under .emacs.d/.cask/.

    You can if you wish now delete your .emacs.d/elpa directory, and remove any lines from your init.el adding archives to package-archive, or running package-initialize.

  2. I have a newly installed Emacs and/or am not set up to access Melpa.

    In this case, create a file called Cask in your emacs.d directory. Add the following lines to it:

    (source melpa)
    (depends-on "pallet")

    Then, in terminal and in your emacs.d directory, run

    cask install

    This will create a .cask directory inside your .emacs.d directory, initialize a package directory under .emacs.d/.cask/, and install pallet to it.

Finally, make sure the following lines are in your init.el, before any packages are required:

(require 'cask "<path-to-cask>/cask.el")
(require 'pallet)
(pallet-mode t)

<path-to-cask> will vary depending on how you installed Cask: if you installed via the curl method, it is likely to be ~/.cask; if you installed via Homebrew, it is likely to be /usr/local/Cellar/cask/<version>.

If you want pallet to maintain your Cask file automatically as you install and delete packages using Emacs' built-in package-management, enable pallet-mode by calling (pallet-mode t). You can enable or disable pallet-mode at any time by interactively calling pallet-mode (M-x pallet-mode).

Ignoring a section of your Cask file

If you prefer to have Pallet ignore part of your Cask file (e.g. so you can use Cask's VC dependencies), use the ;;;pallet-ignore comment. Pallet will ignore any text after this comment.

(source melpa)
(depends-on "s")
(depends-on "newlisp" :git


Contributions to pallet are very welcome.

Fork and clone the repo, then run git submodule update --init, which will install el.mk.

Simple testing

Install Cask.

Then run cask install to install development dependencies. You should now be able to run the tests: make test.

Complete testing

The pallet dev setup includes a Vagrantfile, which allows pallet to be tested against a selection of recent Emacs releases.

Having installed Vagrant, add the necessary box by running:

vagrant box add trusty-server \

Then run vagrant up. This may take a while, as several versions of Emacs may be downloaded and installed from source.

Shell into the vm by running vagrant ssh, and run the tests using ./test_all.sh. This will run the complete test suite against all installed Emacs versions.

Pull requests

Any new feature or fix should be covered by tests -- see the files in /test for guidance on how to write your own. When you've created your feature or fix, make a pull request against master in this repo.