Still in Alpha alot of the ui subject to change also working on stability would appreciate any feedback/issue reports. OpenWarden is a desktop Git review app for moving through local changes, commit history, branch comparisons, and review comments without leaving your workflow.
- Go to this repo's Releases page.
- Download the latest macOS release archive.
- Open the archive and move
OpenWarden.appinto yourApplicationsfolder.
If macOS blocks the app and says it is damaged or cannot be opened, remove the quarantine attribute (the app is currently not Apple-signed):
xattr -dr com.apple.quarantine "/Applications/OpenWarden.app"Then try launching OpenWarden.app again.
CodeReview.mp4
- Browse staged, unstaged, and untracked changes with inline diffs.
- Review commit history and inspect file-by-file patches.
- Compare branches side by side for lightweight local review.
- Leave comments tied to files and ranges, then copy them and send them to an agent.
Electron, React, TypeScript, Redux Toolkit, and system Git.
Prerequisites: Node.js, pnpm, and git.
pnpm install
pnpm devpnpm dev runs the browser fallback for UI work by setting VITE_DESKTOP_FALLBACK=browser.
To run the full desktop app shell (Electron) locally:
pnpm dev:electronTo build a local macOS Electron package:
pnpm build:electronOpenWarden can show diagnostics and code navigation in diffs by connecting to Language Server Protocol (LSP) servers.
How server resolution works:
- Per-language override from OpenWarden global
settings.json(lsp.servers.<languageId>). - Auto-detect known language server binaries from your system
PATH. - If nothing is found, LSP for that language stays disabled until configured/installed.
Install the servers you want on your machine (examples):
# TypeScript / JavaScript
npm i -g typescript typescript-language-server
# Python
npm i -g pyright
# (or install pylsp via pip if you prefer python-lsp-server)
# Go
go install golang.org/x/tools/gopls@latest
# Rust
rustup component add rust-analyzerIn OpenWarden, go to Settings and click Open JSON to edit the global settings file.
Example:
{
"version": 1,
"sourceControl": {
"fileTreeRenderMode": "tree"
},
"lsp": {
"servers": {
"typescript": {
"command": "typescript-language-server",
"args": ["--stdio"],
"extensions": ["ts", "tsx", "mts", "cts"]
},
"python": {
"command": "pyright-langserver",
"args": ["--stdio"],
"extensions": ["py"]
},
"eslint": {
"command": "vscode-eslint-language-server",
"args": ["--stdio"],
"extensions": ["js", "jsx", "mjs", "cjs"]
}
}
}
}Notes:
extensionsentries can be with or without a leading dot (for exampletsor.ts).- ESLint is supported as an LSP server (
vscode-eslint-language-server) and can be configured like any other language server.