Keyboard shortcuts

Shortcuts stay out of the way while you type in a field.

Everywhere

Jump to the address bar
/
Show keyboard shortcuts
?

Repository

Go to a file in the repository
t

Commit scrubber

Scrub to the previous commit
[
Scrub to the next commit
]

Pull request

Open a panel section
12345
Show or hide the panel
i
Refresh the pull request
r
Close the sheet or dismiss the composer
Esc

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.

https://+ygithub.com/microsoft/TypeScript/pull/51387

Private project. Sign in with an allowed GitHub account and every link above works.

“Convert the codebase to modules”, 656 files, open in YGitHub: file tree, commit scrubber and the first hunk on one screen.
microsoft/TypeScript/pull/51387 · 656 files, 36 commits, rendered here.

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.

  1. 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?
  2. Whydoes the file tree arrive after the files?
  3. Whydoes scrolling a large diff feel like the browser is thinking about it?
  4. Whydoes every tab switch cost a full round trip for data that was on screen a second ago?
  5. 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.

Opening a 656-file pull request

TypeScript’s “Convert the codebase to modules”, from link to first hunk, with the file tree already there.

first hunk in 0.59 s here · 3.02 s on github.com

Scrubbing through 36 commits

Press ] and [ to step through the commits; each one is a diff. github.com has no scrubber: every commit is its own page.

first commit’s diff in 0.32 s here · 1.38 s on github.com

Searching from the address bar

Press /, type, Enter. Here the result opens in place; on github.com it is a results page and one more click.

repository page in 0.23 s here · 1.75 s on github.com

Browsing a repository

microsoft/TypeScript: into tsc, internal, compiler, open program.go, then its history. Five clicks, no page loads.

first directory in 0.02 s here · 0.47 s on github.com

Working a pull request

From the list into a pull request, then Files, Activity, Files again. Here the diff and the conversation share one screen and the tabs swap the side panel; on github.com each tab is its own page.

pull request in 0.39 s here · 0.66 s on github.com

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