Skip to content

baka3k/git-cmm

Repository files navigation

Git CMM — AI-Powered Git Commit Message Generator

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.


Features

  • 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.


Screenshots

Main window

main

Settings

settings |

LLM Config - Compatible with OpenAI

settings


Table of Contents


Quick Start (Pre-built Installer)

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)

macOS — bypass Gatekeeper (unsigned app)

xattr -d com.apple.quarantine "/Applications/Git CMM.app"

Windows — bypass SmartScreen (unsigned app)

Click More info → Run anyway on the blue SmartScreen dialog.


Build from Source

Prerequisites

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)

Platform-specific dependencies

macOS
xcode-select --install
Windows
  • WiX Toolset 3.x — for .msi bundling:
    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-dev

Clone & Install

git clone https://github.com/baka3k/git-cmm.git
cd git-cmm
npm install

Development (hot reload)

npm 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)

Production Build

npm run tauri build

This command:

  1. Runs tsc && vite build → bundles frontend into dist/
  2. Runs cargo build --release in src-tauri/
  3. 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.

Useful Build Commands

# 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.toml

Configuration

LLM Provider Setup

You need at least one LLM provider. Options:

Option A: Local Ollama (recommended — fully offline, private)

  1. Install Ollama from ollama.com
  2. Pull a model:
    ollama pull qwen2.5-coder:7b
  3. Verify it's running:
    curl http://localhost:11434
    # → "Ollama is running"
  4. In the app: Settings → Add Provider → Ollama → URL: http://localhost:11434 → Test → Save

Option B: OpenRouter / OpenAI / Groq (cloud)

  1. Get an API key from your provider:
  2. In the app: Settings → Add Provider → OpenAI-compatible
    • Base URL: e.g. https://openrouter.ai/api/v1 or https://api.openai.com/v1
    • API Key: paste your key
    • Click Fetch Models → select a model
    • Test → Save

Option C: Ollama Cloud

  • Kind: Ollama
  • URL: https://ollama.com (or per Ollama Cloud docs)
  • API Key: from Ollama Cloud dashboard

Switching Providers

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.


Usage

Daily Workflow

  1. Add a repository — click the folder icon in the sidebar, select a folder containing .git/
  2. Stage changes — use git add in your terminal or IDE
  3. Generate message — click Generate; the AI streams a Conventional Commit message
  4. Review & commit — edit if needed, then click Commit (or Copy to paste elsewhere)
  5. Push — click Push in the header (auto-pulls with rebase if behind remote)

Other Operations

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

Tech Stack

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

Project Structure

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

CI / Releases

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.0

You can also trigger manually from Actions → Release → Run workflow on GitHub.


License

MIT


Acknowledgments

About

An AI-powered commit message generator that automatically analyzes staged code changes and creates clear, meaningful, and convention-compliant commit messages. By understanding the context of the modifications, the tool helps developers maintain consistent commit history, reduce manual effort, and improve code review and collaboration workflows.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages