Skip to content

Latest commit

Β 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

README.md

Git Manager Logo

Git Manager

macOS desktop application to manage your Git repositories with a modern interface and powerful tools.


Overview

git-manager is a desktop application built with Tauri v2 + React (Vite), offering:

  • 🌲 Git Tree visualizer β€” interactive multi-branch commit graph
  • πŸ€– Commit generation β€” AI-written commit messages, local-first (Ollama) or via a configured provider
  • πŸ”„ Rollback / Revert β€” safe undo with preview
  • πŸ”§ Fixup & Autosquash β€” guided history cleanup
  • 🌿 Worktree management β€” visual multi-worktree management
  • ♻️ Interactive rebase β€” drag & drop actions
  • πŸ“¦ Stash β€” stash management with messages
  • 🌐 i18n β€” interface in French and English
  • πŸ”’ Local-first β€” no telemetry; the only outbound calls are to the AI provider you configure and to GitHub

Tech stack

Layer Technology
Desktop runtime Tauri v2
Frontend React 18 + Vite + TypeScript
UI Components shadcn/ui + Tailwind CSS
Backend Rust + git2 crate (libgit2)
State management Zustand
Internationalization react-i18next (FR / EN)
LLM (AI commit) Ollama, or any OpenAI-compatible server
Remote auth SSH + HTTPS (token)
Monorepo pnpm workspaces + Turborepo

Monorepo structure

git-manager/
β”œβ”€β”€ apps/
β”‚   β”œβ”€β”€ desktop/                    # Main Tauri application
β”‚   β”‚   β”œβ”€β”€ src-tauri/              # Rust backend
β”‚   β”‚   β”‚   └── src/
β”‚   β”‚   β”‚       β”œβ”€β”€ commands/       # Thin Tauri IPC commands, one file per domain
β”‚   β”‚   β”‚       β”‚                   #   (repo, log, branch, commit, remote, stash, rollback,
β”‚   β”‚   β”‚       β”‚                   #   fixup, rebase, interactive_rebase, cherry_pick, bisect,
β”‚   β”‚   β”‚       β”‚                   #   blame, conflict, patch, worktree, submodule, undo,
β”‚   β”‚   β”‚       β”‚                   #   github, pr_template, ai, agent, tasks, terminal,
β”‚   β”‚   β”‚       β”‚                   #   activity_log, ssh, themes)
β”‚   β”‚   β”‚       β”œβ”€β”€ services/       # git2 business logic, called from commands/
β”‚   β”‚   β”‚       β”‚                   #   (git_diff, git_commit, git_repo, git_graph, …)
β”‚   β”‚   β”‚       β”œβ”€β”€ error.rs        # Unified AppError β†’ JSON string
β”‚   β”‚   β”‚       β”œβ”€β”€ models.rs       # serde structs mirroring TypeScript types
β”‚   β”‚   β”‚       β”œβ”€β”€ utils.rs        # Shared helpers (short_oid, get_git_signature)
β”‚   β”‚   β”‚       β”œβ”€β”€ state.rs        # AppState (open repos, cancellation flag)
β”‚   β”‚   β”‚       └── lib.rs          # Builder + invoke_handler registration
β”‚   β”‚   └── src/                    # React frontend
β”‚   β”‚       β”œβ”€β”€ app/                # Pages (dashboard, repo, settings, pull-requests)
β”‚   β”‚       β”œβ”€β”€ components/         # Feature components, render-only (logic lives in hooks/)
β”‚   β”‚       β”œβ”€β”€ hooks/              # Business-logic + data-fetching hooks (SWR + legacy React Query)
β”‚   β”‚       β”œβ”€β”€ api/                # api/*.api.ts β€” domain-grouped service layer over lib/tauri.ts
β”‚   β”‚       β”œβ”€β”€ lib/                # tauri.ts (typed invoke wrappers), appEventBus.ts
β”‚   β”‚       └── stores/             # Zustand stores (repoUI, repoData, settings, undoHistory, game)
β”‚   β”œβ”€β”€ landing-page/               # Public landing page (Vite), deployed to GitHub Pages
β”‚   β”œβ”€β”€ docs/                       # Documentation site (VitePress), one page per @doc scenario
β”‚   └── e2e/                        # WebdriverIO + Cucumber e2e suite (drives the real app)
β”œβ”€β”€ packages/
β”‚   β”œβ”€β”€ git-types/                  # Shared TypeScript interfaces (DTOs)
β”‚   β”œβ”€β”€ ai/                         # AI presets, providers and per-feature descriptors
β”‚   β”œβ”€β”€ mascot/                     # Octopus mascot as a shared <git-mascot> web component
β”‚   β”œβ”€β”€ i18n/                       # react-i18next setup + EN/FR locale files
β”‚   β”œβ”€β”€ ui/                         # shadcn/ui base components
β”‚   β”œβ”€β”€ components/                 # Shared presentational React components
β”‚   β”œβ”€β”€ editor/                     # Monaco integration: diff/merge + single-pane editors
β”‚   β”œβ”€β”€ theme/                      # Design tokens + APCA contrast gates
β”‚   β”œβ”€β”€ storybook-a11y/             # Shared Storybook accessibility setup
β”‚   └── config/                     # Shared Oxlint + Tailwind + tsconfig
β”œβ”€β”€ tools/
β”‚   └── git-fixtures/               # Scripted fixture repos (dev tabs + e2e scenarios)
β”œβ”€β”€ docs/
β”‚   β”œβ”€β”€ README.md                   # This file
β”‚   β”œβ”€β”€ screenshots/                # Auto-captured app screenshots (e2e @screenshots)
β”‚   β”œβ”€β”€ ai/                         # The AI system: one page per feature + a shared overview
β”‚   β”œβ”€β”€ architecture/               # Architecture refactor plans, audits + execution tracking
β”‚   β”œβ”€β”€ integrations/               # Third-party setup (GitHub OAuth app + scopes)
β”‚   └── docs-site/                  # Plans for the documentation site itself (apps/docs)
β”œβ”€β”€ CLAUDE.md                       # Architecture/IPC conventions β€” authoritative
β”œβ”€β”€ package.json                    # Root package (global scripts)
β”œβ”€β”€ pnpm-workspace.yaml
└── turbo.json

