# idursun/jjui architecture

> Architecture diagram of the GitHub repository idursun/jjui, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/idursun/jjui
- Repository: https://github.com/idursun/jjui

## Overview

jjui is a terminal interface for Jujutsu. A user launches it in a repository, navigates revisions or the operation log, selects an action, and sees updated repository state or a preview. Its documented workflows include revset completion, revision details and diffs, rebase/squash/bookmark changes, undo/redo, Git push/fetch, and evolog. The graph captures the entry point and sampled parsing, preview, and credential flows; several feature modules are included from the tree and README, but their internal call wiring was not sampled.

Main entry points: [`cmd/jjui/main.go`](https://github.com/idursun/jjui/blob/main/cmd/jjui/main.go) (CLI startup), [`internal/ui/ui.go`](https://github.com/idursun/jjui/blob/main/internal/ui/ui.go) (UI model), [`internal/ui/dispatch/dispatcher.go`](https://github.com/idursun/jjui/blob/main/internal/ui/dispatch/dispatcher.go) (Action dispatch), [`internal/jj/commands.go`](https://github.com/idursun/jjui/blob/main/internal/jj/commands.go) (Jujutsu commands)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Application entry"]
  node_main["CLI startup<br/>[main.go]"]
  node_appcontext["App context<br/>[main_context.go]"]
end

subgraph group_interaction["Terminal interaction"]
  node_ui["UI model<br/>[ui.go]"]
  node_bindings["Key bindings<br/>[binding.go]"]
  node_dispatcher["Action dispatch<br/>[dispatcher.go]"]
  node_intents["UI intents<br/>[intent.go]"]
  node_renderer["Terminal rendering<br/>[display_context.go]"]
end

subgraph group_repository["Jujutsu workflows"]
  node_revisions["Revision browser<br/>[revisions.go]"]
  node_revset["Revset editor<br/>[revset.go]"]
  node_parser["Revision log parser"]
  node_operations["Revision operations<br/>[operation.go]"]
  node_details["Revision details<br/>[details.go]"]
  node_bookmarks["Bookmark browser<br/>[bookmarkpane.go]"]
  node_oplog["Operation log<br/>[operation_log.go]"]
  node_preview["Preview panel<br/>[preview.go]"]
  node_jjadapter["Jujutsu commands<br/>[commands.go]"]
end

subgraph group_configuration["Configuration and credentials"]
  node_config["Config loader<br/>[loader.go]"]
  node_scripting["Lua setup<br/>[lua.go]"]
  node_askpass["Credential backchannel<br/>[server.go]"]
end

node_user(("User"))
node_terminal["Terminal"]
node_jj["Jujutsu CLI"]

node_user -->|"launches"| node_main
node_main -->|"finds repository"| node_jj
node_main -->|"creates context"| node_appcontext
node_main -->|"loads settings"| node_config
node_main -->|"initializes Lua"| node_scripting
node_main -->|"starts program"| node_ui
node_terminal -->|"provides input"| node_ui
node_ui -->|"renders output"| node_terminal
node_bindings -->|"resolves actions"| node_dispatcher
node_dispatcher -->|"dispatches intent"| node_intents
node_revisions -->|"parses log stream"| node_parser
node_preview -->|"requests preview"| node_jjadapter
node_jjadapter -->|"runs commands"| node_jj
node_askpass -->|"prompts credentials"| node_terminal
node_jj -.->|"requests credentials"| node_askpass

click node_main "https://github.com/idursun/jjui/blob/main/cmd/jjui/main.go"
click node_appcontext "https://github.com/idursun/jjui/blob/main/internal/ui/context/main_context.go"
click node_ui "https://github.com/idursun/jjui/blob/main/internal/ui/ui.go"
click node_bindings "https://github.com/idursun/jjui/blob/main/internal/ui/bindings/binding.go"
click node_dispatcher "https://github.com/idursun/jjui/blob/main/internal/ui/dispatch/dispatcher.go"
click node_intents "https://github.com/idursun/jjui/blob/main/internal/ui/intents/intent.go"
click node_renderer "https://github.com/idursun/jjui/blob/main/internal/ui/render/display_context.go"
click node_revisions "https://github.com/idursun/jjui/blob/main/internal/ui/revisions/revisions.go"
click node_revset "https://github.com/idursun/jjui/blob/main/internal/ui/revset/revset.go"
click node_parser "https://github.com/idursun/jjui/blob/main/internal/parser/streaming_log_parser.go"
click node_operations "https://github.com/idursun/jjui/blob/main/internal/ui/operations/operation.go"
click node_details "https://github.com/idursun/jjui/blob/main/internal/ui/operations/details/details.go"
click node_bookmarks "https://github.com/idursun/jjui/blob/main/internal/ui/bookmarkpane/bookmarkpane.go"
click node_oplog "https://github.com/idursun/jjui/blob/main/internal/ui/oplog/operation_log.go"
click node_preview "https://github.com/idursun/jjui/blob/main/internal/ui/preview/preview.go"
click node_jjadapter "https://github.com/idursun/jjui/blob/main/internal/jj/commands.go"
click node_config "https://github.com/idursun/jjui/blob/main/internal/config/loader.go"
click node_scripting "https://github.com/idursun/jjui/blob/main/internal/scripting/lua.go"
click node_askpass "https://github.com/idursun/jjui/blob/main/internal/askpass/server.go"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_appcontext,node_user toneBlue
class node_ui,node_bindings,node_dispatcher,node_intents,node_renderer toneAmber
class node_revisions,node_revset,node_parser,node_operations,node_details,node_bookmarks,node_oplog,node_preview,node_jjadapter toneMint
class node_config,node_scripting,node_askpass toneRose
class node_terminal,node_jj toneIndigo
```

## Components

### Application entry

- [CLI startup](https://github.com/idursun/jjui/blob/main/cmd/jjui/main.go): `cmd/jjui/main.go`
- [App context](https://github.com/idursun/jjui/blob/main/internal/ui/context/main_context.go): `internal/ui/context/main_context.go`

### Terminal interaction

- [UI model](https://github.com/idursun/jjui/blob/main/internal/ui/ui.go): `internal/ui/ui.go`
- [Key bindings](https://github.com/idursun/jjui/blob/main/internal/ui/bindings/binding.go): `internal/ui/bindings/binding.go`
- [Action dispatch](https://github.com/idursun/jjui/blob/main/internal/ui/dispatch/dispatcher.go): `internal/ui/dispatch/dispatcher.go`
- [UI intents](https://github.com/idursun/jjui/blob/main/internal/ui/intents/intent.go): `internal/ui/intents/intent.go`
- [Terminal rendering](https://github.com/idursun/jjui/blob/main/internal/ui/render/display_context.go): `internal/ui/render/display_context.go`

### Jujutsu workflows

- [Revision browser](https://github.com/idursun/jjui/blob/main/internal/ui/revisions/revisions.go): `internal/ui/revisions/revisions.go`
- [Revset editor](https://github.com/idursun/jjui/blob/main/internal/ui/revset/revset.go): `internal/ui/revset/revset.go`
- [Revision log parser](https://github.com/idursun/jjui/blob/main/internal/parser/streaming_log_parser.go): `internal/parser/streaming_log_parser.go`
- [Revision operations](https://github.com/idursun/jjui/blob/main/internal/ui/operations/operation.go): `internal/ui/operations/operation.go`
- [Revision details](https://github.com/idursun/jjui/blob/main/internal/ui/operations/details/details.go): `internal/ui/operations/details/details.go`
- [Bookmark browser](https://github.com/idursun/jjui/blob/main/internal/ui/bookmarkpane/bookmarkpane.go): `internal/ui/bookmarkpane/bookmarkpane.go`
- [Operation log](https://github.com/idursun/jjui/blob/main/internal/ui/oplog/operation_log.go): `internal/ui/oplog/operation_log.go`
- [Preview panel](https://github.com/idursun/jjui/blob/main/internal/ui/preview/preview.go): `internal/ui/preview/preview.go`
- [Jujutsu commands](https://github.com/idursun/jjui/blob/main/internal/jj/commands.go): `internal/jj/commands.go`

### Configuration and credentials

- [Config loader](https://github.com/idursun/jjui/blob/main/internal/config/loader.go): `internal/config/loader.go`
- [Lua setup](https://github.com/idursun/jjui/blob/main/internal/scripting/lua.go): `internal/scripting/lua.go`
- [Credential backchannel](https://github.com/idursun/jjui/blob/main/internal/askpass/server.go): `internal/askpass/server.go`

### Other components

- **User**
- **Terminal**
- **Jujutsu CLI**

## Connections

- User → CLI startup: launches
- CLI startup → Jujutsu CLI: finds repository
- CLI startup → App context: creates context
- CLI startup → Config loader: loads settings
- CLI startup → Lua setup: initializes Lua
- CLI startup → UI model: starts program
- Terminal → UI model: provides input
- UI model → Terminal: renders output
- Key bindings → Action dispatch: resolves actions
- Action dispatch → UI intents: dispatches intent
- Revision browser → Revision log parser: parses log stream
- Preview panel → Jujutsu commands: requests preview
- Jujutsu commands → Jujutsu CLI: runs commands
- Credential backchannel → Terminal: prompts credentials
- Jujutsu CLI → Credential backchannel: requests credentials
