Quinjet
A fast, live, keyboard-first Git source-control interface for the terminal, written in Rust.
Quinjet discovers the containing Git repository from any nested directory, watches it for changes, and combines a VS Code-inspired changes list with syntax-highlighted diffs and commit history. Navigation and rendering remain independent from Git subprocess latency.
Features
- Live working-tree, index, conflict, branch, and ahead/behind refresh
- Scrollable staged, unstaged, untracked, renamed, deleted, and conflict groups
- One-key file staging/unstaging with immediate authoritative refresh
- Syntax highlighting for TypeScript/TSX, Rust, Python, Go, JavaScript, and hundreds of other formats
- Unified and draggable side-by-side diff panes
- Compact change hunks by default;
texpands the selected file to full context - Paginated, scrollable commit history with refs and commit patch previews
- Commit, amend, stash, fetch, pull, push, sync, cherry-pick, and revert
- Branch switching, creation, deletion, and creation at a selected commit
- Natural mouse scrolling, clickable rows, and draggable pane dividers
- Keyboard-first filtering, command palette, modal text editing, and accessibility help
- Coalesced background Git work, stale-result rejection, and bounded diff output
Installation
From crates.io:
From the latest source:
Git and a terminal with true-color support are recommended.
Usage
Run from any directory inside a Git repository:
Quinjet asks Git for the top-level repository, so running it from project/apps/web/src still displays every change in project. You can also provide a path explicitly:
Mouse capture can be disabled without losing functionality:
Keyboard
The UI intentionally stays uncluttered; press ? for the complete shortcut reference.
| Key | Action |
|---|---|
j / k, arrows |
Move through every file/commit or scroll the preview |
| Mouse wheel | Naturally scroll the pane under the pointer |
Tab |
Switch sidebar/preview focus |
1 / 2 |
Changes/history |
s or Space |
Toggle stage/unstage for the selected file |
a / U |
Stage all/unstage all |
c |
Open commit editor; Ctrl+Enter submits |
t |
Toggle compact hunks/full-file context |
v |
Toggle unified/side-by-side diff |
x |
Discard selected change after confirmation |
/ |
Filter the active list |
[ / ] |
Previous/next diff hunk |
: or Ctrl+P |
Command palette |
? |
Shortcut help |
q |
Quit |
Drag the divider between the file list and preview to resize the main panes. In side-by-side mode, drag the center divider to resize old/new sides.
Text fields support Unicode-safe editing plus familiar terminal and macOS motions: Option/Ctrl+Arrow moves by word, Option/Ctrl+Delete removes a word, Command+Arrow moves to a line boundary, Command+Delete removes to a line boundary, and Ctrl+A/E/B/F/W/U/K are supported.
Performance and Safety
- Rendering and key handling never invoke Git directly.
- A coalescing worker mailbox replaces obsolete read requests.
- Filesystem event storms collapse into authoritative status snapshots.
- Preview requests carry generations so stale replies are ignored.
- History is paginated and diff output is bounded.
- Git receives argument arrays directly, never shell-concatenated commands.
- Destructive operations are confirmed where appropriate.
- Hooks, credentials, signing, filters, and repository semantics remain delegated to the installed Git CLI.
See ARCHITECTURE.md for implementation details.
Contributing
Contributions are welcome. Read CONTRIBUTING.md, the Code of Conduct, and Security Policy before opening a pull request or report.
License
Quinjet is available under the MIT License.