Introduction
Doom Emacs is an Emacs configuration framework designed for speed and modularity. It uses its own CLI tool (doom) and a declarative package management system that compiles and byte-compiles configurations for fast startup, typically under one second even with hundreds of packages loaded.
What Doom Emacs Does
- Provides a module system where each module bundles packages, config, and keybindings
- Uses aggressive lazy loading and byte-compilation for sub-second startup
- Ships a dedicated CLI (doom sync, doom upgrade, doom doctor) for managing the config
- Integrates Evil mode for Vim-style editing with SPC and comma leader keys
- Supports literate configuration via Org-mode files
Architecture Overview
Doom Emacs is organized into modules grouped by category: lang, tools, ui, completion, and more. The init.el file declares which modules are active, packages.el adds extra packages, and config.el holds user settings. The doom CLI compiles this into an autoloads file and byte-compiled output, avoiding the overhead of runtime package resolution that slows other Emacs setups.
Self-Hosting & Configuration
- Clone the repo and run doom install to bootstrap packages and compile
- Edit ~/.config/doom/init.el to enable or disable modules
- Add custom packages in ~/.config/doom/packages.el using the package! macro
- Run doom sync after any configuration change to recompile
- Requires Emacs 29+, Git, and ripgrep for full functionality
Key Features
- Sub-second startup through ahead-of-time compilation and autoloads
- doom doctor command diagnoses common configuration issues
- Declarative package! macro with recipe support for custom sources
- Module flags (e.g., +lsp, +tree-sitter) toggle features within a module
- Active community with frequent updates and a Discord server
Comparison with Similar Tools
- Spacemacs — broader layer ecosystem; Doom is faster due to compile-time optimizations
- Vanilla Emacs — full control but slow to configure; Doom provides instant productivity
- Prelude — minimal starter; Doom is a comprehensive framework with its own tooling
- Centaur Emacs — single-author config; Doom has a larger module library and contributor base
- LazyVim — Neovim-based; Doom leverages Emacs Lisp ecosystem and Org-mode
FAQ
Q: How fast is Doom Emacs startup? A: Typically under one second with a full configuration, thanks to byte-compilation and deferred loading.
Q: Can I use Doom without Vim keybindings? A: Yes. Disable the evil module in init.el to use standard Emacs keybindings.
Q: How do I update Doom Emacs? A: Run doom upgrade from the terminal to pull framework updates and sync packages.
Q: What does doom sync do? A: It installs missing packages, removes orphaned ones, rebuilds autoloads, and byte-compiles your configuration.