Nexgit is an early-stage open-source project for building a better Git workflow tool: a serious headless CLI, a keyboard-first TUI, and a polished desktop app for stacked changes and GitHub-style collaboration.
This repository is being developed as a university club project. The goal is to be welcoming to new contributors while still using practices that look like a real open-source project.
Status: pre-alpha scaffold. The CLI, TUI, app-server, and desktop app are wired together, but most Git/product behavior is still placeholder logic.
Nexgit aims to provide:
- Headless commands for scripts and automation.
- A Ratatui terminal UI for fast keyboard workflows.
- A desktop GUI inspired by stacked-diff tools like Graphite.
- A local app-server exposed by the Rust CLI, similar in shape to Codex's app-server model.
- Shared Rust core logic so the CLI, TUI, and desktop app behave consistently.
Desktop React UI
↓ window.nexgit preload API
Electron main process
↓ newline-delimited JSON over stdio://
nexgit app-server
↓
Rust core logic
The desktop app starts the Rust CLI in app-server mode:
nexgit app-server --listen stdio://The app-server also has scaffolding for:
nexgit app-server --listen ws://127.0.0.1:0
nexgit app-server --listen unix://apps/
cli/ Rust CLI binary, headless commands, Ratatui TUI, app-server
desktop/ Electron + React + TypeScript desktop frontend
crates/
core/ Shared Rust product/domain logic
protocol/ App-server protocol types and generated TypeScript definitions
docs/ Contributor, architecture, development, and maintainer docs
Nexgit supports two development environment entrypoints. Choose one.
mise install
pnpm install
pnpm checknix develop
pnpm install
pnpm checkSee Development environments for details. The project docs intentionally avoid separate manual toolchain installation instructions; mise.toml and flake.nix are the supported environment definitions.
cargo run -p nexgit-cli -- tuicargo run -p nexgit-cli -- repo status --json
cargo run -p nexgit-cli -- stack list --jsoncargo run -p nexgit-cli -- app-server --listen stdio://Smoke test the protocol:
printf '{"type":"request","id":1,"method":"system.version","params":{}}\n' \
| cargo run -q -p nexgit-cli -- app-server --listen stdio://pnpm desktop:devThe desktop app will try to use NEXGIT_CLI_PATH first. If it is not set, it looks for target/debug/nexgit. If that binary is missing, it falls back to running Cargo directly.
pnpm format
pnpm format:check
pnpm lint
pnpm typecheck
pnpm check
pnpm nix:check
cargo check --workspaceRoot pnpm shortcuts:
pnpm tui
pnpm app-server
pnpm desktop:dev
pnpm desktop:build
pnpm desktop:typecheckStart here if you are new:
- Contributing guide
- New contributor onboarding
- Development setup
- Development environments
- Tooling: linting, formatting, and LSP
- Architecture overview
- Product planning
- v0.1.0 - GitHub App-Server Data milestone
- Glossary
- Club guide
- Code of conduct
Maintainers should also read:
You do not need to be an expert in Rust, TypeScript, Electron, or Git internals to help.
Good first contributions include:
- Improving documentation.
- Adding examples and screenshots.
- Cleaning up error messages.
- Improving the placeholder TUI layout.
- Adding small protocol methods.
- Writing tests for existing behavior.
- Filing clear bugs or design notes.
Read CONTRIBUTING.md before opening a pull request.
Nexgit is dual-licensed under either the MIT License or the Apache License, Version 2.0, at your option. See LICENSE for the contribution licensing notice.