I made a competitor to GitHubs UI for Pull Requests (codeapprove.com)
It’s built in Vue. My first 5 or 6 attempts at writing the diff viewer were very slow when things got big. I optimized this a lot and now I’m pretty proud of how snappy it is.
I’m not saying this as a plug (this is mostly a passion project not a big business) but to say that it’s possible to make a snappy GitHub PR UI using a frontend framework on top of GitHub’s own APIs. You just have to care. It’s not clear that they care.
You would be surprised! I have encountered the attitude that code reviews are a waste of time. It's not common, and I have never seen this attitude "win" across a team/company but it definitely exists. Some engineers are just overconfident, they believe they could fix everything if everyone would just let them code.
Shameless plug but since you asked ... CodeApprove (https://codeapprove.com) is probably the closest thing you can get to Critique on GitHub. It doesn't help with the Piper/CitC/Code Search parts though, and I agree those were excellent.
I’m biased (I created https://codeapprove.com) but I think GitHub has let code review lag so far behind the rest of the platform. They’ve done a lot of work on project management, CI, discussions, and code authoring but code review has been the same for about 10 years.
Tools like Graphite, CodePeer, Codelantis (and of course CodeApprove) make it so much easier to have a meaningful discussion on a PR. Making sure every thread comes to resolution, knowing whose turn it is, having a fast way to navigate between code and comments, etc. The FAANG companies all have this kind of thing built in house because good code review is a key part of building high quality large software projects.
Love the history here! I built a business (CodeApprove) around not liking GitHub's UI for code reviews and I still didn't know most of this.
I will never understand why GitHub has not invested as much in code review as they have in the rest of their platform. For their paying customers it has to be the number one part of their platform in terms of time-on-page.
But one thing they did well was open basically every part of the review experience to GitHub apps via their APIs. So tools like CodeApprove, Reviewable, Graphite, GitContext, etc can build better experiences over the top and give GitHub users more choice.
I still don't know why most programmers just accept the default here. GitHub made an IDE (Atom) but we don't all just use it because they said so. Why do most of us use their code review UI just because it's there?
Love the blog post, it's great to see people actually thinking about how code review should work!
I've used four different code review systems extensively, all with different strengths and weaknesses: Critique (Google internal), Gerrit (at Google, but same as external), GitHub (duh), and CodeApprove (the one I built).
Critique was far and away the best, but it only works because it's perfectly fit to Google's monorepo and the custom VCS they've built as well as all of their custom lint/test tooling. I designed CodeApprove to bring as much of that as I could to GitHub, but it will never really be close.
Gerrit was the second best in terms of the reviewer experience ... but as an author I always hated it. It just seemed to be so author-hostile. There were more wrong ways to do something than right ways. And the UI is not exactly beautiful.
GitHub is extremely author friendly, it works how we think. You write code, you get feedback, you write more code, etc. If you squash and merge at the end of a PR you don't have the history problems the author mentioned. It's not very reviewer or team friendly though. Incremental diffs are not highlighted. Diffs and conversation are in different tabs. Force pushes and rebases destroy history. Comments are lost as "outdated". You can't comment on files outside the diff window. Large files are hidden by default, etc etc. They clearly don't care about this too much and maybe they know something I don't.
In the end, the thing I find most frustrating is how many teams just accept whatever code review tool is built in to their VCS platform. That would be like using whatever IDE shipped with your laptop! There are so many better options out there today. My favorites (besides CodeApprove) are GitContext, Reviewable, and Graphite but I can name half a dozen other excellent choices. Don't accept the defaults!
This is 100% true. For some reason GitHub has put very little love into code review even though the Pull Request is probably their most important flow.
The good news is that many people have built better code review interfaces on top of GitHub. My favorites:
- CodeApprove (I created it, so yeah I like it)
- Graphite
- Reviewable
- GitContext
Check them out! You’d be surprised how much better they are and how quick they are to set up.
Not affiliated with the project but you could use something like OpenRouter to give users a massive list of models to choose from with fairly minimal effort
Thanks, I need to spend some time digging into OpenRouter. The main requirement would be reliable function calling and JSON, since Plandex relies heavily on that. I'm also expecting to need some model-specific prompts, considering how much prompt iteration was needed to get things behaving how I wanted on OpenAI.
I've also looked at Together (https://www.together.ai/) for this purpose. Can anyone speak to the differences between OpenRouter and Together?
I can't speak to the differences of Openrouter to Together but the Openrouter endpoint should work as a drop-in replacement for OpenAI api calls after replacing the endpoint url and the value of $OPENAI_API_KEY. The model names may differ to other apis but everything else should work the same.
It’s built in Vue. My first 5 or 6 attempts at writing the diff viewer were very slow when things got big. I optimized this a lot and now I’m pretty proud of how snappy it is.
I’m not saying this as a plug (this is mostly a passion project not a big business) but to say that it’s possible to make a snappy GitHub PR UI using a frontend framework on top of GitHub’s own APIs. You just have to care. It’s not clear that they care.