Stacked diffs. Simplified. An open-source, Graphite-compatible CLI for managing stacked pull requests on GitHub and GitLab. Break large changes into small, reviewable PRs that stay in sync automatically. Self-hosted. Multi-platform. AI-ready.
Large PRs are hard to review. Stacked diffs let you split work into a chain of dependent branches, each with its own focused PR:
main
└── feature/auth-base PR #1: Core authentication
└── feature/auth-oauth PR #2: OAuth support (depends on #1)
└── feature/auth-2fa PR #3: 2FA (depends on #2)
When you update a branch, Stack automatically rebases all dependent branches. When PRs merge, the stack collapses cleanly.
# macOS / Linux (Homebrew)
brew install neul-labs/tap/stkd
# Or install from crates.io
cargo install stkd-cli
# Or via npm
npm install -g stkd-cli
# Or via pip
pip install stkd-cli
# Or quick install (downloads binary or builds from source)
curl -fsSL https://raw.githubusercontent.com/neul-labs/stkd/main/install.sh | bash
# Or build from source
cargo install --path crates/stkd-cliThe binary is named gt for Graphite compatibility.
# Initialize in your repository
gt init
# Authenticate with GitHub or GitLab
gt auth --github
# Create a stack of branches
gt create feature/step-1 # First branch on main
# ... make changes, commit ...
gt create feature/step-2 # Stacks on step-1
# ... make changes, commit ...
gt create feature/step-3 # Stacks on step-2
# ... make changes, commit ...
# See your stack
gt log
# ○ feature/step-1
# ○ feature/step-2
# ◉ feature/step-3 ← you are here
# Or explore interactively
gt tui
# Submit all as PRs
gt submit --stack| Command | Description |
|---|---|
gt create <name> |
Create a branch stacked on current |
gt log |
Visualize the stack |
gt up / gt down |
Navigate between branches |
gt restack |
Rebase all dependent branches |
gt submit --stack |
Create/update PRs for the stack |
gt sync |
Fetch, restack, clean merged branches |
gt land --stack |
Merge the stack in order |
gt tui |
Interactive terminal UI |
gt modify |
Edit a branch's commits interactively |
- Auto-restack: Edit any branch, all dependents rebase automatically
- GitHub + GitLab: Full support for both platforms
- PR automation: Reviewers, labels, templates, draft PRs
- Stack-aware submit: One command creates PRs for your entire stack
- Interactive TUI: Keyboard-driven terminal UI for browsing stacks and status
- MCP Server: AI agent integration via Model Context Protocol
- Web Dashboard: Self-hosted visualization and management UI
- Conflict handling:
gt continue/gt abortfor rebase conflicts - Undo/redo: Recover from mistakes with
gt undo
See Stack in action with an interactive demo:
./demo.shFull documentation at docs.neullabs.com/stkd:
- Getting Started — Installation, quick start, first stack, authentication
- Concepts — How stacked diffs work
- Command Reference — All commands with examples and flags
- Guides:
crates/
├── stkd-cli # CLI binary (gt)
├── stkd-core # Core library (Repository, Stack, DAG)
├── stkd-engine # Programmatic engine for multi-agent harnesses
├── stkd-mcp # MCP server for AI agent integration
├── stkd-provider-api # Provider trait definitions
├── stkd-github # GitHub implementation
├── stkd-gitlab # GitLab implementation
├── stkd-db # Database layer (SQLite/PostgreSQL)
└── stkd-server # Web dashboard API
| Feature | Graphite | Stack |
|---|---|---|
| Open source | No | Yes |
| Self-hosted | No | Yes |
| GitHub | Yes | Yes |
| GitLab | No | Yes |
| CLI compatible | gt |
gt |
git clone https://github.com/neul-labs/stkd
cd stkd
cargo build
cargo testSee CONTRIBUTING.md for guidelines.
Apache-2.0 - See LICENSE for details.
Built by Neul Labs