Auto-restack
The most important feature, hidden in plain sight: when you edit a branch, every branch above
it rebases automatically. No more git rebase --onto gymnastics, no more force-pushing
four branches by hand, no more PR "out of date with target branch" warnings.
stkd maintains a DAG of your stacks in .git/config (the same format Graphite uses, so existing
stacks come over cleanly). gt restack walks that DAG, rebases each dependent branch onto its
parent's latest tip, and stops at any conflict so you can resolve it. gt continue picks up
where you left off.
GitHub + GitLab — first class
stkd treats GitHub and GitLab as peers. The same gt submit --stack opens pull requests on
GitHub or merge requests on GitLab (cloud or self-hosted), with cross-linked descriptions and the
canonical “Stacked PRs” comment that reviewers expect.
Self-hosted GitLab is a first-class citizen: set --gitlab-host=gitlab.example.com once
and every stkd command targets your instance.
Interactive TUI
gt tui opens a fully-keyboard-driven terminal interface to your stacks. Vim keys to navigate,
single letters to act, an inline diff viewer, and live PR status. The fastest way to browse your stacks —
and a gentle on-ramp for new team-mates.
See A tour of the stkd TUI for a guided walkthrough.
MCP server for AI agents
stkd-mcp exposes every CLI command as a typed MCP tool. Drop it into Claude Code or Cursor's
config and the agent can gt_create, gt_submit, gt_restack, and
gt_land natively — no shell-outs, no fragile prompt parsing.
stkd is the only stacked-diff tool with first-class MCP integration today. Full details on the
MCP page.
Optional self-hosted dashboard
For teams: stkd-server is a small Rust service that gives you a team-wide view of stacks,
PR statuses, and merges — running on your own infrastructure, behind your own SSO. SQLite by default,
Postgres for multi-replica deployments.
See Self-hosting the stkd dashboard.
Fast where it matters
The whole stack is Rust. gt log is a parallel walk of git2's commit graph. gt restack
uses cached merge bases. gt sync diffs the local DAG against the remote in one round-trip.
On a 30k-file monorepo, every interactive command stays well under 100ms.
Truly open source
Apache-2.0 license. No telemetry by default. No tracking endpoints. No paid tier. The CLI, engine,
MCP server, and dashboard are all in one public monorepo on
GitHub.
Graphite-compatible metadata
The CLI grammar matches Graphite's, and stkd reads the same branch.<name>.parent git-config
metadata Graphite stores. Migration is a single gt repo init; existing stacks come over
unchanged. See the migration guide.