You know GTD. You want to practice it in Emacs.
org-mode is incredibly powerful… and incredibly complex.
Do you really need to master org-agenda’s custom views, org-capture templates, and org-mode’s keyword workflows just to implement David Allen’s methodology?
org-gtd treats Emacs and org-mode as infrastructure.
You focus on GTD. org-gtd handles the org-mode complexity.
- Turnkey GTD workflow matching the book
- Automatic project dependency management
- Built-in views for capture/clarify/organize/engage/review
- Hooks for your customizations (effort, tags, integrations)
- Extensible for email, code tools, external sources
- You practice GTD (or want to start)
- You use Emacs (beginner to expert - we’ll explain what you need)
- You want to DO work, not configure systems
Get org-gtd working end-to-end: capture an item, organize it, and see it in your daily view.
- Emacs 28.1 or higher
- org-mode (included with Emacs)
Install from MELPA:
;; Manually
M-x package-install RET org-gtd RETIf you use use-package, copy this entire block into your init file - it includes installation, configuration, and keybindings:
(use-package org-gtd
:ensure t
:after org
:demand t
:init
;; Suppress upgrade warnings (must be set before package loads)
(setq org-gtd-update-ack "4.0.0")
;; Where org-gtd will keep its files (defaults to ~/gtd/)
;; (setq org-gtd-directory "~/my-gtd/")
:custom
;; Configure TODO keyword states (options like "TODO(t)" or "DONE(d!)" are fine)
(org-todo-keywords '((sequence "TODO" "NEXT" "WAIT" "|" "DONE" "CNCL")))
;; Map GTD semantic states to your keywords
(org-gtd-keyword-mapping '((todo . "TODO")
(next . "NEXT")
(wait . "WAIT")
(canceled . "CNCL")))
:config
;; REQUIRED: Enable org-edna for project dependencies
(org-edna-mode 1)
;; Add org-gtd files to your agenda (must be in :config so org-gtd-directory is defined)
(setq org-agenda-files (list org-gtd-directory))
:bind
;; Global keybindings (work anywhere in Emacs)
(("C-c d c" . org-gtd-capture)
("C-c d e" . org-gtd-engage)
("C-c d p" . org-gtd-process-inbox)
("C-c d n" . org-gtd-show-all-next)
("C-c d s" . org-gtd-reflect-stuck-projects)
;; Keybinding for organizing items (only works in clarify buffers)
:map org-gtd-clarify-mode-map
("C-c c" . org-gtd-organize)
;; Quick actions on tasks in agenda views (optional but recommended)
:map org-agenda-mode-map
("C-c ." . org-gtd-agenda-transient)))Existing org-mode users: If you already have org-todo-keywords configured, add a separate sequence for GTD keywords rather than mixing them into existing sequences. See the full documentation for details.
If you don’t use use-package, copy this into your init file and restart Emacs:
;; Suppress upgrade warnings (set BEFORE org-gtd loads)
(setq org-gtd-update-ack "4.0.0")
;; Configure org-mode TODO keywords
;; All GTD keywords must be in the same sequence
;; Standard options like "TODO(t)" or "DONE(d!)" are fine - org-gtd ignores them
(setq org-todo-keywords
'((sequence "TODO" "NEXT" "WAIT" "|" "DONE" "CNCL")))
;; Map GTD semantic states to your keywords
(setq org-gtd-keyword-mapping
'((todo . "TODO") ; tasks not ready to act on
(next . "NEXT") ; tasks ready to act on immediately
(wait . "WAIT") ; tasks blocked or delegated
(canceled . "CNCL"))) ; tasks that won't be completed
;; Optional: Set GTD directory (defaults to ~/gtd/)
;; (setq org-gtd-directory "~/gtd/")
;; Add org-gtd files to your agenda
(setq org-agenda-files (list org-gtd-directory))
;; REQUIRED: Enable org-edna for project dependencies
(org-edna-mode 1)
;; Global keybindings (work anywhere in Emacs)
(global-set-key (kbd "C-c d c") 'org-gtd-capture)
(global-set-key (kbd "C-c d e") 'org-gtd-engage)
(global-set-key (kbd "C-c d p") 'org-gtd-process-inbox)
(global-set-key (kbd "C-c d n") 'org-gtd-show-all-next)
(global-set-key (kbd "C-c d s") 'org-gtd-reflect-stuck-projects)
;; Keybinding for organizing items (only works in clarify buffers)
(with-eval-after-load 'org-gtd
(define-key org-gtd-clarify-mode-map (kbd "C-c c") 'org-gtd-organize))
;; Quick actions on tasks in agenda views (optional but recommended)
(with-eval-after-load 'org-agenda
(define-key org-agenda-mode-map (kbd "C-c .") 'org-gtd-agenda-transient))org-gtd supports native compilation for improved performance. If you have Emacs built with native compilation support (–with-native-compilation):
- Enable automatic native compilation:
(setq package-native-compile t)
- Reinstall or recompile org-gtd:
M-x package-reinstall RET org-gtd RET - Packages will be natively compiled on installation
- Expected performance improvement: 10-20% in large GTD datasets (500+ tasks)
org-gtd is optimized for Emacs 28.1+ primitives:
- Fast literal string matching (string-search)
- Lexical binding throughout
- Efficient property access
Tested with GTD datasets up to 500+ tasks without performance issues.
Press C-c d c (or M-x org-gtd-capture).
Type: “Buy birthday gift for Alex”
Press C-c C-c to save and close.
Press C-c d p (or M-x org-gtd-process-inbox).
You’ll see a buffer with your captured item. This is the clarify step - edit the item to make it clear and actionable.
When you’re ready to organize, press C-c c (or M-x org-gtd-organize).
A menu appears asking what type of item this is. For our example:
Press s for “Single action” (a one-off task to do when possible).
org-gtd will prompt you to add tags if you want (press RET to skip).
The item is now filed into your GTD system!
Press C-c d e (or M-x org-gtd-engage).
You’ll see an agenda view showing all your NEXT actions and scheduled items. Your item “Buy birthday gift for Alex” should be there with a NEXT state.
You just completed the core GTD cycle:
- Capture - Got something out of your head (
org-gtd-capture) - Clarify - Made it clear and actionable (editing in the WIP buffer)
- Organize - Categorized it (
org-gtd-organize) - Engage - Saw it in your action list (
org-gtd-engage)
The two remaining GTD steps:
- Process - Loop through your inbox (we did this with
org-gtd-process-inbox) - Review - Regularly check your system (commands like
org-gtd-reflect-stuck-projects)
See doc/org-gtd.org (or C-h i m org gtd RET / M-x info-display-manual RET org-gtd) for:
- Full 15-minute tutorial with projects and dependencies
- Custom agenda views with the declarative DSL
- Configuration examples for Doom Emacs and Spacemacs
- Complete command reference
- Hooks and customization guide
- Integration with email and other tools
If you’re new to GTD, read David Allen’s book. org-gtd implements the methodology faithfully, so understanding GTD itself will help you use the tool effectively.
- Documentation:
C-h i m org gtd RETorM-x info-display-manual RET org-gtd(info manual) - Issues: GitHub Issues
- Community: Discord Server
- Sponsor: GitHub Sponsors
- Create a project - Learn how projects with multiple tasks work
- Use dependencies - Make tasks parallel or create custom blocking
- Create custom views - Define your own weekly review using the view DSL
- Add hooks - Customize what happens when you organize items
- Integrate - Connect org-gtd to email, code tools, etc.
All of this is covered in the full documentation.
This is org-gtd 4.0.0 - a major release with flexible project dependencies and simplified configuration.
If you’re upgrading from version 3.x, see the Upgrading section in the documentation for:
- Required configuration changes (keyword mapping)
- Required data migration command (
M-x org-gtd-upgrade-v3-to-v4) - What’s new in 4.0
Important: Version 4.0 changes how projects work internally. You must run the migration for existing projects to continue working.
Projects can now have parallel tasks and custom dependency relationships, not just sequential execution.
Use org-gtd-keyword-mapping instead of multiple individual variables.
Create custom agenda views with simple filter specifications instead of complex skip functions.
Add tasks to projects anywhere, create custom dependencies, manage complex structures.
See the full documentation for complete details.
dev/- Development jail environment
doc/- Complete documentation and info manual
test/- Test suite