Prerequisites

  • macOS 13+ (Ventura minimum recommended)
  • Node.js 20+
  • pnpm 9+
  • Rust 1.77+ (rustup install stable)
  • Tauri CLI v2 (cargo install tauri-cli)
  • An AI provider (optional, only for the AI features) β€” Ollama running locally is the default; see "AI provider configuration" below

Installation

# Clone the repository
git clone https://github.com/Tlahey/git-manager.git
cd git-manager

# Install dependencies
pnpm install

# Run in development (launches the native desktop application)
pnpm dev

# Build the application (generates the desktop binary)
pnpm build

Important

The application relies on a Rust backend via Tauri and therefore cannot be launched in a regular web browser. The pnpm dev command will launch the desktop application window directly.


AI provider configuration

AI features (commit message, file grouping, PR description, branch/change explanation, daily summary β€” see the AI docs) are optional. The default provider is a local Ollama at http://localhost:11434. The only other entry is a generic OpenAI-compatible preset you point at any server speaking the OpenAI API (LM Studio, vLLM, MLX, OpenAI itself…) β€” see AI_PRESETS in packages/ai. Provider, URL, API key, model and timeout are configured in Settings β†’ AI; the model list is read from the provider's /v1/models endpoint when the URL is validated. Temperature and prompts are not configurable β€” they are owned per feature inside packages/ai.

The app checks the provider at startup. If AI is enabled but nothing answers, a warning banner appears under the tab bar (and a status pill in the footer); clicking either opens Settings β†’ AI.

To use the local default:

# Install and start Ollama
brew install ollama
ollama serve

# Download a model (recommended)
ollama pull llama3.2
# or for commits only
ollama pull qwen2.5-coder:7b

Documentation

Document Description
CLAUDE.md Authoritative architecture, IPC boundary and layering rules
Documentation site The user-facing manual β€” one page per feature, generated from the @doc e2e scenarios
Issue tracker Remaining work. There is no roadmap file: see the note below
AI system How every AI feature works β€” shared runtime + one page per feature
Architecture refactors Five refactor audits and their execution records (July 2026) β€” all complete
GitHub OAuth The OAuth app, device flow and token scopes behind the GitHub integration
Doc site content plan Which page of the documentation site comes next, and the scenario that proves it

One rule behind this list

A document that nothing forces to change with the code stops being true. Every entry above has a forcing function: the doc site is regenerated from the e2e scenarios, CLAUDE.md is what a PR is reviewed against, the refactor records describe work that is finished and cannot drift. Three things were removed on 2026-07-31 for failing that test:

  • ROADMAP.md β€” an inventory of what had shipped. Its last revision claimed 133 Tauri commands when there were 157, credited fetch/pull/push with an HTTPS auth path that was never wired, and listed as "not started" a feature that had partly shipped. Its open items became issues #234–#237.
  • specs/archive/ β€” the original 2026-07-03 per-feature design docs, written before the features existed and never updated. Six warnings scattered across the docs existed purely to tell readers not to trust them.
  • specs/ β€” two accurate specs describing invariants worth protecting. They went because their content belonged one level down: the module doc comment is the copy you cannot refactor past without reading. auto-fetch.md was already reproduced almost verbatim in useAutoFetch.ts's own header; what only graph-column-layout.md carried moved into build_graph_nodes and useGitGraphNodes.

Where invariant-shaped rationale goes now: the module doc comment, beside the code it protects β€” as git_rebase.rs, ai_provider.rs and ai_commit_scan.rs already do. If an invariant spans layers, state it once where it is enforced and point at that from the other side.

Everything removed stays in git history: git show 9381c80:docs/ROADMAP.md, git show 9381c80:docs/specs/ to list the specs.


License

MIT