kajji 0.12.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,29 +2,24 @@
2
2
  <img alt="kajji" src="./assets/kajji.gif">
3
3
  </p>
4
4
 
5
- A simple [jj](https://github.com/martinvonz/jj) terminal UI with custom diff rendering.
5
+ # kajji
6
6
 
7
- ![normal mode](./assets/normal-mode.png)
8
-
9
- Reviewing local code has never been as prominent as it is today. Coding agents are writing line upon line, and your sorry eyes are the ones that need to trudge through it.
10
-
11
- Kajji makes this new reality less painful with polished jj navigation and manipulation alongside Shiki-powered diff rendering with syntax highlighting and word-level diffs. To allow for jj's log to get the real estate it deserves when you're looking at the diff, while also allowing the width required for side-by-side diff rendering, kajji has two view modes: normal and diff. Switch with ctrl+x and try it out.
12
-
13
- ![diff mode](./assets/diff-mode.png)
7
+ A terminal UI for [jj / Jujutsu](https://github.com/martinvonz/jj): navigate changes, inspect polished diffs, and run common jj workflows with ease and speed.
14
8
 
15
- Why build this? While learning jj I found myself coming back to lazygit to do this quickly and easily - the options for jj didn't quite scratch that lazygit itch of speed, simplicity and polish.
9
+ Kajji gives jj a fast, keyboard-first interface with a commit graph, file tree, operation log, bookmark management, GitHub helpers, revset filtering, and custom diff rendering with syntax highlighting, word-level emphasis, split/unified layouts, wrapping, and binary-file handling.
16
10
 
17
- Kajji is my attempt to bring the UX of lazygit to jj, while also aiming for top-class diff rendering and exploring leveraging coding agents effectively. I'm building this for myself first and foremost, but I hope it can be helpful to others too.
11
+ ![normal mode](./assets/normal-mode.png)
18
12
 
19
13
  ## Installation
20
14
 
21
- > **Requirements**: [jj](https://github.com/martinvonz/jj)
22
-
23
15
  ```bash
24
- # recommended (standalone binary, no dependencies)
16
+ # recommended if you use Homebrew
17
+ brew install eliaskc/tap/kajji
18
+
19
+ # standalone binary installer, no package manager required
25
20
  curl -fsSL https://kajji.sh/install.sh | bash
26
21
 
27
- # or via package manager
22
+ # or via JavaScript package manager
28
23
  npm install -g kajji
29
24
  bun install -g kajji
30
25
  pnpm add -g kajji
@@ -35,9 +30,18 @@ npx kajji
35
30
  bunx kajji
36
31
  ```
37
32
 
33
+ To remove kajji and its config/data:
34
+
35
+ ```bash
36
+ kajji uninstall # interactive: removes config, data, and the binary
37
+ kajji uninstall --dry-run # show what would be removed
38
+ kajji uninstall --keep-config --keep-data
39
+ kajji uninstall --force # skip the confirmation prompt
40
+ ```
41
+
38
42
  ### From source
39
43
 
40
- > **Requirements**: [Bun](https://bun.sh)
44
+ Requirements: [Bun](https://bun.sh)
41
45
 
42
46
  ```bash
43
47
  git clone https://github.com/eliaskc/kajji.git
@@ -46,43 +50,6 @@ bun install
46
50
  bun dev
47
51
  ```
48
52
 
49
- ## Principles
50
-
51
- - **Polish & simplicity** - Do less, but do it well.
52
- - **Intuitive UX** - Sensible defaults, consistent patterns.
53
- - **Snappy** - If it feels slow, it's a bug.
54
-
55
- ## Features
56
-
57
- **Core jj operations:**
58
-
59
- - [x] View commit log with graph
60
- - [x] View diffs with syntax highlighting and word-level emphasis
61
- - [x] New / edit / describe / squash / abandon
62
- - [x] Rebase with revision picker
63
- - [x] Split (suspends TUI for jj's native split)
64
- - [x] Undo / redo with preview
65
- - [x] Bookmarks (create, delete, rename, move)
66
- - [x] Git fetch / push
67
- - [x] Operation log with restore
68
- - [ ] Conflict resolution
69
-
70
- **TUI polish:**
71
-
72
- - [x] Vim-style navigation (j/k, ctrl+u/d)
73
- - [x] Mouse support (click, double-click, horizontal scroll)
74
- - [x] Collapsible file tree with status colors
75
- - [x] Help palette with fuzzy search (`?`)
76
- - [x] Focus modes for normal browsing vs diff viewing
77
- - [x] Line wrapping toggle (`w`) and split/unified view (`v`)
78
- - [x] Binary file detection
79
- - [x] Recent repository switcher
80
- - [x] Automatic update notifications
81
- - [x] Revset filtering and fuzzy search
82
- - [x] JSONC config with live reload and schema autocomplete
83
- - [x] Open files in editor from file view (`e`/`E`)
84
- - [ ] Multi-select for batch operations
85
-
86
53
  ## Usage
87
54
 
88
55
  Run `kajji` in any jj repository:
@@ -92,7 +59,45 @@ kajji # current directory
92
59
  kajji /path/to/repo # specific directory
93
60
  ```
94
61
 
95
- ### CLI
62
+ Kajji has two main viewing modes:
63
+
64
+ - **Normal mode** keeps the log, bookmarks, detail, and command log visible.
65
+ - **Diff focus mode** gives the detail pane more space for side-by-side diffs.
66
+
67
+ Toggle between them with `ctrl+x`.
68
+
69
+ ## Features
70
+
71
+ **jj workflows**
72
+
73
+ - Commit log with graph and revset filtering
74
+ - File view with tree/list toggle, editor launching, and discard for working-copy files
75
+ - New, edit, describe, squash, abandon, duplicate, rebase, split, resolve
76
+ - Undo, redo, operation log, and restore
77
+ - Bookmark create/delete/rename/forget/set/move plus remote-only filtering
78
+ - Git fetch/push menus
79
+ - Open commits and PRs on GitHub
80
+ - Recent repository switcher
81
+
82
+ **Diff viewing**
83
+
84
+ - Custom unified and split diff renderers
85
+ - Syntax highlighting and word-level change emphasis
86
+ - Line wrapping and horizontal scrolling
87
+ - Hunk and file navigation
88
+ - Optional jj formatter output
89
+ - Binary file detection
90
+
91
+ **TUI polish**
92
+
93
+ - Vim-style navigation plus mouse support
94
+ - Focusable panels and tabs
95
+ - Command palette with fuzzy search (`?` / `ctrl+p`)
96
+ - Context-aware status hints
97
+ - JSONC config with schema autocomplete
98
+ - Automatic update notifications
99
+
100
+ ## CLI
96
101
 
97
102
  Kajji includes a small CLI for scripting and agent workflows:
98
103
 
@@ -110,90 +115,99 @@ kajji comment delete -r @ --file src/App.tsx
110
115
  kajji comment delete -r @ --all -y
111
116
  ```
112
117
 
113
- ### Configuration
118
+ ## Configuration
114
119
 
115
120
  Kajji reads JSONC config from `~/.config/kajji/config.json` (comments and trailing commas are supported).
116
121
 
117
122
  - Open it from the command palette (`?`) with `open config`
118
- - Changes from `open config` are reloaded when you return to kajji
119
- - Schema autocomplete is available via `$schema` in the generated config
120
-
121
- ```jsonc
122
- {
123
- "$schema": "https://kajji.sh/schema.json",
124
- "ui": {
125
- "theme": "lazygit", // "lazygit" | "opencode"
126
- "showFileTree": true
127
- },
128
- "diff": {
129
- "layout": "auto", // "auto" | "unified" | "split"
130
- "autoSwitchWidth": 120, // only used when layout is "auto"
131
- "wrap": true,
132
- "useJjFormatter": false // use jj's ui.diff-formatter output in Detail
133
- },
134
- "whatsNewDisabled": false
135
- }
136
- ```
137
-
138
- Not yet wired from config ([#16](https://github.com/eliaskc/kajji/issues/16)):
139
-
140
- - keybind overrides
141
-
142
- ### Keybindings
143
-
144
- | Key | Action |
145
- | --------- | --------------------------------- |
146
- | `j` / `k` | Move down / up |
147
- | `Tab` | Cycle focus between panels |
148
- | `Enter` | Drill into commit / file |
149
- | `Escape` | Back / close modal |
150
- | `ctrl+x` | Toggle focus mode (normal / diff) |
151
- | `ctrl+o` | Open recent repository |
152
- | `o` / `O` | Open commit/PR on GitHub (prompt / direct) |
153
- | `-` | Toggle tree/list (Files) or jj formatter (Detail) |
154
- | `w` | Toggle line wrapping in diff (built-in renderer) |
155
- | `v` | Toggle split / unified diff (built-in renderer) |
156
- | `ctrl+p` | Show commands (or `?`) |
157
- | `q` | Quit |
158
-
159
- ### Operations
160
-
161
- | Key | Action |
162
- | --------- | ----------------------- |
163
- | `n` / `N` | New change / new before |
164
- | `e` | Edit change |
165
- | `d` | Describe change |
166
- | `s` | Squash |
167
- | `a` | Abandon change |
168
- | `r` | Rebase |
169
- | `S` | Split |
170
- | `u` / `U` | Undo / redo |
171
- | `f` | Git fetch |
172
- | `F` | Git fetch options |
173
- | `p` | Git push |
174
- | `P` | Git push options |
175
-
176
- ### Bookmarks
177
-
178
- | Key | Action |
179
- | --- | ---------------------- |
180
- | `c` | Create bookmark |
181
- | `d` | Delete bookmark |
182
- | `r` | Rename bookmark |
183
- | `b` | Set bookmark on commit |
184
- | `m` | Move bookmark |
185
-
186
- See [GitHub issues](https://github.com/eliaskc/kajji/issues) for the roadmap.
123
+ - Changes made through `open config` are reloaded when you return to kajji
124
+ - The default config includes `$schema: "https://kajji.sh/schema.json"` for editor autocomplete
125
+
126
+ Common settings include:
127
+
128
+ - `ui.themeMode`: `system`, `dark`, or `light`
129
+ - `ui.syntaxTheme.dark` / `ui.syntaxTheme.light`: syntax highlighting theme names
130
+ - `ui.showFileTree`: show files as a tree or flat list
131
+ - `diff.layout`: `auto`, `unified`, or `split`
132
+ - `diff.autoSwitchWidth`: terminal width where `auto` switches to split view
133
+ - `diff.wrap`: wrap long diff lines
134
+ - `diff.useJjFormatter`: use jj's configured diff formatter in the detail pane
135
+ - `hooks`: commands to run before specific operations
136
+ - `whatsNewDisabled` / `autoUpdatesDisabled`: update notification controls
137
+
138
+ ## Keybindings
139
+
140
+ Default keybindings are contextual. Press `?` or `ctrl+p` in kajji for the full command list available in the current panel.
141
+
142
+ ### Global and navigation
143
+
144
+ | Key | Action |
145
+ | ---------------------- | --------------------------------------- |
146
+ | `q` | Quit |
147
+ | `?` / `ctrl+p` | Command palette |
148
+ | `Tab` / `shift+Tab` | Next / previous panel |
149
+ | `1` / `2` / `3` / `4` | Focus log / refs / detail / command log |
150
+ | `j` / `k` or `↓` / `↑` | Move down / up |
151
+ | `ctrl+d` / `ctrl+u` | Page down / up |
152
+ | `Enter` | Open/drill into the selected item |
153
+ | `Escape` | Back, close, or clear filter |
154
+ | `[` / `]` or `h` / `l` | Previous / next tab |
155
+ | `/` | Filter revisions or bookmarks |
156
+ | `ctrl+r` | Refresh |
157
+ | `ctrl+x` | Toggle normal/diff focus mode |
158
+ | `ctrl+o` | Open recent repository |
159
+
160
+ ### jj operations
161
+
162
+ | Key | Action |
163
+ | --------- | ------------------------------------------------------------------------------------------ |
164
+ | `n` / `N` | New change / new menu |
165
+ | `e` | Edit change, or open selected file in editor from file view |
166
+ | `E` | Open all files in editor from file view |
167
+ | `d` | Describe, delete bookmark, restore operation, or discard file changes depending on context |
168
+ | `s` | Squash |
169
+ | `a` | Abandon |
170
+ | `r` | Rebase, or rename bookmark in refs |
171
+ | `S` | Split |
172
+ | `D` | Duplicate |
173
+ | `R` | Resolve conflicts, or toggle remote-only bookmarks in refs |
174
+ | `u` / `U` | Undo / redo |
175
+ | `f` / `F` | Git fetch / fetch menu |
176
+ | `p` / `P` | Git push / push menu |
177
+
178
+ ### Diff and files
179
+
180
+ | Key | Action |
181
+ | ---------------------- | ------------------------------------------------------------- |
182
+ | `-` | Toggle file tree/list in file view, or jj formatter in detail |
183
+ | `v` | Toggle split/unified diff |
184
+ | `w` | Toggle diff line wrapping |
185
+ | `h` / `l` or `←` / `→` | Horizontal scroll when wrapping is off |
186
+ | `[` / `]` | Previous / next hunk in custom diff view |
187
+ | `{` / `}` | Previous / next file in custom diff view |
188
+
189
+ ### Bookmarks and GitHub
190
+
191
+ | Key | Action |
192
+ | --------- | -------------------------------------------------- |
193
+ | `c` | Create bookmark |
194
+ | `d` | Delete bookmark |
195
+ | `r` | Rename bookmark |
196
+ | `x` | Forget bookmark locally |
197
+ | `b` | Set bookmark on selected revision |
198
+ | `m` | Move bookmark |
199
+ | `o` / `O` | Open selected revision on GitHub (prompt / direct) |
200
+ | `o` | Open selected bookmark's commit or PR on GitHub |
187
201
 
188
202
  ## Built With
189
203
 
190
- - [OpenTUI](https://github.com/sst/opentui) + [SolidJS](https://www.solidjs.com/) - Modern TypeScript TUI framework
191
- - [Bun](https://bun.sh) - Fast JavaScript runtime
204
+ - [OpenTUI](https://github.com/sst/opentui) + [SolidJS](https://www.solidjs.com/) - TypeScript TUI framework
205
+ - [Bun](https://bun.sh) - JavaScript runtime and build tooling
192
206
  - [jj (Jujutsu)](https://github.com/martinvonz/jj) - Git-compatible VCS
193
207
 
194
208
  ## Related Projects
195
209
 
196
- - [lazygit](https://github.com/jesseduffield/lazygit) - The inspiration for this project
210
+ - [lazygit](https://github.com/jesseduffield/lazygit) - Git TUI
197
211
  - [jjui](https://github.com/idursun/jjui) - Go-based jj TUI
198
212
  - [lazyjj](https://github.com/Cretezy/lazyjj) - Rust-based jj TUI
199
213
 
package/package.json CHANGED
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "name": "kajji",
3
- "version": "0.12.0",
3
+ "version": "0.14.0",
4
4
  "description": "A terminal UI for Jujutsu: the rudder for your jj",
5
5
  "bin": {
6
6
  "kajji": "./bin/kajji"
7
7
  },
8
8
  "scripts": {
9
- "postinstall": "node ./script/postinstall.mjs"
9
+ "postinstall": "node ./scripts/postinstall.mjs"
10
10
  },
11
11
  "optionalDependencies": {
12
- "kajji-darwin-arm64": "0.12.0",
13
- "kajji-darwin-x64": "0.12.0",
14
- "kajji-linux-x64": "0.12.0",
15
- "kajji-linux-arm64": "0.12.0"
12
+ "kajji-darwin-arm64": "0.14.0",
13
+ "kajji-darwin-x64": "0.14.0",
14
+ "kajji-linux-x64": "0.14.0",
15
+ "kajji-linux-arm64": "0.14.0"
16
16
  },
17
17
  "repository": {
18
18
  "type": "git",
File without changes