2 @c This is part of the GNU Emacs Lisp Reference Manual.
3 @c Copyright (C) 2010-2013 Free Software Foundation, Inc.
4 @c See the file elisp.texi for copying conditions.
6 @chapter Preparing Lisp code for distribution
10 Emacs provides a standard way to distribute Emacs Lisp code to
11 users. A @dfn{package} is a collection of one or more files,
12 formatted and bundled in such a way that users can easily download,
13 install, uninstall, and upgrade it.
15 The following sections describe how to create a package, and how to
16 put it in a @dfn{package archive} for others to download.
17 @xref{Packages,,, emacs, The GNU Emacs Manual}, for a description of
18 user-level features of the packaging system.
21 * Packaging Basics:: The basic concepts of Emacs Lisp packages.
22 * Simple Packages:: How to package a single .el file.
23 * Multi-file Packages:: How to package multiple files.
24 * Package Archives:: Maintaining package archives.
27 @node Packaging Basics
28 @section Packaging Basics
29 @cindex package attributes
31 @cindex package version
33 @cindex package dependencies
35 A package is either a @dfn{simple package} or a @dfn{multi-file
36 package}. A simple package is stored in a package archive as a single
37 Emacs Lisp file, while a multi-file package is stored as a tar file
38 (containing multiple Lisp files, and possibly non-Lisp files such as a
41 In ordinary usage, the difference between simple packages and
42 multi-file packages is relatively unimportant; the Package Menu
43 interface makes no distinction between them. However, the procedure
44 for creating them differs, as explained in the following sections.
46 Each package (whether simple or multi-file) has certain
51 A short word (e.g., @samp{auctex}). This is usually also the symbol
52 prefix used in the program (@pxref{Coding Conventions}).
55 A version number, in a form that the function @code{version-to-list}
56 understands (e.g., @samp{11.86}). Each release of a package should be
57 accompanied by an increase in the version number.
59 @item Brief description
60 This is shown when the package is listed in the Package Menu. It
61 should occupy a single line, ideally in 36 characters or less.
63 @item Long description
64 This is shown in the buffer created by @kbd{C-h P}
65 (@code{describe-package}), following the package's brief description
66 and installation status. It normally spans multiple lines, and should
67 fully describe the package's capabilities and how to begin using it
71 A list of other packages (possibly including minimal acceptable
72 version numbers) on which this package depends. The list may be
73 empty, meaning this package has no dependencies. Otherwise,
74 installing this package also automatically installs its dependencies;
75 if any dependency cannot be found, the package cannot be installed.
78 @cindex content directory, package
79 Installing a package, either via the command @code{package-install-file},
80 or via the Package Menu, creates a subdirectory of
81 @code{package-user-dir} named @file{@var{name}-@var{version}}, where
82 @var{name} is the package's name and @var{version} its version
83 (e.g., @file{~/.emacs.d/elpa/auctex-11.86/}). We call this the
84 package's @dfn{content directory}. It is where Emacs puts the
85 package's contents (the single Lisp file for a simple package, or the
86 files extracted from a multi-file package).
88 @cindex package autoloads
89 Emacs then searches every Lisp file in the content directory for
90 autoload magic comments (@pxref{Autoload}). These autoload
91 definitions are saved to a file named @file{@var{name}-autoloads.el}
92 in the content directory. They are typically used to autoload the
93 principal user commands defined in the package, but they can also
94 perform other tasks, such as adding an element to
95 @code{auto-mode-alist} (@pxref{Auto Major Mode}). Note that a package
96 typically does @emph{not} autoload every function and variable defined
97 within it---only the handful of commands typically called to begin
98 using the package. Emacs then byte-compiles every Lisp file in the
101 After installation, the installed package is @dfn{loaded}: Emacs
102 adds the package's content directory to @code{load-path}, and
103 evaluates the autoload definitions in @file{@var{name}-autoloads.el}.
105 Whenever Emacs starts up, it automatically calls the function
106 @code{package-initialize} to load installed packages. This is done
107 after loading the init file and abbrev file (if any) and before
108 running @code{after-init-hook} (@pxref{Startup Summary}). Automatic
109 package loading is disabled if the user option
110 @code{package-enable-at-startup} is @code{nil}.
112 @deffn Command package-initialize &optional no-activate
113 This function initializes Emacs' internal record of which packages are
114 installed, and loads them. The user option @code{package-load-list}
115 specifies which packages to load; by default, all installed packages
116 are loaded. @xref{Package Installation,,, emacs, The GNU Emacs
119 The optional argument @var{no-activate}, if non-@code{nil}, causes
120 Emacs to update its record of installed packages without actually
121 loading them; it is for internal use only.
124 @node Simple Packages
125 @section Simple Packages
126 @cindex single file package
127 @cindex simple package
129 A simple package consists of a single Emacs Lisp source file. The
130 file must conform to the Emacs Lisp library header conventions
131 (@pxref{Library Headers}). The package's attributes are taken from
132 the various headers, as illustrated by the following example:
136 ;;; superfrobnicator.el --- Frobnicate and bifurcate flanges
138 ;; Copyright (C) 2011 Free Software Foundation, Inc.
141 ;; Author: J. R. Hacker <jrh@@example.com>
143 ;; Package-Requires: ((flange "1.0"))
144 ;; Keywords: frobnicate
150 ;; This package provides a minor mode to frobnicate and/or
151 ;; bifurcate any flanges you desire. To activate it, just type
155 (define-minor-mode superfrobnicator-mode
159 The name of the package is the same as the base name of the file, as
160 written on the first line. Here, it is @samp{superfrobnicator}.
162 The brief description is also taken from the first line. Here, it
163 is @samp{Frobnicate and bifurcate flanges}.
165 The version number comes from the @samp{Package-Version} header, if
166 it exists, or from the @samp{Version} header otherwise. One or the
167 other @emph{must} be present. Here, the version number is 1.3.
169 If the file has a @samp{;;; Commentary:} section, this section is
170 used as the long description. (When displaying the description, Emacs
171 omits the @samp{;;; Commentary:} line, as well as the leading comment
172 characters in the commentary itself.)
174 If the file has a @samp{Package-Requires} header, that is used as
175 the package dependencies. In the above example, the package depends
176 on the @samp{flange} package, version 1.0 or higher. @xref{Library
177 Headers}, for a description of the @samp{Package-Requires} header. If
178 the header is omitted, the package has no dependencies.
180 The file ought to also contain one or more autoload magic comments,
181 as explained in @ref{Packaging Basics}. In the above example, a magic
182 comment autoloads @code{superfrobnicator-mode}.
184 @xref{Package Archives}, for a explanation of how to add a
185 single-file package to a package archive.
187 @node Multi-file Packages
188 @section Multi-file Packages
189 @cindex multi-file package
191 A multi-file package is less convenient to create than a single-file
192 package, but it offers more features: it can include multiple Emacs
193 Lisp files, an Info manual, and other file types (such as images).
195 Prior to installation, a multi-file package is stored in a package
196 archive as a tar file. The tar file must be named
197 @file{@var{name}-@var{version}.tar}, where @var{name} is the package
198 name and @var{version} is the version number. Its contents, once
199 extracted, must all appear in a directory named
200 @file{@var{name}-@var{version}}, the @dfn{content directory}
201 (@pxref{Packaging Basics}). Files may also extract into
202 subdirectories of the content directory.
204 One of the files in the content directory must be named
205 @file{@var{name}-pkg.el}. It must contain a single Lisp form,
206 consisting of a call to the function @code{define-package}, described
207 below. This defines the package's version, brief description, and
210 For example, if we distribute version 1.3 of the superfrobnicator as
211 a multi-file package, the tar file would be
212 @file{superfrobnicator-1.3.tar}. Its contents would extract into the
213 directory @file{superfrobnicator-1.3}, and one of these would be the
214 file @file{superfrobnicator-pkg.el}.
216 @defun define-package name version &optional docstring requirements
217 This function defines a package. @var{name} is the package name, a
218 string. @var{version} is the version, as a string of a form that can
219 be understood by the function @code{version-to-list}. @var{docstring}
220 is the brief description.
222 @var{requirements} is a list of required packages and their versions.
223 Each element in this list should have the form @code{(@var{dep-name}
224 @var{dep-version})}, where @var{dep-name} is a symbol whose name is
225 the dependency's package name, and @var{dep-version} is the
226 dependency's version (a string).
229 If the content directory contains a file named @file{README}, this
230 file is used as the long description.
232 If the content directory contains a file named @file{dir}, this is
233 assumed to be an Info directory file made with @command{install-info}.
234 @xref{Invoking install-info, Invoking install-info, Invoking
235 install-info, texinfo, Texinfo}. The relevant Info files should also
236 be present in the content directory. In this case, Emacs will
237 automatically add the content directory to @code{Info-directory-list}
238 when the package is activated.
240 Do not include any @file{.elc} files in the package. Those are
241 created when the package is installed. Note that there is no way to
242 control the order in which files are byte-compiled.
244 Do not include any file named @file{@var{name}-autoloads.el}. This
245 file is reserved for the package's autoload definitions
246 (@pxref{Packaging Basics}). It is created automatically when the
247 package is installed, by searching all the Lisp files in the package
248 for autoload magic comments.
250 If the multi-file package contains auxiliary data files (such as
251 images), the package's Lisp code can refer to these files via the
252 variable @code{load-file-name} (@pxref{Loading}). Here is an example:
255 (defconst superfrobnicator-base (file-name-directory load-file-name))
257 (defun superfrobnicator-fetch-image (file)
258 (expand-file-name file superfrobnicator-base))
261 @node Package Archives
262 @section Creating and Maintaining Package Archives
263 @cindex package archive
265 Via the Package Menu, users may download packages from @dfn{package
266 archives}. Such archives are specified by the variable
267 @code{package-archives}, whose default value contains a single entry:
268 the archive hosted by the GNU project at @url{elpa.gnu.org}. This
269 section describes how to set up and maintain a package archive.
271 @cindex base location, package archive
272 @defopt package-archives
273 The value of this variable is an alist of package archives recognized
274 by the Emacs package manager.
276 Each alist element corresponds to one archive, and should have the
277 form @code{(@var{id} . @var{location})}, where @var{id} is the name of
278 the archive (a string) and @var{location} is its @dfn{base location}
281 If the base location starts with @samp{http:}, it is treated as a HTTP
282 URL, and packages are downloaded from this archive via HTTP (as is the
283 case for the default GNU archive).
285 Otherwise, the base location should be a directory name. In this
286 case, Emacs retrieves packages from this archive via ordinary file
287 access. Such ``local'' archives are mainly useful for testing.
290 A package archive is simply a directory in which the package files,
291 and associated files, are stored. If you want the archive to be
292 reachable via HTTP, this directory must be accessible to a web server.
293 How to accomplish this is beyond the scope of this manual.
295 A convenient way to set up and update a package archive is via the
296 @code{package-x} library. This is included with Emacs, but not loaded
297 by default; type @kbd{M-x load-library @key{RET} package-x @key{RET}} to
298 load it, or add @code{(require 'package-x)} to your init file.
299 @xref{Lisp Libraries,, Lisp Libraries, emacs, The GNU Emacs Manual}.
300 Once loaded, you can make use of the following:
302 @defopt package-archive-upload-base
303 The value of this variable is the base location of a package archive,
304 as a directory name. The commands in the @code{package-x} library
305 will use this base location.
307 The directory name should be absolute. You may specify a remote name,
308 such as @file{/ssh:foo@@example.com:/var/www/packages/}, if the
309 package archive is on a different machine. @xref{Remote Files,,
310 Remote Files, emacs, The GNU Emacs Manual}.
313 @deffn Command package-upload-file filename
314 This command prompts for @var{filename}, a file name, and uploads that
315 file to @code{package-archive-upload-base}. The file must be either a
316 simple package (a @file{.el} file) or a multi-file package (a
317 @file{.tar} file); otherwise, an error is raised. The package
318 attributes are automatically extracted, and the archive's contents
319 list is updated with this information.
321 If @code{package-archive-upload-base} does not specify a valid
322 directory, the function prompts interactively for one. If the
323 directory does not exist, it is created. The directory need not have
324 any initial contents (i.e., you can use this command to populate an
325 initially empty archive).
328 @deffn Command package-upload-buffer
329 This command is similar to @code{package-upload-file}, but instead of
330 prompting for a package file, it uploads the contents of the current
331 buffer. The current buffer must be visiting a simple package (a
332 @file{.el} file) or a multi-file package (a @file{.tar} file);
333 otherwise, an error is raised.
337 After you create an archive, remember that it is not accessible in the
338 Package Menu interface unless it is in @code{package-archives}.