A local PR diff viewer — preview your changes before pushing, with a GitHub-like interface and inline AI-assisted editing.
Linux only — install WebKit and GTK dependencies:
sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev
Install Rust via rustup.rs if you haven't already:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
Install Node.js 18+ via nvm or nodejs.org.
Clone and run:
git clone https://github.com/jlien/gitpeek.git
cd gitpeek
npm install
npm run tauri dev
The first run compiles all Rust dependencies and takes a few minutes. Subsequent runs are much faster.
To build a distributable .app:
npm run tauri build
The .app bundle will be in src-tauri/target/release/bundle/macos/.
Note: macOS may show a "cannot be opened because the developer cannot be verified" warning for release builds since the app is unsigned. To bypass it, right-click the
.appand choose Open, or runxattr -dr com.apple.quarantine GitPeek.app.
Linux:
sudo apt install libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev
git clone https://github.com/jlien/gitpeek.git
cd gitpeek
npm install
npm run tauri dev
Windows: Install Rust and Node.js, then run npm install && npm run tauri dev. No additional system dependencies are required.
npm run tauri build
The compiled app will be in src-tauri/target/release/bundle/.
GitPeek can invoke a coding assistant (Claude Code, Codex, or any compatible CLI) to apply changes directly to your files based on inline prompts.
| Field | Description |
|---|---|
| Assistant | Preset for Claude Code, Codex, or Custom |
| Command | The CLI binary to run (e.g. claude, codex) |
| Prompt flag | Flag placed before the prompt argument (e.g. -p). Leave blank if the prompt is positional. |
| Extra flags | Additional flags passed before the prompt flag (e.g. permission/tool flags) |
| Assistant | Command | Extra flags |
|---|---|---|
| Claude Code | claude |
--dangerously-skip-permissions |
| Codex | codex |
(none) |
The full invocation is: <command> [extra flags] [prompt flag] "<prompt>", run from the repository root.
GitPeek sends the assistant your prompt plus the surrounding diff context, runs the command in the repository root, then refreshes the diff automatically. The Assistant Output panel on the right shows the full command, exit code, and stdout/stderr for every run.
Set Assistant to Custom and provide any command that accepts a prompt as a string argument. For example, a wrapper script:
#!/bin/bash
# my-ai.sh — writes changes to disk, then exits 0
my-ai-tool --apply "$1"
Configure Command as ./my-ai.sh with no prompt flag (positional argument).
Settings are stored in ~/.config/gitpeek/config.json:
{
"assistant_type": "claude-code",
"command": "claude",
"prompt_flag": "-p",
"extra_args": "--dangerously-skip-permissions"
}
Contributions are welcome. Please open an issue before starting work on a large change so we can discuss the approach.
git clone https://github.com/jlien/gitpeek.git
cd gitpeek
npm install
Run in development mode (hot-reload for the frontend, Rust recompiles on change):
npm run tauri dev
src/ Svelte frontend
lib/
Header.svelte Top bar with repo info and actions
FileTree.svelte Sidebar file list with stage/unstage
DiffViewer.svelte Diff rendering (unified + split) with inline prompts
AssistantConfig.svelte Assistant settings modal
AssistantOutput.svelte Output panel for assistant runs
src-tauri/src/main.rs Rust backend — all git operations and assistant invocation
All git operations go through git2 (libgit2 bindings). The frontend communicates with the backend exclusively via Tauri's typed invoke() IPC — there are no direct filesystem or process calls from the frontend.
main.npm run tauri dev and a release build with npm run tauri build.main with a clear description of what changed and why.For bug reports, please include:
MIT — see LICENSE.