Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs
[emacs.git] / doc / lispref / package.texi
blob37c1ee6697d93f3772c4727068c5b70ba57c159a
1 @c -*-texinfo-*-
2 @c This is part of the GNU Emacs Lisp Reference Manual.
3 @c Copyright (C) 2010-2018 Free Software Foundation, Inc.
4 @c See the file elisp.texi for copying conditions.
5 @node Packaging
6 @chapter Preparing Lisp code for distribution
7 @cindex package
8 @cindex Lisp package
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.
20 @menu
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.
25 @end menu
27 @node Packaging Basics
28 @section Packaging Basics
29 @cindex package attributes
30 @cindex package name
31 @cindex package version
32 @cindex dependencies
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
39 manual).
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
47 @dfn{attributes}:
49 @table @asis
50 @item Name
51 A short word (e.g., @samp{auctex}).  This is usually also the symbol
52 prefix used in the program (@pxref{Coding Conventions}).
54 @item Version
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 so that it will be
58 recognized as an upgrade by users querying the package archive.
60 @item Brief description
61 This is shown when the package is listed in the Package Menu.  It
62 should occupy a single line, ideally in 36 characters or less.
64 @item Long description
65 This is shown in the buffer created by @kbd{C-h P}
66 (@code{describe-package}), following the package's brief description
67 and installation status.  It normally spans multiple lines, and should
68 fully describe the package's capabilities and how to begin using it
69 once it is installed.
71 @item Dependencies
72 A list of other packages (possibly including minimal acceptable
73 version numbers) on which this package depends.  The list may be
74 empty, meaning this package has no dependencies.  Otherwise,
75 installing this package also automatically installs its dependencies,
76 recursively; if any dependency cannot be found, the package cannot be
77 installed.
78 @end table
80 @cindex content directory, package
81   Installing a package, either via the command @code{package-install-file},
82 or via the Package Menu, creates a subdirectory of
83 @code{package-user-dir} named @file{@var{name}-@var{version}}, where
84 @var{name} is the package's name and @var{version} its version
85 (e.g., @file{~/.emacs.d/elpa/auctex-11.86/}).  We call this the
86 package's @dfn{content directory}.  It is where Emacs puts the
87 package's contents (the single Lisp file for a simple package, or the
88 files extracted from a multi-file package).
90 @cindex package autoloads
91   Emacs then searches every Lisp file in the content directory for
92 autoload magic comments (@pxref{Autoload}).  These autoload
93 definitions are saved to a file named @file{@var{name}-autoloads.el}
94 in the content directory.  They are typically used to autoload the
95 principal user commands defined in the package, but they can also
96 perform other tasks, such as adding an element to
97 @code{auto-mode-alist} (@pxref{Auto Major Mode}).  Note that a package
98 typically does @emph{not} autoload every function and variable defined
99 within it---only the handful of commands typically called to begin
100 using the package.  Emacs then byte-compiles every Lisp file in the
101 package.
103   After installation, the installed package is @dfn{loaded}: Emacs
104 adds the package's content directory to @code{load-path}, and
105 evaluates the autoload definitions in @file{@var{name}-autoloads.el}.
107   Whenever Emacs starts up, it automatically calls the function
108 @code{package-activate-all} to make installed packages available to the
109 current session.  This is done after loading the early init file, but
110 before loading the regular init file (@pxref{Startup Summary}).
111 Packages are not automatically made available if the user option
112 @code{package-enable-at-startup} is set to @code{nil} in the early
113 init file.
115 @defun package-activate-all
116 This function makes the packages available to the current session.
117 The user option @code{package-load-list} specifies which packages to
118 make available; by default, all installed packages are made available.
119 If called during startup, this function also sets
120 @code{package-enable-at-startup} to @code{nil}, to avoid accidentally
121 evaluating package autoloads more than once.  @xref{Package
122 Installation,,, emacs, The GNU Emacs Manual}.
124 In most cases, you should not need to call @code{package-activate-all},
125 as this is done automatically during startup.  Simply make sure to put
126 any code that should run before @code{package-activate-all} in the early
127 init file, and any code that should run after it in the primary init
128 file (@pxref{Init File,,, emacs, The GNU Emacs Manual}).
129 @end defun
131 @deffn Command package-initialize &optional no-activate
132 This function initializes Emacs' internal record of which packages are
133 installed, and then calls @code{package-activate-all}.
135 The optional argument @var{no-activate}, if non-@code{nil}, causes
136 Emacs to update its record of installed packages without actually
137 making them available.
138 @end deffn
140 @node Simple Packages
141 @section Simple Packages
142 @cindex single file package
143 @cindex simple package
145   A simple package consists of a single Emacs Lisp source file.  The
146 file must conform to the Emacs Lisp library header conventions
147 (@pxref{Library Headers}).  The package's attributes are taken from
148 the various headers, as illustrated by the following example:
150 @example
151 @group
152 ;;; superfrobnicator.el --- Frobnicate and bifurcate flanges
154 ;; Copyright (C) 2011 Free Software Foundation, Inc.
155 @end group
157 ;; Author: J. R. Hacker <jrh@@example.com>
158 ;; Version: 1.3
159 ;; Package-Requires: ((flange "1.0"))
160 ;; Keywords: multimedia, frobnicate
161 ;; URL: http://example.com/jrhacker/superfrobnicate
163 @dots{}
165 ;;; Commentary:
167 ;; This package provides a minor mode to frobnicate and/or
168 ;; bifurcate any flanges you desire.  To activate it, just type
169 @dots{}
171 ;;;###autoload
172 (define-minor-mode superfrobnicator-mode
173 @dots{}
174 @end example
176   The name of the package is the same as the base name of the file, as
177 written on the first line.  Here, it is @samp{superfrobnicator}.
179   The brief description is also taken from the first line.  Here, it
180 is @samp{Frobnicate and bifurcate flanges}.
182   The version number comes from the @samp{Package-Version} header, if
183 it exists, or from the @samp{Version} header otherwise.  One or the
184 other @emph{must} be present.  Here, the version number is 1.3.
186   If the file has a @samp{;;; Commentary:} section, this section is
187 used as the long description.  (When displaying the description, Emacs
188 omits the @samp{;;; Commentary:} line, as well as the leading comment
189 characters in the commentary itself.)
191   If the file has a @samp{Package-Requires} header, that is used as
192 the package dependencies.  In the above example, the package depends
193 on the @samp{flange} package, version 1.0 or higher.  @xref{Library
194 Headers}, for a description of the @samp{Package-Requires} header.  If
195 the header is omitted, the package has no dependencies.
197   The @samp{Keywords} and @samp{URL} headers are optional, but recommended.
198 The command @code{describe-package} uses these to add links to its
199 output.  The @samp{Keywords} header should contain at least one
200 standard keyword from the @code{finder-known-keywords} list.
202   The file ought to also contain one or more autoload magic comments,
203 as explained in @ref{Packaging Basics}.  In the above example, a magic
204 comment autoloads @code{superfrobnicator-mode}.
206   @xref{Package Archives}, for an explanation of how to add a
207 single-file package to a package archive.
209 @node Multi-file Packages
210 @section Multi-file Packages
211 @cindex multi-file package
213   A multi-file package is less convenient to create than a single-file
214 package, but it offers more features: it can include multiple Emacs
215 Lisp files, an Info manual, and other file types (such as images).
217   Prior to installation, a multi-file package is stored in a package
218 archive as a tar file.  The tar file must be named
219 @file{@var{name}-@var{version}.tar}, where @var{name} is the package
220 name and @var{version} is the version number.  Its contents, once
221 extracted, must all appear in a directory named
222 @file{@var{name}-@var{version}}, the @dfn{content directory}
223 (@pxref{Packaging Basics}).  Files may also extract into
224 subdirectories of the content directory.
226   One of the files in the content directory must be named
227 @file{@var{name}-pkg.el}.  It must contain a single Lisp form,
228 consisting of a call to the function @code{define-package}, described
229 below.  This defines the package's attributes: version, brief
230 description, and requirements.
232   For example, if we distribute version 1.3 of the superfrobnicator as
233 a multi-file package, the tar file would be
234 @file{superfrobnicator-1.3.tar}.  Its contents would extract into the
235 directory @file{superfrobnicator-1.3}, and one of these would be the
236 file @file{superfrobnicator-pkg.el}.
238 @defun define-package name version &optional docstring requirements
239 This function defines a package.  @var{name} is the package name, a
240 string.  @var{version} is the version, as a string of a form that can
241 be understood by the function @code{version-to-list}.  @var{docstring}
242 is the brief description.
244 @var{requirements} is a list of required packages and their versions.
245 Each element in this list should have the form @code{(@var{dep-name}
246 @var{dep-version})}, where @var{dep-name} is a symbol whose name is
247 the dependency's package name, and @var{dep-version} is the
248 dependency's version (a string).
249 @end defun
251   If the content directory contains a file named @file{README}, this
252 file is used as the long description.
254   If the content directory contains a file named @file{dir}, this is
255 assumed to be an Info directory file made with @command{install-info}.
256 @xref{Invoking install-info, Invoking install-info, Invoking
257 install-info, texinfo, Texinfo}.  The relevant Info files should also
258 be present in the content directory.  In this case, Emacs will
259 automatically add the content directory to @code{Info-directory-list}
260 when the package is activated.
262   Do not include any @file{.elc} files in the package.  Those are
263 created when the package is installed.  Note that there is no way to
264 control the order in which files are byte-compiled.
266   Do not include any file named @file{@var{name}-autoloads.el}.  This
267 file is reserved for the package's autoload definitions
268 (@pxref{Packaging Basics}).  It is created automatically when the
269 package is installed, by searching all the Lisp files in the package
270 for autoload magic comments.
272   If the multi-file package contains auxiliary data files (such as
273 images), the package's Lisp code can refer to these files via the
274 variable @code{load-file-name} (@pxref{Loading}).  Here is an example:
276 @smallexample
277 (defconst superfrobnicator-base (file-name-directory load-file-name))
279 (defun superfrobnicator-fetch-image (file)
280   (expand-file-name file superfrobnicator-base))
281 @end smallexample
283 @node Package Archives
284 @section Creating and Maintaining Package Archives
285 @cindex package archive
287   Via the Package Menu, users may download packages from @dfn{package
288 archives}.  Such archives are specified by the variable
289 @code{package-archives}, whose default value contains a single entry:
290 the archive hosted by the GNU project at @url{https://elpa.gnu.org}.  This
291 section describes how to set up and maintain a package archive.
293 @cindex base location, package archive
294 @defopt package-archives
295 The value of this variable is an alist of package archives recognized
296 by the Emacs package manager.
298 Each alist element corresponds to one archive, and should have the
299 form @code{(@var{id} . @var{location})}, where @var{id} is the name of
300 the archive (a string) and @var{location} is its @dfn{base location}
301 (a string).
303 If the base location starts with @samp{http:} or @samp{https:}, it
304 is treated as an HTTP(S) URL, and packages are downloaded from this
305 archive via HTTP(S) (as is the case for the default GNU archive).
307 Otherwise, the base location should be a directory name.  In this
308 case, Emacs retrieves packages from this archive via ordinary file
309 access.  Such local archives are mainly useful for testing.
310 @end defopt
312   A package archive is simply a directory in which the package files,
313 and associated files, are stored.  If you want the archive to be
314 reachable via HTTP, this directory must be accessible to a web server.
315 How to accomplish this is beyond the scope of this manual.
317   A convenient way to set up and update a package archive is via the
318 @code{package-x} library.  This is included with Emacs, but not loaded
319 by default; type @kbd{M-x load-library @key{RET} package-x @key{RET}} to
320 load it, or add @code{(require 'package-x)} to your init file.
321 @xref{Lisp Libraries,, Lisp Libraries, emacs, The GNU Emacs Manual}.
322 Once loaded, you can make use of the following:
324 @defopt package-archive-upload-base
325 The value of this variable is the base location of a package archive,
326 as a directory name.  The commands in the @code{package-x} library
327 will use this base location.
329 The directory name should be absolute.  You may specify a remote name,
330 such as @file{/ssh:foo@@example.com:/var/www/packages/}, if the
331 package archive is on a different machine.  @xref{Remote Files,,
332 Remote Files, emacs, The GNU Emacs Manual}.
333 @end defopt
335 @deffn Command package-upload-file filename
336 This command prompts for @var{filename}, a file name, and uploads that
337 file to @code{package-archive-upload-base}.  The file must be either a
338 simple package (a @file{.el} file) or a multi-file package (a
339 @file{.tar} file); otherwise, an error is raised.  The package
340 attributes are automatically extracted, and the archive's contents
341 list is updated with this information.
343 If @code{package-archive-upload-base} does not specify a valid
344 directory, the function prompts interactively for one.  If the
345 directory does not exist, it is created.  The directory need not have
346 any initial contents (i.e., you can use this command to populate an
347 initially empty archive).
348 @end deffn
350 @deffn Command package-upload-buffer
351 This command is similar to @code{package-upload-file}, but instead of
352 prompting for a package file, it uploads the contents of the current
353 buffer.  The current buffer must be visiting a simple package (a
354 @file{.el} file) or a multi-file package (a @file{.tar} file);
355 otherwise, an error is raised.
356 @end deffn
358 @noindent
359 After you create an archive, remember that it is not accessible in the
360 Package Menu interface unless it is in @code{package-archives}.
362 @cindex package archive security
363 @cindex package signing
364 Maintaining a public package archive entails a degree of responsibility.
365 When Emacs users install packages from your archive, those packages
366 can cause Emacs to run arbitrary code with the permissions of the
367 installing user.  (This is true for Emacs code in general, not just
368 for packages.)  So you should ensure that your archive is
369 well-maintained and keep the hosting system secure.
371   One way to increase the security of your packages is to @dfn{sign}
372 them using a cryptographic key.  If you have generated a
373 private/public gpg key pair, you can use gpg to sign the package like
374 this:
376 @c FIXME EasyPG / package-x way to do this.
377 @example
378 gpg -ba -o @var{file}.sig @var{file}
379 @end example
381 @noindent
382 For a single-file package, @var{file} is the package Lisp file;
383 for a multi-file package, it is the package tar file.
384 You can also sign the archive's contents file in the same way.
385 Make the @file{.sig} files available in the same location as the packages.
386 You should also make your public key available for people to download;
387 e.g., by uploading it to a key server such as @url{http://pgp.mit.edu/}.
388 When people install packages from your archive, they can use
389 your public key to verify the signatures.
391 A full explanation of these matters is outside the scope of this
392 manual.  For more information on cryptographic keys and signing,
393 @pxref{Top,, GnuPG, gnupg, The GNU Privacy Guard Manual}.  Emacs comes
394 with an interface to GNU Privacy Guard, @pxref{Top,, EasyPG, epa,
395 Emacs EasyPG Assistant Manual}.