A lightweight, cross-platform desktop app that generates Conventional Commits messages from your git diff using AI. Supports multiple LLM providers — local Ollama, OpenRouter, OpenAI, and any OpenAI-compatible API. Under 10 MB installer, zero telemetry, your code never leaves the machine (when using local models).
Built with Tauri v2 (Rust backend + native WebView) and React 19.
- AI commit messages — generates Conventional Commits from staged diffs via streaming LLM
- Built-in Git operations — commit, push, pull, fetch with rebase/force-with-lease options
- Branch management — switch/create branches; handles uncommitted changes gracefully
- Commit history graph — interactive SVG multi-branch graph with merge connectors, per-branch colors, and timeline grouping
- Submodule support — sidebar lists submodules with status badges; click to operate independently
- Multi-provider LLM — switch between local Ollama, Ollama Cloud, OpenRouter, OpenAI, Groq, etc.
- Privacy-first — runs fully offline with local Ollama; no data sent anywhere
Not a full Git GUI. It does not resolve merge conflicts, delete/rename branches, or open PRs — use your IDE/CLI for those.
- Quick Start (Pre-built Installer)
- Build from Source
- Configuration
- Usage
- Tech Stack
- Project Structure
- CI / Releases
- License
Download the latest installer from the Releases page:
| Platform | File | Architecture |
|---|---|---|
| macOS (Apple Silicon) | Git CMM_x.y.z_aarch64.dmg |
ARM64 (M1/M2/M3/M4) |
| macOS (Intel) | Git CMM_x.y.z_x86_64.dmg |
x86_64 |
| Windows | Git CMM_x.y.z_x64_en-US.msi |
x64 |
| Windows (alt) | Git CMM_x.y.z_x64-setup.exe |
x64 (NSIS) |
xattr -d com.apple.quarantine "/Applications/Git CMM.app"Click More info → Run anyway on the blue SmartScreen dialog.
| Tool | Minimum Version | Install |
|---|---|---|
| Node.js | 20+ | nodejs.org |
| npm | 10+ | Bundled with Node.js |
| Rust | stable 1.77+ | rustup.rs |
| Git | 2.20+ | Must be in PATH (also needed at runtime) |
macOS
xcode-select --installWindows
- WiX Toolset 3.x — for
.msibundling:winget install WiXToolset.WiXToolset
- WebView2 Runtime — preinstalled on Windows 11; download for Windows 10
Linux (experimental)
sudo apt install libwebkit2gtk-4.1-dev libssl-dev libgtk-3-dev \
libayatana-appindicator3-dev librsvg2-devgit clone https://github.com/baka3k/git-cmm.git
cd git-cmm
npm installnpm run tauri dev- Frontend changes (
.tsx) — Vite HMR reloads instantly - Rust changes (
.rs) — Tauri recompiles and restarts the app - Open DevTools:
Cmd+Option+I(macOS) /Ctrl+Shift+I(Windows/Linux)
npm run tauri buildThis command:
- Runs
tsc && vite build→ bundles frontend intodist/ - Runs
cargo build --releaseinsrc-tauri/ - Runs Tauri bundler → creates platform installer
Output location: src-tauri/target/release/bundle/
| OS | Format | Path |
|---|---|---|
| macOS | .app |
macos/Git CMM.app |
| macOS | .dmg |
dmg/Git CMM_x.y.z_<arch>.dmg |
| Windows | .msi |
msi/Git CMM_x.y.z_x64_en-US.msi |
| Windows | .exe |
nsis/Git CMM_x.y.z_x64-setup.exe |
| Linux | .deb / .AppImage / .rpm |
deb/ · appimage/ · rpm/ |
First build takes 5–15 minutes (compiling all Rust dependencies). Subsequent incremental builds are seconds.
# macOS universal binary (Apple Silicon + Intel in one .dmg)
rustup target add aarch64-apple-darwin x86_64-apple-darwin
npm run tauri build -- --target universal-apple-darwin
# Single target (Apple Silicon only)
npm run tauri build -- --target aarch64-apple-darwin
# Binary only, skip bundling (faster iteration)
npm run tauri build -- --no-bundle
# Rust type-check only (no compile)
cargo check --manifest-path src-tauri/Cargo.tomlYou need at least one LLM provider. Options:
- Install Ollama from ollama.com
- Pull a model:
ollama pull qwen2.5-coder:7b
- Verify it's running:
curl http://localhost:11434 # → "Ollama is running" - In the app: Settings → Add Provider → Ollama → URL:
http://localhost:11434→ Test → Save
- Get an API key from your provider:
- OpenRouter: openrouter.ai/keys
- OpenAI: platform.openai.com/api-keys
- In the app: Settings → Add Provider → OpenAI-compatible
- Base URL: e.g.
https://openrouter.ai/api/v1orhttps://api.openai.com/v1 - API Key: paste your key
- Click Fetch Models → select a model
- Test → Save
- Base URL: e.g.
- Kind: Ollama
- URL:
https://ollama.com(or per Ollama Cloud docs) - API Key: from Ollama Cloud dashboard
Multiple providers can be configured. Select the active one via the radio button in Settings. The app uses whichever is active for all generate operations.
- Add a repository — click the folder icon in the sidebar, select a folder containing
.git/ - Stage changes — use
git addin your terminal or IDE - Generate message — click Generate; the AI streams a Conventional Commit message
- Review & commit — edit if needed, then click Commit (or Copy to paste elsewhere)
- Push — click Push in the header (auto-pulls with rebase if behind remote)
| Action | How |
|---|---|
| Fetch remote updates | Click Fetch in the header |
| Pull changes | Click Pull (optional rebase toggle) |
| Switch branch | Use the branch dropdown in the header |
| Create branch | Branch dropdown → + New branch |
| View history | Click the History tab |
| Manage submodules | Expand the submodule tree in the sidebar |
| Layer | Technology |
|---|---|
| Desktop runtime | Tauri v2 (Rust) |
| Frontend | React 19 + TypeScript 5.8 + Vite 7 |
| Styling | Tailwind CSS 3 |
| Icons | Lucide React |
| LLM communication | HTTP streaming (Ollama NDJSON / OpenAI SSE) via Rust reqwest |
| Persistent storage | tauri-plugin-store |
git-cmm/
├── src/ # React frontend (TypeScript)
│ ├── App.tsx # Root component
│ ├── components/ # UI components (Sidebar, MainPanel, Settings, etc.)
│ ├── hooks/ # Custom React hooks
│ ├── lib/ # Utility functions
│ ├── types/ # TypeScript type definitions
│ └── styles/ # CSS / Tailwind
├── src-tauri/ # Tauri / Rust backend
│ ├── src/
│ │ ├── main.rs # Entry point
│ │ ├── lib.rs # Plugin registration & command handler
│ │ └── commands/ # Tauri commands
│ │ ├── git.rs # Git operations (status, commit, push, pull, etc.)
│ │ └── llm.rs # LLM streaming & model listing
│ ├── Cargo.toml # Rust dependencies
│ └── tauri.conf.json # Tauri app configuration
├── public/ # Static assets
├── docs/ # Documentation & screenshots
├── plans/ # Feature implementation plans
├── package.json # Node.js dependencies & scripts
├── vite.config.ts # Vite configuration
├── tailwind.config.js # Tailwind configuration
└── tsconfig.json # TypeScript configuration
A GitHub Actions workflow (.github/workflows/release.yml) builds for macOS (aarch64 + x86_64) and Windows (x64) on every v* tag push.
# Create a release
git tag v0.2.0
git push origin v0.2.0You can also trigger manually from Actions → Release → Run workflow on GitHub.
- Conventional Commits specification
- Tauri team for an excellent cross-platform toolkit
- Ollama for making local LLMs accessible


