A native Git workspace for macOS.
Read changes clearly. Shape your commits. Keep your workflow close.
English · 简体中文
WeGit is a SwiftUI Git client built around the work you do every day: inspect a diff, stage the right changes, create a commit, browse history, manage branches, and sync with a remote.
It uses your existing Git installation, configuration, credential helpers, and SSH agent. Native windows, keyboard shortcuts, a menu bar panel, and light, dark, and custom themes keep the experience at home on macOS. The Git core has no third-party runtime dependencies.
WeGit 1.0.0 · Download · Website. Ad-hoc signed, not notarized by Apple. Accessibility acceptance is deferred; see the release notes and remaining validation limits.
| What you can do | |
|---|---|
| 📂 Repositories | Open or clone repositories, drop folders into the app, and switch between recent and favorite repositories. |
| 🔍 Diffs | Read unified or split diffs with syntax highlighting, word changes, hunk navigation, expandable context, and exact source-text selection and copying. Large diffs use paged disk snapshots. |
| 🧩 Commits | Stage or unstage files and hunks, discard changes with confirmation, amend a commit, and keep a draft for each repository. |
| 🌿 Branches & history | Browse a paginated commit graph, compare commit files, copy a SHA, create a branch from a commit, or check out a detached HEAD. |
| 🔄 Remotes & conflicts | Fetch, pull, and push to explicit targets; choose merge, rebase, or fast-forward-only pulls; continue or abort supported merge/rebase conflicts. |
| 🛡️ Operation recovery | Reject stale changes, coordinate repository operations, preserve drafts on failures, and verify an uncertain push result before retrying. |
| 🎨 Appearance | Use native light/dark themes or save a separate custom palette with 17 color roles, live preview, contrast hints, and JSON import/export. |
| ⌨️ Native workflow | Use keyboard navigation, repository search, a command palette, configurable panels, and a menu bar quick-access panel. |
| 🌍 Languages | Switch between English, Simplified Chinese, and the system language without restarting the app. |
See the product specification, interface notes, and compatibility record for scope and evidence. Product capabilities and completed release acceptance are tracked separately.
Development branch, 2026-10-20: the v1.1 M0 baseline adds collapsible change groups, staging checkboxes, a folder display mode, a clickable change map for multi-hunk in-memory diffs, paired pane surfaces, and upstream commit counts on Pull/Push. These additions have been integrated into main and are not part of the published 1.0.0 download. See the usage and verification notes.
- macOS 27 or later. Current builds and acceptance evidence cover Apple Silicon / arm64.
- Git 2.46 or later. WeGit checks the required configuration-isolation and remote-address behavior at startup.
- To build: Xcode 27, including the macOS 27 SDK. The verified local toolchain is Swift 6.4.
- XcodeGen 2.43+ is optional for normal builds; it is needed to regenerate the project after changing
project.yml. The generated Xcode project is included.
WeGit is distributed through GitHub Releases and the project website. It is not planned for the Mac App Store or TestFlight.
Download WeGit 1.0.0, including the ZIP, SHA-256 checksum and source manifest. The website links to these same versioned assets. See the installation, data and rollback notes.
There is currently no Apple Developer Program account for this project. Public packages use ad-hoc signing and are not notarized by Apple. Ad-hoc signing does not provide a verified developer identity, and macOS may block a downloaded build. For an app you have chosen to trust, consult Apple’s guidance on opening apps safely. Downloaded-package installation on a clean Mac is still pending validation.
git clone https://github.com/WeOpen/WeGit.git
cd WeGit
scripts/build.sh Debug
open .build-app/Build/Products/Debug/WeGit.appYou can also open WeGit.xcodeproj in Xcode, select the WeGit scheme, and run it. Local ad-hoc builds do not require Developer ID credentials.
To create a local Release preview:
scripts/build.sh Release
scripts/package-release.sh --previewThe package script checks the app’s build-source receipt, embedded AskPass helper, license, signature integrity, and exclusion of test entry points. It writes a ZIP, checksum, and manifest to .build/releases/package-*. This command creates a local development package; it does not publish a GitHub Release.
| Action | Shortcut |
|---|---|
| Open a repository | ⌘O |
| Changes / History / Branches | ⌘1 / ⌘2 / ⌘3 |
| Refresh | ⌘R |
| Commit staged changes | ⌘↩ |
| Pull / Push target form | ⌘⇧L / ⌘⇧U |
| Menu bar quick-access panel | ⌘⇧M |
| Settings | ⌘, |
🌍 Choose Settings → General → Interface language to change the app language. Repository names, paths, branches, commit messages, code, and patches retain their original content.
🎨 Choose Settings → Appearance → Edit custom theme… to create a full custom scheme. Built-in Light and Dark remain unchanged.
# Core unit tests and integration tests using real temporary repositories
swift test
# Strict formatting, migration/localization checks, core tests, and Debug build
scripts/verify.sh
# Also run native UI, appearance/menu/theme checks, and accessibility audit
# Requires a working interactive macOS login session
scripts/verify.sh --uiHistorical verification before M0 passed 183 tests in 32 suites with both Apple Git 2.54.0 and an isolated Git 2.46.0 build. The 2026-10-18 record includes 278 theme checks (including 216 role/background contrast pairs), alongside earlier 18 appearance/icon behaviors, 27 native menu behaviors, and 6 restored-startup combinations. Dates and source boundaries remain in the development record; these results do not establish acceptance of the current development source.
The 2026-10-20 M0 checks passed 14 sync-count, 30 file-tree/staging, 13 map, 290 theme, 18 icon, and 27 menu checks, plus 30 Python policy tests. Localization covered 1015 string keys, 7 plural keys, and 1325 source literals. Core tests were compiled with swift build --build-tests; Debug and native UI tests were compiled with xcodebuild build-for-testing. No local XCTest ran, and the new SelectionScopeTests still needs hosted execution.
Hosted smoke 1/1, the full native functional suite 45/45 (zero failures/skips), and the reading matrix 144/144 passed at 2c2533c in run 39137123756. This is functional evidence on the recorded source, not same-commit full acceptance of the release. Accessibility acceptance is deferred; final-source performance, protected-Mac installation and real Beta feedback remain incomplete. See the release notes and current checklist for the retained limits.
Tests use isolated configuration files, temporary repositories, and separate preferences. Never run write tests against a repository you cannot afford to change.
V1.0 focuses on daily Git workflows and readable diffs. Stash and Tag management, an integrated conflict editor, interactive rebase, Blame, linked worktree/submodule management, and hosting-provider integrations remain outside the first release. The published V1.0 build does not support opening linked worktrees or bare repositories. Development for v1.2 has started with existing-worktree opening; validation and release remain pending.
The four required features in the v1.1 plan—Stash, Remote and Tag management, plus file history with targeted search—are implemented and integrated. Application source 835b8c4 passed 54/54 functional tests with zero failures/skips and retained 144 reading-matrix screenshots; the Beta 1 draft package is verified. Performance, protected-Mac installation, real Beta feedback and stable-release acceptance remain open. See the source-pinned Beta record.
The v1.2 requirements cover linked-worktree opening/management, the deferred single-commit Cherry-pick/Revert workflows, Blame, selected-line staging, the conflict editor, standalone/interactive Rebase, Submodule management and LFS status. Priorities and delivery batches are recommendations; implementation and release dates follow individual requirements.
The development branch now includes single-commit Cherry-pick/Revert previews and recovery. It checks the actual merge destinations, protects ignored content, preserves drafts, and keeps recovery available after a failed commit. Hosted acceptance is tracked separately in the development record.
The app can hand conflicts to an external editor and continue or abort supported operations. It does not yet include an integrated three-way merge editor. Homebrew Git core and isolated noninteractive OpenPGP checks have passed. GitLab, interactive Pinentry/hardware keys, additional credential-helper setups, and other untested environments remain explicitly pending in the compatibility matrix.
| Path | Contents |
|---|---|
WeGit/ |
SwiftUI app, state, native presentation, design system, and features |
WeGitCore/ |
Git domain services, process runner, repository queue, snapshots, and watchers |
WeGitAskPass/ |
Bundled authentication helper |
WeGitTests/ · WeGitUITests/ |
Core/integration tests and native UI regression suites |
branding/ |
Current logo/icon sources and retained earlier resources |
docs/ |
Product, design, architecture, plans, and acceptance evidence; primarily in Chinese |
- 🧭 Documentation index
- ✅ V1.0 release checklist
- 🏗️ Architecture
- 📈 Performance · ♿ Accessibility
- 📋 Changelog · 📦 Release procedure
Start with an Issue, define acceptance criteria, and deliver through a linked PR. See CONTRIBUTING and the GitHub workflow guide for labels, CI and gated draft releases.
Use GitHub Issues to report a problem with reproduction steps, the app/macOS/Git versions, and the expected and actual results. For changes, describe the workflow and validation evidence in your pull request.
🔒 Diagnostic summaries are exported only when you request them in Settings. They exclude code, diffs, commit messages, repository paths, and credentials. Review any additional screenshots or logs before sharing them.
MIT © 2026 WeOpen.