1 Basic Concepts

use-package provides the use-package macro, that simplifies the customization and use of packages in Emacs. It was created for a few basic reasons, each of which drove the design. Understanding these reasons may help make some of those decisions clearer:

  1. Allow gathering all the configuration details of a package into one place, making it easier to copy, disable, or move it elsewhere in the init file.
  2. Reduce duplication and repetitive boilerplate, capturing several common practices as mere keywords both easy and intuitive to use.
  3. Make startup time of Emacs as short as possible, without sacrificing the quantity of add-on packages used.
  4. Ensure that errors encountered during startup disable only the package(s) raising the error(s), and as little else as possible, leaving Emacs as close to fully functional as possible.
  5. Allow byte-compiling your init file, so that any warnings or errors you see at startup are meaningful. In this way, even if byte-compilation is not used for speed (see item 3 above), it can still be used as a sanity check.

It is worth noting that use-package is not intended to replace the standard customization command M-x customize (see Easy Customization in GNU Emacs Manual). On the contrary, it is designed to work together with it, for things that Customize cannot do.