MELPA is a growing collection of
package.el-compatible Emacs Lisp
packages built automatically on our server from the upstream source
code using simple recipes. (Think of it as a server-side version of
el-get, or even
Packages are updated when changes are made to the MELPA repository, or at least daily.
If you just want to browse and install packages, check out the archive index page for instructions.
Adding packages is as simple as submitting a pull request; read on for details.
About the name
MELPA is Milkypostman's ELPA or Milkypostman's Experimental Lisp Package Archive if you're not into the whole brevity thing.
buildpkg-- Create an archive of the package(s) passed as arguments to the script. Built packages are put in the
packages/folder with version corresponding to the newest HEAD revision available; given according to the
melpa-- All the logic for generating everything in the repository based on the recipe files. By default this will clean the
packages/directory, build all packages listed under
recipes/, and compile the
index.htmlfile for the melpa website front page.
The following arguments are accepted:
: clean out the
: build all packages in
: build the
validate : naively validate that the correct number of packages were built.
Note that these scripts require an Emacs with
such as Emacs 24. If you have an older version of Emacs, you can get a
package-build.el file contains all the heavy lifting. The
scripts above call the
package-build-archive function from the
command-line to actually build the package(s).
(package-build-all) to build all melpa packages.
Alternatively you can load this file from within Emacs and issues commands from there.
package-build.el automatically generates any required
information for the package. For multi-file packages this include
generating the file
<NAME>-pkg.el which contains description,
version, and requires information determined by searching
<NAME>-pkg.el.in if they exist in
Contributing New Packages
Packages are specified by files in the
recipes directory. You can
contribute a new package by adding a new file under
the following form,
(<package-name> :fetcher [git|github|bzr|hg|darcs|svn|wiki] [:url "<repo url>"] [:repo "github-user/repo-name"] [:files ("<file1>", ...)])
: a lisp symbol that has the same name as the package being specified.
: specifies the URL of the version control repository. required for
: specifies the type of repository that
:url points to. Right now
package-build supports git, github,
bazaar (bzr), mercurial (hg),
subversion (svn), darcs, and
Emacs Wiki (wiki) as possible mechanisms for checking out
the repository. With the exception of the Emacs Wiki fetcher,
package-build uses the corresponding application to update files
before building the package. The Emacs Wiki fetcher gets the latest
version of the package from
the package name. Note that the
:url property is not needed for the
wiki engine unless the name of the package file on the EmacsWiki
differs from the package name being built. In the case of the
:repo instead of
:url; the git URL will then be
: optional property specifying the explicit files used to build the
package. Automatically populated by matching all
.el files in the
root of the repository. This is necessary when there are multiple
.el files in the repository but the package should only be built
from a subset.
Single File Repository
ido-ubiquitous is a repository that contains two files:
Since there is only one
.el file, this package only needs the
(ido-ubiquitous :url "https://github.com/DarwinAwardWinner/ido-ubiquitous.git" :fetcher git)
Multiple Packages in one Repository
contains the starter-kit package along with extra packages in the
modules directory; starter-kit-bindings, starter-kit-lisp, etc.
(starter-kit :url "https://github.com/technomancy/emacs-starter-kit.git" :fetcher git) (starter-kit-bindings :url "https://github.com/technomancy/emacs-starter-kit.git" :fetcher git :files ("modules/starter-kit-bindings.el"))
:files is not specified for
package-build will automatically add all
.el files in the root
directory of the repository. The
starter-kit-bindings repository is
contained in the
modules/ subdirectory and thus needs the packages
files specified explicitly.
Submitting the Package
You should first fork the MELPA repository, add your new file under
recipes, and confirm your new package builds properly by running
buildpkg <NAME>. You can install the package that you built by
running the interactive command
package-install-file in Emacs, and
specifying the newly built package which should be in the
subdirectory under the melpa directory.
After verifying the entry works properly please open a pull request on Github.
Packages end up in the
packages/ directory by default.
This can be configured using the
Repositories are checked out to the
working/ directory by default.
This can be configured using the