GitHub — butter docs Skip to content
Widgets / Your work

GitHub

Every pull request waiting on your review — across every repo — without leaving the new tab. OAuth-connected, rate-limit-aware, and built around the question you care about: what wants me next?

Open PRs assigned to you, the ones you authored, or the ones mentioning you — your choice. Each row shows the title, repo, author, and an age stamp; click through opens the PR in a new tab. Connect once via OAuth, see your queue ten times a day.

Free Requires GitHub OAuth 5-minute cache
GitHub PRs
  • #412
    Migrate billing to the new pricing table
    acme/web · mira · 12m
  • #408
    Draft Empty-state polish on the dashboard
    acme/web · tom · 2h
  • #127
    Cache invalidation on workspace rename
    acme/api · jr · 1d
  • #401
    Drop the legacy upload flow
    acme/web · mira · 3d
  • #119
    Token refresh edge cases on Linear
    acme/api · sam · 4d
  • #395
    Drag handle hit-target on mobile
    acme/web · tom · 5d

Connect GitHub

Drop the widget in and you'll see a Connect GitHub button. Click it once — butter walks you through GitHub's OAuth flow in a new tab, and you're done. You don't need to register your own GitHub OAuth app; a small butter-operated worker holds the client secret so you don't have to.

Where the token lives: the worker brokers the handshake, then hands the access token to your browser and forgets it — no persistent storage on our side. From there the token sits in chrome.storage.local on your device, and every API call goes directly from your browser to api.github.com. We don't see what you fetch.

To disconnect, revoke the integration from your GitHub settings — the widget will catch the next 401 and show a Reconnect pill at the top of the card instead of a generic error.

Add it to your dashboard

Press E to enter edit mode, A to add, pick GitHub. It drops in at eight-wide, four-tall — enough width for medium-length PR titles to read on one line, and enough height for six or seven items before scrolling. Make it bigger if you have a long queue; smaller if you only care about the top three.

How the data flows

  • Search API. Filters compile to GitHub's search-issues endpoint — is:pr is:open review-requested:@me for the review-requested case, parallel queries for the other filters. Repo allow-lists translate to repo:owner/name qualifiers.
  • 5-minute cache. The response is cached locally for five minutes per filter + parameters combination, keyed in chrome.storage.local. Within five minutes you're reading from cache; after, the next render fetches fresh. Click the refresh icon on the card to force a re-fetch any time.
  • Rate limits show as themselves. If GitHub rate-limits you (rare — the search API allows thirty calls per minute per token), the widget shows an amber "GitHub rate-limited us — try again in ~Nm" banner instead of a generic failure.

Settings

Setting Type Default
Filter

Review requested shows PRs where you're explicitly on the reviewer list — the default. Authored lists your own open PRs. Mentions shows PRs that @-mention you in the description or a comment. Pick the one that matches what "your inbox" means today.

Review requested · Authored · Mentions Review requested
PRs to show

Hard-caps the list at the count you set, between 3 and 30. Tuned to keep the widget scrollable but not endless.

integer 10
Include drafts

Off hides PRs marked as draft. Drafts get a small Draft chip on the title row when shown, so you can scan past them without disabling the toggle.

toggle on
Updated within (days)

Zero means no age filter. Set to e.g. 14 to drop anything that hasn't been touched in the last two weeks — useful when stale PRs are clogging your queue.

integer 0
Only these repos

An allow-list of repositories. Empty means any repo your account can see. Useful when a single team's monorepo is drowning the rest of your queue — pin it to the few repos you actually care about.

one owner/repo per line empty

Small things you might miss

  • Title row uses the author's avatar. Each PR row shows a small avatar on the left — easier to scan when several PRs share similar titles. The avatar fetches lazily, so the list paints before the images arrive.
  • Empty queue is celebrated. When nothing is waiting on you under the current filter, the widget shows an Inbox zero message tailored to the filter you're on. Small thing, makes the widget feel honest.
  • Repo allow-list is liberal during typing. The textarea lets you type partial entries like vercel without disappearing them — the fetcher silently ignores malformed lines at query time, so you can paste a long list and clean it up after.
  • Several widgets, several filters. Drop two GitHub widgets and set one to Review requested and the other to Authored if you want both views on screen at once. Same account, two queries, no conflict.

Heads up

  • Token revocation is detected, not predicted. If you revoke the GitHub integration mid-session, the widget will keep showing cached PRs until the next fetch attempt — at which point it'll catch the 401 and switch to the Reconnect state.
  • The widget only sees what your token can. If a repo is private and your account has access, it shows up; otherwise GitHub's search API won't return it. The allow-list is a filter on top, not a permission boost.
  • OAuth flow opens a new tab. First-time connect runs through a tab so the redirect can complete properly under Manifest V3. If your popup blocker swallows it, click the connect button again — it uses tabs.create, not a popup window.