An Emacs framework for the stubborn martian hacker
22,678
stars
19,744
commits
Emacs Lisp
primary language
Sep 6, 2026
updated
[!CAUTION]
doomemacs.comis not associated with nor endorsed by this project!doomemacs.orgis our one and only domain. Read our announcement about it here.
It is a story as old as time. A stubborn, shell-dwelling, and melodramatic vimmer—envious of the features of modern text editors—spirals into despair before he succumbs to the dark side. This is his config.
Doom is a configuration framework for GNU Emacs tailored for Emacs bankruptcy veterans who want less framework in their frameworks, a modicum of stability (and reproducibility) from their package manager, and the performance of a hand rolled config (or better). It can be a foundation for your own config or a resource for Emacs enthusiasts to learn more about our favorite operating system.
Its design is guided by these mantras:
doom doctor to tell you what's missing.Check out the FAQ for answers to common questions about the project.
PATH, among other
things.find, ls, and tar (on MacOS and BSD *nix)[!WARNING] Avoid unstable and pre-release builds of Emacs. These end in
.50,.60, or.9X(e.g.28.1.91). Doom should generally work on Emacs HEAD (the maintainer dogfoods it), but support lags behind the bleeding edge by at least a month or so.
[!IMPORTANT] Doom is comprised of ~150 optional modules, some of which may have additional dependencies. Visit their documentation or run
bin/doom doctorto check for any that you may have missed.
git clone --depth 1 https://github.com/doomemacs/core ~/.config/emacs
~/.config/emacs/bin/doom install
Then read our Getting Started guide to be walked through installing, configuring and maintaining Doom Emacs.
It's a good idea to add ~/.config/emacs/bin to your PATH! Other bin/doom
commands you should know about:
doom sync to synchronize your private config with Doom by installing missing
packages, removing orphaned packages, and regenerating caches. Run this
whenever you modify your private init.el or packages.el, or install/remove
an Emacs package through your OS package manager (e.g. mu4e or agda).doom sync --env to include a snapshot of your shell environment that Doom
will load at startup. This allows Emacs to inherit your PATH, among other
things. This replaces
exec-path-from-shell.doom upgrade to update Doom to the latest release & all installed packages.doom doctor to diagnose common issues with your system and config.Doom is an active and ongoing project. To make that development more transparent, its roadmap (and other concerns) are published across three github project boards and a newsletter:
Emacs is no journey of a mere thousand miles. You will run into problems and mysterious errors. When you do, here are some places you can look for help:
bin/doom script's most important
commands.bin/doom doctor to detect common issues with your development
environment and private config.Doom is a labor of love and incurable madness, but I'm only one guy. Doom wouldn't be where it is today without your help. I welcome contributions of any kind!
Generative AI is not used in the development of this project (except to test, debug, and improve LLM modules). LLM-generated (or assisted) contributions are highly discouraged, but tolerated so long as they meet the following criteria:
M-x doom/info must be uploaded as a file, not published as text in the issue/PR.1Failing that, related issues/PRs will be immediately closed and refused with notice. Repeat offenders will be banned.
A file-upload is used because doom-infos are filled with keywords that pollute search engine results and make issues harder for users/maintainers to find. ↩
Emacs Lisp
98.6%
An Emacs framework for the stubborn martian hacker
22,678
stars
19,744
commits
Emacs Lisp
primary language
Sep 6, 2026
updated
[!CAUTION]
doomemacs.comis not associated with nor endorsed by this project!doomemacs.orgis our one and only domain. Read our announcement about it here.
It is a story as old as time. A stubborn, shell-dwelling, and melodramatic vimmer—envious of the features of modern text editors—spirals into despair before he succumbs to the dark side. This is his config.
Doom is a configuration framework for GNU Emacs tailored for Emacs bankruptcy veterans who want less framework in their frameworks, a modicum of stability (and reproducibility) from their package manager, and the performance of a hand rolled config (or better). It can be a foundation for your own config or a resource for Emacs enthusiasts to learn more about our favorite operating system.
Its design is guided by these mantras:
doom doctor to tell you what's missing.Check out the FAQ for answers to common questions about the project.
PATH, among other
things.find, ls, and tar (on MacOS and BSD *nix)[!WARNING] Avoid unstable and pre-release builds of Emacs. These end in
.50,.60, or.9X(e.g.28.1.91). Doom should generally work on Emacs HEAD (the maintainer dogfoods it), but support lags behind the bleeding edge by at least a month or so.
[!IMPORTANT] Doom is comprised of ~150 optional modules, some of which may have additional dependencies. Visit their documentation or run
bin/doom doctorto check for any that you may have missed.
git clone --depth 1 https://github.com/doomemacs/core ~/.config/emacs
~/.config/emacs/bin/doom install
Then read our Getting Started guide to be walked through installing, configuring and maintaining Doom Emacs.
It's a good idea to add ~/.config/emacs/bin to your PATH! Other bin/doom
commands you should know about:
doom sync to synchronize your private config with Doom by installing missing
packages, removing orphaned packages, and regenerating caches. Run this
whenever you modify your private init.el or packages.el, or install/remove
an Emacs package through your OS package manager (e.g. mu4e or agda).doom sync --env to include a snapshot of your shell environment that Doom
will load at startup. This allows Emacs to inherit your PATH, among other
things. This replaces
exec-path-from-shell.doom upgrade to update Doom to the latest release & all installed packages.doom doctor to diagnose common issues with your system and config.Doom is an active and ongoing project. To make that development more transparent, its roadmap (and other concerns) are published across three github project boards and a newsletter:
Emacs is no journey of a mere thousand miles. You will run into problems and mysterious errors. When you do, here are some places you can look for help:
bin/doom script's most important
commands.bin/doom doctor to detect common issues with your development
environment and private config.Doom is a labor of love and incurable madness, but I'm only one guy. Doom wouldn't be where it is today without your help. I welcome contributions of any kind!
Generative AI is not used in the development of this project (except to test, debug, and improve LLM modules). LLM-generated (or assisted) contributions are highly discouraged, but tolerated so long as they meet the following criteria:
M-x doom/info must be uploaded as a file, not published as text in the issue/PR.1Failing that, related issues/PRs will be immediately closed and refused with notice. Repeat offenders will be banned.
A file-upload is used because doom-infos are filled with keywords that pollute search engine results and make issues harder for users/maintainers to find. ↩
(top 30 of 358)
Emacs Lisp
98.6%