An Emacs interface for Jujutsu VCS, inspired by magit and humbly not attempting to match it in scope.
This package provides a UI for interacting with Jujutsu repositories in Emacs, built on top of a lightweight virtual DOM implementation. It consists of two main parts:
nx.el
: A minimal virtual DOM-like tree structure with diffing/patching, to be broken out upon stabilizationjujutsu-*.el
: The actual jujutsu interface built using nx
The implementation takes inspiration from React and Clojure patterns:
- Data-driven UI architecture
- Immutable data structures
- Efficient diffing/patching for updates
- Clear separation between state management and rendering
This is very much a work in progress and primarily serves as a personal experiment. The code reflects my background as a Clojurist, so expect some idiosyncrasies, when coming from a Emacs Lisp mindset.
While you're welcome to try it out or fork it, I'm not currently accepting pull requests or issues. The project needs significant work before it would be ready for MELPA or general use.
Some key items that need attention before leaving pre-alpha:
-
Stabilize the reconciler
- Edge case handling in diff/patch operations
- More robust node identity tracking
- Better error reporting for invalid tree structures
-
Design and implement global dispatcher system in nx
- Need serious hammock time
- Considering patterns from re-frame/replicant
- Event-driven state management
- Clear story for side effects
-
Core porcelein functionality
- Process buffer implementation (
$
)- Async command execution
- Structured output parsing
- Interactive error handling
- Log viewer (
jj log
andjj evolog
)- Handling logs for large histories
- Advanced filtering/search
- Summary buffer
- Status buffer improvements
- squash and/or edit workflow
- Process buffer implementation (
- Emacs 27.1+
- Jujutsu VCS
- dash.el
- ht.el
- s.el
AGPLv3