# jwiegley/use-package

**Attribution required: if you use, quote, or summarise this content, you must credit and link back to [awesome-repositories.com](https://awesome-repositories.com/repository/jwiegley-use-package).**

4,465 stars · 262 forks · Emacs Lisp · GPL-3.0 · archived

## Links

- GitHub: https://github.com/jwiegley/use-package
- Homepage: https://jwiegley.github.io/use-package
- awesome-repositories: https://awesome-repositories.com/repository/jwiegley-use-package.md

## Topics

`autoload` `deferred-loading` `emacs` `emacs-lisp` `handler` `keymap` `keyword` `melpa`

## Description

This project is a declarative framework and domain-specific language for managing Emacs Lisp packages. It functions as a startup performance optimizer by grouping package installation, variable settings, and keybindings into single blocks to reduce initial boot time.

The system distinguishes itself through a deferred loading framework that delays package execution until specific keys, hooks, or modes are triggered. It uses a macro-based declaration syntax to organize configuration and automate the generation of autoloads, ensuring packages are only loaded when they are actually required.

The project covers broad capability areas including automated package installation from remote archives, dependency management, and conditional loading based on the operating system or environment. It also provides comprehensive keyboard mapping for shortcuts and chords, as well as tools for analyzing loading statistics and modifying mode-line displays.

## Tags

### Development Tools & Productivity

- [Editor Configuration Management](https://awesome-repositories.com/f/development-tools-productivity/editor-configuration-management.md) — Organizes package settings into single declarative blocks to keep the editor initialization file maintainable.
- [Package Managers](https://awesome-repositories.com/f/development-tools-productivity/emacs-extensions/package-managers.md) — Provides a declarative framework for managing the installation and configuration of Emacs Lisp packages.
- [Autoload Mechanisms](https://awesome-repositories.com/f/development-tools-productivity/plugin-autoloading/autoload-mechanisms.md) — Implements a deferred-loading framework that generates autoloads to reduce initial editor boot time.
- [Conditional Loading Controls](https://awesome-repositories.com/f/development-tools-productivity/cli-command-extensions/plugin-package-loading/dynamic-package-loading/runtime-plugin-loading/conditional-loading-controls.md) — Determines if a package should be loaded based on the detected operating system and environment state. ([source](https://jwiegley.github.io/use-package/keywords/))
- [Custom Load-Path Extensions](https://awesome-repositories.com/f/development-tools-productivity/custom-load-path-extensions.md) — Extends the system load path to allow the editor to locate and load external package files. ([source](https://cdn.jsdelivr.net/gh/jwiegley/use-package@master/README.md))
- [Command Key Bindings](https://awesome-repositories.com/f/development-tools-productivity/input-binding-libraries/command-key-bindings.md) — Binds keyboard shortcuts to functions and creates autoloads to defer package loading until invocation. ([source](https://cdn.jsdelivr.net/gh/jwiegley/use-package@master/README.md))
- [Keyboard Shortcut Mappings](https://awesome-repositories.com/f/development-tools-productivity/keyboard-shortcut-mappings.md) — Assigns keys to commands and creates autoloads to ensure packages load only when the shortcut is pressed. ([source](https://jwiegley.github.io/use-package/keywords/))
- [Hook Registration](https://awesome-repositories.com/f/development-tools-productivity/lifecycle-hooks/hook-registration.md) — Allows assigning functions to specific events to defer the full loading of a package. ([source](https://cdn.jsdelivr.net/gh/jwiegley/use-package@master/README.md))
- [Package Dependency Management](https://awesome-repositories.com/f/development-tools-productivity/package-dependency-management.md) — Controls the loading order of packages based on the presence or status of other required dependencies. ([source](https://jwiegley.github.io/use-package/keywords/))
- [Editor Startup Optimization](https://awesome-repositories.com/f/development-tools-productivity/shell-startup-optimizers/editor-startup-optimization.md) — Reduces initial boot time by deferring the loading of packages and settings until they are actually needed.
- [Magic Byte File Identification](https://awesome-repositories.com/f/development-tools-productivity/magic-byte-file-identification.md) — Automatically loads packages by analyzing file headers and magic byte sequences when files are opened.
- [Pattern-Triggered Package Loading](https://awesome-repositories.com/f/development-tools-productivity/magic-byte-file-identification/pattern-triggered-package-loading.md) — Loads packages automatically if the start of a file matches a predefined regular expression. ([source](https://cdn.jsdelivr.net/gh/jwiegley/use-package@master/README.md))
- [Variable and Face Customizations](https://awesome-repositories.com/f/development-tools-productivity/nix-packages/package-customizations/variable-and-face-customizations.md) — Sets custom variables and visual faces for packages within their specific declaration blocks. ([source](https://cdn.jsdelivr.net/gh/jwiegley/use-package@master/README.md))

### DevOps & Infrastructure

- [Configuration File Loading](https://awesome-repositories.com/f/devops-infrastructure/configuration-management/file-based-configuration/configuration-file-loading.md) — Isolates package settings and loading logic into organized blocks for better maintainability. ([source](https://jwiegley.github.io/use-package))
- [Automated Package Provisioning](https://awesome-repositories.com/f/devops-infrastructure/distribution-packaging/system-package-manager-installations/automated-package-provisioning.md) — Automatically downloads and installs missing packages from remote archives during editor startup.
- [Remote Archive Management](https://awesome-repositories.com/f/devops-infrastructure/ubuntu-server-deployments/remote-archive-management.md) — Installs missing packages from remote archives and pins specific packages to designated repositories. ([source](https://cdn.jsdelivr.net/gh/jwiegley/use-package@master/README.md))

### Programming Languages & Runtimes

- [Conditional Mod Loading](https://awesome-repositories.com/f/programming-languages-runtimes/conditional-mod-loading.md) — Implements systems for controlling the loading of software modules based on dependencies and environmental predicates. ([source](https://cdn.jsdelivr.net/gh/jwiegley/use-package@master/README.md))
- [Configuration Domain-Specific Languages](https://awesome-repositories.com/f/programming-languages-runtimes/configuration-domain-specific-languages.md) — Implements a declarative syntax for grouping package installation, variable settings, and keybindings.
- [Configuration DSLs](https://awesome-repositories.com/f/programming-languages-runtimes/configuration-dsls.md) — Provides a declarative Lisp macro syntax to group package installation, settings, and keybindings.
- [Package Installations](https://awesome-repositories.com/f/programming-languages-runtimes/package-installations.md) — Provides automated downloading and installation of Emacs Lisp packages from remote archives.
- [Chorded Key Mappings](https://awesome-repositories.com/f/programming-languages-runtimes/input-key-mappings/configurable-key-to-command-mappings/chorded-key-mappings.md) — Maps sequences of keys to functions using a chord-based input system for complex commands. ([source](https://cdn.jsdelivr.net/gh/jwiegley/use-package@master/README.md))
- [Shebang and Extension Mapping](https://awesome-repositories.com/f/programming-languages-runtimes/interpreter-mode-configurations/shebang-and-extension-mapping.md) — Establishes loading rules based on file extensions or the interpreter specified in a file's shebang. ([source](https://cdn.jsdelivr.net/gh/jwiegley/use-package@master/README.md))

### Software Engineering & Architecture

- [Package Dependency Resolution](https://awesome-repositories.com/f/software-engineering-architecture/dependency-graph-resolution/package-dependency-resolution.md) — Ensures required packages are loaded in the correct sequence before dependent packages initialize.
- [Configuration Packages](https://awesome-repositories.com/f/software-engineering-architecture/feature-extensions/capability-bundles/configuration-packages.md) — Groups package settings into single declarative blocks to improve startup performance and configuration cleanliness. ([source](https://cdn.jsdelivr.net/gh/jwiegley/use-package@master/README.md))
- [Conditional Initialization](https://awesome-repositories.com/f/software-engineering-architecture/module-loading-systems/conditional-initialization.md) — Restricts the initialization of modules based on the operating system or presence of system dependencies.
- [Event-Driven Initializers](https://awesome-repositories.com/f/software-engineering-architecture/object-pooling/lazy-initializers/event-driven-initializers.md) — Registers functions to trigger package loading during specific editor events.
- [Loading Sequence Control](https://awesome-repositories.com/f/software-engineering-architecture/plugin-architectures/programmatic-plugin-loading/loading-sequence-control.md) — Enforces the specific order in which packages are initialized to maintain system stability. ([source](https://cdn.jsdelivr.net/gh/jwiegley/use-package@master/README.md))
- [Deferred Plugin Loading](https://awesome-repositories.com/f/software-engineering-architecture/project-context-managers/on-demand-context-loading/deferred-plugin-loading.md) — Provides a system that delays the activation of packages until a specific command, hook, or mode is triggered.
- [Keymap Bindings](https://awesome-repositories.com/f/software-engineering-architecture/application-lifecycle-management/configuration-management/domain-specific-configurations/custom-command-managers/command-name-overrides/keymap-overrides/keymap-plugin-architectures/keymap-bindings.md) — Binds keys to defined keymaps and ensures the associated package is loaded before executing the keypress. ([source](https://jwiegley.github.io/use-package/keywords/))
- [Hierarchical](https://awesome-repositories.com/f/software-engineering-architecture/application-lifecycle-management/configuration-management/domain-specific-configurations/custom-command-managers/command-name-overrides/keymap-overrides/keymap-plugin-architectures/keymap-bindings/hierarchical.md) — Binds keyboard shortcuts to entire keymaps while managing deferred package loading. ([source](https://cdn.jsdelivr.net/gh/jwiegley/use-package@master/README.md))
- [Lifecycle Configuration Hooks](https://awesome-repositories.com/f/software-engineering-architecture/lifecycle-configuration-hooks.md) — Executes custom code and sets variables immediately before or after a package is loaded. ([source](https://jwiegley.github.io/use-package/keywords/))
