Skip to main content

ReviewStack

ReviewStack (reviewstack.dev) is a novel user interface for GitHub pull requests with custom support for stacked changes. The user experience is inspired by Meta's internal code review tool, but leverages GitHub's design system to achieve a look and feel that is familiar to GitHub users:

To try it out, take the URL for an existing pull request on github.com and change the domain to reviewstack.dev, so:

bolinfest/monaco-tm#39 on GitHub is available at
https://reviewstack.dev/bolinfest/monaco-tm/pull/39 on ReviewStack.

Specifically, ReviewStack recognizes stacks created by sl pr submit, sl ghstack, or stacks created from a Git repo using standalone ghstack. When it sees that your pull request is part of such a stack, it provides a dropdown for navigating the commits in the stack. This encourages discussing and approving each change independently while allowing the author to add new commits to the top of the stack without interfering with the existing conversation around the commits on the bottom of the stack.

caution

Today, ReviewStack is focused on motivating the conversation about how an ideal stacked changes workflow should work. It is admittedly not as fully-featured or battle-tested (particularly for large pull requests) as GitHub's pull request UI. For these reasons, a pull request in ReviewStack links back to the equivalent page on GitHub so you can quickly make use of any GitHub functionality that is missing on ReviewStack.

Keyboard shortcuts

ReviewStack supports the following keyboard shortcuts:

keyaction
shift+Nnext PR in stack
shift+Pprevious PR in stack
ctrl+. (cmd+. on macOS)toggle timeline view
alt+Aselect Approve Changes action
alt+Rselect Request Changes action
alt+Cselect Comment action

Linking to a different review tool

When sl pr submit creates a stack, it appends a footer to each pull request body with a link to the stack on reviewstack.dev. If you run your own instance of ReviewStack (or another review tool that understands stacks), you can point that link elsewhere:

[github]
pull-request-review-url-template=https://review.example.com/{owner}/{repo}/pull/{number}
pull-request-review-tool-name=MyReview

The URL template supports the {owner}, {repo}, {number}, and {hostname} placeholders. {hostname} expands to the GitHub host the repository lives on — github.com for repositories on github.com, or your GitHub Enterprise hostname; when submitting from a fork it is the upstream's host. Note that the host in the template itself is your review tool, not GitHub: {hostname} is handy when a single review-tool instance serves repositories on more than one GitHub host and needs the GitHub host in the URL to tell them apart:

[github]
pull-request-review-url-template=https://reviewstack.example.com/{hostname}/{owner}/{repo}/pull/{number}

When these configs are unset, the footer links to reviewstack.dev as before. Setting github.pull-request-include-reviewstack=false removes the review link line entirely.