ygithubis github.com, plus one letter.
Why,GitHub?
Same repositories, same pull requests, same diffs. Rendered by a viewer that keeps up with you instead of asking you to wait for it.
Private project. Sign in with an allowed GitHub account and every link above works.
An open letter, from one letter over
Dear GitHub,
I put a “y” in front of your domain because your web UI made me ask “why” so often that it turned into a hostname.
- Whydoes a pull request with forty files need a spinner, three layout shifts and a “Load diff” button before I can read the first line?
- Whydoes the file tree arrive after the files?
- Whydoes scrolling a large diff feel like the browser is thinking about it?
- Whydoes every tab switch cost a full round trip for data that was on screen a second ago?
- Whydoes the same page ask me the same question every morning, “Do you want to load this diff?” Yes. That is why I clicked.
You run the biggest code host on the planet on top of an API that is genuinely good. It streams, it caches, it tells me exactly what changed and when. The web UI sitting on that API behaves like the two have never met.
So I built this. One person, evenings, a viewer that virtualizes diffs, preloads the next thing I am about to click and never reloads a page to show me a tab. It is not better at everything. It is not trying to be. It is trying to render a diff before I lose the thought I opened it with.
Do whatever you want with this letter. Ignore it, which is the usual outcome. Send lawyers, which would at least count as a reply. Take it to heart and ship a pull request page that keeps up, which would make this project pointless in the best possible way. Or hire the person who got this annoyed, which is the funniest option and my personal favorite.
Until then: github.com, plus one letter.
— one annoyed developer, and the whole reason this site exists
Measured, not claimed
Same pull request, two addresses.
Both sides opened “Convert the codebase to modules” the same way on 2026-09-16: headless Chrome on a CI runner in Germany, signed in, five opens per mode twenty seconds apart, medians, microsoft/TypeScript/pull/51387/files. The last table is this page, in your browser, right now.
github.com
first hunk on screen, cold, recorded
4.33 s
ygithub.com
same pull request, same method
0.72 s
github.comrecorded
coldwarm
- First byte
- 3.12 s2.63 s
- First hunk on screen
- 4.33 s3.35 s
- File tree on screen
- 3.74 s3.22 s
- Load event
- 4.55 s3.94 s
- Requests
- 271331
- Transferred
- 3.5 MB467 KB
ygithub.comrecorded
coldwarm
- First byte
- 0.02 s0.04 s
- First hunk on screen
- 0.72 s0.70 s
- File tree on screen
- 0.72 s0.70 s
- Load event
- 0.28 s0.30 s
- Requests
- 4848
- Transferred
- 4.1 MB4.1 MB
this pageyour browser · this load
now
- First byte
- Interactive
- Fully loaded
- Requests
- Transferred
Yes, ygithub.com moves more bytes: it streams the whole diff at once, so scrolling never waits. github.com loads it piece by piece as you go, and asks first.
Five tasks, recorded twice, no cuts
Watch it keep up.
Hover a recording to play it; on phones, swipe. Every task was also recorded on github.com: same account, same browser, same day, the cursor resting on each link for half a second before the click, both servers warm. Take the letter away to see it.
Switch GitHub off yourself. Open a repository, then pick “Switch GitHub off” in the account menu. Every page you have opened stays readable, each marked with how old it is; writes wait until you switch it back on.
Open microsoft/TypeScript