0WD0/majutsu

Majutsu! Magit for jujutsu

Emacs Lisp

263

778 commits

updated Sep 14, 2026

See the code

README

#+html: <p align="center"><a href="https://majutsu.org"><img src="docs/site/public/og.png" alt="Majutsu — Shape history without leaving Emacs" width="720"></a></p>

Majutsu provides a Magit-style interface for [[https://github.com/jj-vcs/jj][Jujutsu (jj)]], offering an
efficient way to interact with JJ repositories from within Emacs.

[[file:docs/majutsu.org][Read the full manual]] for comprehensive documentation.

* Quick Start

** Installation

#+begin_src emacs-lisp
;; Doom Emacs (packages.el)
(package! majutsu :recipe (:host github :repo "0WD0/majutsu"))

;; use-package + straight.el
(use-package majutsu
  :straight (:host github :repo "0WD0/majutsu"))

;; use-package + package-vc (Emacs 29+)
(use-package majutsu
  :vc (:url "https://github.com/0WD0/majutsu"))
#+end_src

** Usage

1. Open a JJ repository: ~M-x majutsu~ (or ~majutsu-log~)
2. Navigate: vanilla bindings use ~n~ / ~p~ for next/previous revision; Evil uses ~C-j~ / ~C-k~ or ~gj~ / ~gk~ for section navigation. In log buffers, ~[~ / ~]~ jump to visible parents/children
3. Act: ~RET~ to visit, ~?~ for help
4. In blob buffers, press ~e~ to enter editable mode; save applies via =jj diffedit= (~i~ in Evil also enters editable mode)
5. In blob buffers, press ~b~ to annotate; ~C-c m~ opens the blob in Magit

** Optional Forge Integration

If [[https://github.com/magit/forge][Forge]] is installed, enable Majutsu integration with:

#+begin_src emacs-lisp
(require 'majutsu-forge)
(majutsu-forge-mode 1)
#+end_src

This adds Forge issue, pull-request, and discussion sections to Majutsu log
buffers and binds ~N~ / ~'~ in Majutsu buffers to ~forge-dispatch~.  The initial
integration is intended for colocated jj/Git repositories, where Forge can still
see a Git repository and remotes.  Forge sections also depend on a configured,
tracked repository and populated Forge database.  Pull-request commit lists shown
by Forge's Git-oriented renderer are replaced by a placeholder in Majutsu buffers.

** Optional Embark Integration

When [[https://github.com/oantolin/embark][Embark]] is loaded, Majutsu automatically adds actions for workspace
and bookmark completion candidates.  Workspace actions can visit, open in
Dired, or copy the root.  Bookmark actions can edit, diff, inspect evolution,
move, rename, delete, or forget the selected bookmark.

** Essential Keybindings

| Key (Vanilla / Evil) | Action                    |
|----------------------+---------------------------|
| ~n~ / ~C-j~              | Next revision/section     |
| ~p~ / ~C-k~              | Previous revision/section |
| ~[~                    | Go to parent              |
| ~]~                    | Go to child               |
| ~RET~                  | Visit thing at point      |
| ~?~                    | Show all commands         |
| ~g~ / ~g r~              | Refresh                   |
| ~a~                    | Absorb                    |
| ~b~                    | Bookmarks                 |
| ~c~                    | Describe                  |
| ~C~                    | Commit                    |
| ~d~                    | Diff                      |
| ~E~                    | Ediff                     |
| ~e~                    | Edit change               |
| ~G~ / ~? G~              | Git                       |
| ~k~ / ~x~                | Abandon                   |
| ~o~                    | New                       |
| ~r~                    | Rebase                    |
| ~V~ / ~_~                | Revert                    |
| ~R~                    | Restore                   |
| ~s~                    | Squash                    |
| ~S~                    | Split                     |
| ~? y~                  | Duplicate                 |
| ~Z~ / ~*~                | Workspaces                |
| ~C-/~ / ~u~              | Undo                      |
| ~C-?~ / ~C-r~            | Redo                      |

* Requirements

- Emacs 29.1+
- [[https://github.com/jj-vcs/jj][Jujutsu (jj)]] v0.41.0+
- [[https://magit.vc/][magit]] 4.4.0+, [[https://github.com/magit/transient][transient]] 0.8.7+, [[https://github.com/emacs-compat/compat][compat]]
- [[https://github.com/minad/consult][consult]] 1.0+ and [[https://github.com/alphapapa/plz.el][plz]] 0.9.1+ (Gerrit completion)
- [[https://github.com/magit/with-editor][with-editor]] (pulled in via magit; message editing)

* Documentation

- [[file:docs/majutsu.org][User Manual]] - Complete guide to all features
- [[file:NEWS.org][NEWS]] - Version history and changelog
- [[file:THIRD_PARTY_NOTICES.org][Third-Party Notices]] - Upstream adaptation and attribution map
- [[file:LICENSE-MIT][Legacy MIT Notice]] - Retained MIT attribution text for pre-GPL code

* License

- Current: [[file:LICENSE][GNU GPL v3 or later]]
- Historical notice: [[file:LICENSE-MIT][MIT notice text]] retained for pre-GPL distributions

* Credits

Majutsu began as a fork of [[https://github.com/bolivier/jj-mode.el][jj-mode.el]] by Brandon Olivier. It depends on
and draws inspiration from [[https://magit.vc/][Magit]] and wraps the [[https://github.com/jj-vcs/jj][Jujutsu]] VCS.

* Contributing

Issues and pull requests welcome at https://github.com/0WD0/majutsu

Not written in Markdown, so it's shown here as plain text — view it formatted on GitHub.

emacs
jujutsu
magit

Contributors

0WD0

720 commits

bolivier

31 commits

ArthurHeymans

13 commits

segui-mdb

4 commits

0WD0/majutsu

Majutsu! Magit for jujutsu

Emacs Lisp

263

778 commits

updated Sep 14, 2026

See the code

README

#+html: <p align="center"><a href="https://majutsu.org"><img src="docs/site/public/og.png" alt="Majutsu — Shape history without leaving Emacs" width="720"></a></p>

Majutsu provides a Magit-style interface for [[https://github.com/jj-vcs/jj][Jujutsu (jj)]], offering an
efficient way to interact with JJ repositories from within Emacs.

[[file:docs/majutsu.org][Read the full manual]] for comprehensive documentation.

* Quick Start

** Installation

#+begin_src emacs-lisp
;; Doom Emacs (packages.el)
(package! majutsu :recipe (:host github :repo "0WD0/majutsu"))

;; use-package + straight.el
(use-package majutsu
  :straight (:host github :repo "0WD0/majutsu"))

;; use-package + package-vc (Emacs 29+)
(use-package majutsu
  :vc (:url "https://github.com/0WD0/majutsu"))
#+end_src

** Usage

1. Open a JJ repository: ~M-x majutsu~ (or ~majutsu-log~)
2. Navigate: vanilla bindings use ~n~ / ~p~ for next/previous revision; Evil uses ~C-j~ / ~C-k~ or ~gj~ / ~gk~ for section navigation. In log buffers, ~[~ / ~]~ jump to visible parents/children
3. Act: ~RET~ to visit, ~?~ for help
4. In blob buffers, press ~e~ to enter editable mode; save applies via =jj diffedit= (~i~ in Evil also enters editable mode)
5. In blob buffers, press ~b~ to annotate; ~C-c m~ opens the blob in Magit

** Optional Forge Integration

If [[https://github.com/magit/forge][Forge]] is installed, enable Majutsu integration with:

#+begin_src emacs-lisp
(require 'majutsu-forge)
(majutsu-forge-mode 1)
#+end_src

This adds Forge issue, pull-request, and discussion sections to Majutsu log
buffers and binds ~N~ / ~'~ in Majutsu buffers to ~forge-dispatch~.  The initial
integration is intended for colocated jj/Git repositories, where Forge can still
see a Git repository and remotes.  Forge sections also depend on a configured,
tracked repository and populated Forge database.  Pull-request commit lists shown
by Forge's Git-oriented renderer are replaced by a placeholder in Majutsu buffers.

** Optional Embark Integration

When [[https://github.com/oantolin/embark][Embark]] is loaded, Majutsu automatically adds actions for workspace
and bookmark completion candidates.  Workspace actions can visit, open in
Dired, or copy the root.  Bookmark actions can edit, diff, inspect evolution,
move, rename, delete, or forget the selected bookmark.

** Essential Keybindings

| Key (Vanilla / Evil) | Action                    |
|----------------------+---------------------------|
| ~n~ / ~C-j~              | Next revision/section     |
| ~p~ / ~C-k~              | Previous revision/section |
| ~[~                    | Go to parent              |
| ~]~                    | Go to child               |
| ~RET~                  | Visit thing at point      |
| ~?~                    | Show all commands         |
| ~g~ / ~g r~              | Refresh                   |
| ~a~                    | Absorb                    |
| ~b~                    | Bookmarks                 |
| ~c~                    | Describe                  |
| ~C~                    | Commit                    |
| ~d~                    | Diff                      |
| ~E~                    | Ediff                     |
| ~e~                    | Edit change               |
| ~G~ / ~? G~              | Git                       |
| ~k~ / ~x~                | Abandon                   |
| ~o~                    | New                       |
| ~r~                    | Rebase                    |
| ~V~ / ~_~                | Revert                    |
| ~R~                    | Restore                   |
| ~s~                    | Squash                    |
| ~S~                    | Split                     |
| ~? y~                  | Duplicate                 |
| ~Z~ / ~*~                | Workspaces                |
| ~C-/~ / ~u~              | Undo                      |
| ~C-?~ / ~C-r~            | Redo                      |

* Requirements

- Emacs 29.1+
- [[https://github.com/jj-vcs/jj][Jujutsu (jj)]] v0.41.0+
- [[https://magit.vc/][magit]] 4.4.0+, [[https://github.com/magit/transient][transient]] 0.8.7+, [[https://github.com/emacs-compat/compat][compat]]
- [[https://github.com/minad/consult][consult]] 1.0+ and [[https://github.com/alphapapa/plz.el][plz]] 0.9.1+ (Gerrit completion)
- [[https://github.com/magit/with-editor][with-editor]] (pulled in via magit; message editing)

* Documentation

- [[file:docs/majutsu.org][User Manual]] - Complete guide to all features
- [[file:NEWS.org][NEWS]] - Version history and changelog
- [[file:THIRD_PARTY_NOTICES.org][Third-Party Notices]] - Upstream adaptation and attribution map
- [[file:LICENSE-MIT][Legacy MIT Notice]] - Retained MIT attribution text for pre-GPL code

* License

- Current: [[file:LICENSE][GNU GPL v3 or later]]
- Historical notice: [[file:LICENSE-MIT][MIT notice text]] retained for pre-GPL distributions

* Credits

Majutsu began as a fork of [[https://github.com/bolivier/jj-mode.el][jj-mode.el]] by Brandon Olivier. It depends on
and draws inspiration from [[https://magit.vc/][Magit]] and wraps the [[https://github.com/jj-vcs/jj][Jujutsu]] VCS.

* Contributing

Issues and pull requests welcome at https://github.com/0WD0/majutsu

Not written in Markdown, so it's shown here as plain text — view it formatted on GitHub.

emacs
jujutsu
magit

Contributors

0WD0

720 commits

bolivier

31 commits

ArthurHeymans

13 commits

segui-mdb

4 commits

Languages

Emacs Lisp

100.0%