π Diamond
Stop waiting for code reviews. Start shipping.
Diamond is a lightning-fast CLI for stacked pull requestsβthe workflow used at Meta, Google, and top engineering teams to ship code faster with higher quality.
β οΈ Alpha Software: Diamond is in active development. Works well, but expect rough edges. Please report issues!
The Problem
You finish a feature. You open a PR. Then you wait.
Hours. Sometimes days. Your next feature depends on this one, so you're stuck. You could branch off your unmerged work, but rebasing that later? Nightmare fuel.
Meanwhile, your best engineers are context-switching instead of coding.
The Solution
Diamond lets you build Feature B on top of Feature Aβbefore Feature A is even reviewed. When Feature A gets feedback, Diamond automatically rebases your entire stack in milliseconds.
For Developers
β Stay in Flow β Never blocked waiting for reviews to continue working β Smaller, Focused PRs β Break features into reviewable chunks (200-500 lines each) β Automatic Rebase β Your entire stack rebases in milliseconds, not hours β Standard Git β Works with existing tools, no vendor lock-in
For Engineering Leaders
β 4x Faster Reviews β Research shows reviewers process 5 small PRs faster than 1 large one (Dr. Michaela Greiler) β 21% More Code Shipped β Teams using stacked workflows ship measurably more (Asana case study) β 7 Hours/Week Saved β Reduced context switching per developer (Asana case study) β Zero Reviewer Training β Creates standard GitHub/GitLab PRsβno new tools required
Installation
macOS (Homebrew)
Other Platforms
See Getting Started Guide for Cargo, build-from-source, and more.
Verify installation:
Next: Set up GitHub (gh auth login) or GitLab (glab auth login). See Getting Started for details.
Quick Start
# Initialize Diamond in your repo
# Create your first branch
# Stack another branch on top (no waiting!)
# Visualize your stack
# Submit both PRs
Full walkthrough: Getting Started Guide
Real-World Example
Let's build a complete authentication system as a stack of small, focused PRs:
# Start from main
# Layer 1: Database (150 lines)
# Layer 2: Business logic (200 lines) - builds on Layer 1
# Layer 3: API endpoints (180 lines) - builds on Layer 2
# Layer 4: Frontend (220 lines) - builds on Layer 3
# Visualize the stack
Your stack:
β main
βββ β auth-schema
βββ β auth-service
βββ β auth-api
βββ β auth-ui β (current)
Submit for review:
Why This Works Better
Before (monolithic PR):
- 1 PR Γ 750 lines = 4 hours review time
- Generic reviewers handle everything
- Merge conflicts likely
- Hard to revert if issues found
After (stacked PRs):
- Database PR β DB specialist reviews (30 min)
- Service PR β Backend engineer reviews (30 min)
- API PR β API team reviews (30 min)
- UI PR β Frontend engineer reviews (30 min)
Result: Reviews happen in parallel. Total time: 30 minutes instead of 4 hours sequential.
Why Diamond?
π¦ Rust Performance
Built with libgit2 for sub-millisecond operations. Your stack with 20 branches? Rebased in <100ms.
π― TUI-First Design
dm log gives you a beautiful terminal UI to visualize complex stacks. No more ASCII art in git log.
π§ Git-Native
Diamond uses standard Git branches and commits. Your team doesn't need Diamond to review your PRs. You can always drop back to vanilla Git.
π¦ Zero SaaS Dependencies
Metadata lives in .git/diamond/ (Git-ignored by default) and git refs. Delete it and you're back to regular Git branches. No remote dependencies.
Essential Commands
| Command | Description |
|---|---|
dm create <name> |
Create branch on top of current |
dm checkout [name] |
Switch branches (interactive if no name) |
dm log |
Visualize stack tree (TUI) |
dm submit --stack |
Push and create PRs for entire stack |
dm sync |
Fetch trunk and rebase all branches |
dm restack |
Rebase stack without fetching |
dm up / down |
Navigate to child/parent branch |
dm modify -am "msg" |
Amend current branch |
dm continue / abort |
Handle conflicts or cancel operation |
dm doctor --fix |
Diagnose and repair metadata |
Full reference: Command Reference
How It Works
Diamond stores parent-child relationships as git refs that travel with push/fetch:
refs/diamond/config/trunk β blob("main")
refs/diamond/parent/auth-schema β blob("main")
refs/diamond/parent/auth-service β blob("auth-schema")
refs/diamond/parent/auth-api β blob("auth-service")
When you run dm restack or dm sync, Diamond:
- Topologically sorts your branches (parents before children)
- Rebases each branch onto its parent using
git rebase - Handles conflicts interactively with
dm continue/dm abort
That's it. No magic. Just smart orchestration of Git primitives.
FAQ
Q: Do my reviewers need Diamond? A: No. Diamond creates standard GitHub PRs and GitLab MRs. Reviewers see normal PRs with clear base branches.
Q: What if I get conflicts during rebase?
A: Diamond pauses and lets you resolve conflicts manually. Then run dm continue to resume.
Q: Does this work with GitLab?
A: Yes! GitLab has full feature parity with GitHub. Diamond creates MRs, handles approvals, waits for pipelines, and supports auto-merge. Requires glab CLI. Self-hosted GitLab instances are also supported.
More questions? See Getting Started or Troubleshooting
Next Steps
- π Get Started: Installation & First Stack
- βοΈ Configure: Setup squash merge, shell completion, and more
- π Advanced: Team collaboration, CI/CD, large stacks
- π Reference: All commands with options
Contributing
Diamond is open source and built with π¦ Rust. Contributions welcome!
Development setup:
Security:
This project uses Gitleaks to prevent secrets from being committed. Run just setup-hooks to install the pre-commit hook.
Architecture:
src/main.rsβ CLI parsing (clap)src/commands/β Command implementationssrc/git_gateway.rsβ Git operations (libgit2)src/ref_store.rsβ Stack metadata in git refssrc/state.rsβ Operation state managementsrc/forge/β GitHub/GitLab integration
Inspired By
The stacked diff workflow has been used for years at:
- Meta (Phabricator)
- Google (Critique)
- Uber, Airbnb, Stripe (various internal tools)
Diamond brings this workflow to any team using GitHub or GitLab, with the speed of Rust and zero SaaS dependencies.
License
Apache 2.0 Β© 2025
Built with β€οΈ for developers who ship fast.
Learn More
- π Stacked Diffs Explained β The Pragmatic Engineer
- π Why Stacked PRs Work β Dr. Michaela Greiler
- π― In Praise of Stacked PRs β Ben Congdon
- π Asana Engineering Growth β Asana Engineering Blog
- π₯ Stacked Pull Requests Talk β GitKon 2022