Linear
Open issues assigned to you, ordered by recency and tagged with state and priority. Connect once, see your queue ten times a day.
Linear issues assigned to you (or created by you), one row each, with the state colour-coded and the priority surfaced inline. Filters get sharp: scope to a team, raise the priority floor, or pick exactly which status types you want to see.
- Onboarding tour skips empty workspacesENG-218 · In Progress
- Webhook retries on 5xxENG-211 · Todo
- Reply previews on Slack notificationsENG-209 · In Progress
- Avatar caching passENG-204 · In Review
- Sticky filter bar on long listsENG-198 · Todo
- Keyboard nav for the command menuENG-192 · In Progress
Connect Linear
Drop the widget in and click Connect Linear. We send you
to Linear's OAuth flow in a new tab; you approve the
read scope; you come back signed in. As with GitHub, a
butter-operated worker brokers the handshake so you don't have to
register your own Linear OAuth app.
Where the token lives: the worker hands the access token to your browser
after exchange and keeps no record of it. From there it sits in
chrome.storage.local on your device, and every GraphQL call
goes directly from your browser to api.linear.app.
To disconnect, revoke from Linear's security settings. The widget will catch the next 401 and surface a Reconnect pill in the card header.
Add it to your dashboard
Press E , then A , and pick Linear. Default size is eight wide, four tall — comfortable for six or seven issues before scrolling. Drop it next to the GitHub widget for the standard "what's on my plate" pair.
How priorities and statuses render
- State dot. The coloured circle to the left of each issue is the state colour Linear configures for that workflow state. So a green dot is your team's Done green, a blue dot is your team's In review blue, etc. Hover for the state name.
- Priority chips. Urgent renders red with the alert octagon, High renders orange with an up-arrow, Medium is muted, Low is fainter still. Priority None is silent — no chip, no noise.
- Identifier prefix. Every row shows the issue
identifier (
ENG-1234) before the title, in subtle text — easy to copy-paste into a PR description or a Slack message.
Settings
| Setting | Type | Default |
|---|---|---|
| Filter Assigned to me shows open issues that have you as the assignee. Created by me shows the issues you opened, regardless of who they're on now. | Assigned · Created | Assigned to me |
| Issues to show Cap on the number of issues fetched per refresh, between 3 and 30. Set low for a focused queue, high for a sweeping overview. | integer | 10 |
| Priority Linear priorities are 0 None, 1 Urgent, 2 High, 3 Medium, 4 Low. The dropdown lets you raise the floor — pick "Urgent + High" when you only want to see the urgent stuff today. | Any · Urgent · Urgent+High · Urgent/High/Medium · All except None | Any priority |
| Status types Triage, Backlog, Todo, In progress — toggle on the status buckets you want. None checked means show all of them. Completed and Canceled are always excluded server-side. | multi-toggle | none (= all) |
| Teams A whitelist of team prefixes like | comma-separated team keys | empty |
Small things you might miss
- Completed and canceled never appear. Even if you don't filter status types, Linear's Completed and Canceled states are excluded server-side. The widget only shows things still worth your attention.
- Empty queue celebrates the right thing. If your filtered list comes back empty, the widget says All caught up with a green check — even if "caught up" only means "no Urgents at this exact moment."
- Team keys are uppercased automatically. Type
eng, desand the widget normalises toENG, DES. No need to remember Linear's convention. - Two widgets, two views. Drop a second Linear and set different filters — one for Urgent across all teams, one for everything-in-progress in ENG. They share the same cache by parameters, so it's the same data, just two windows.
Heads up
- Linear OAuth needs an actor scope. butter requests the scopes it needs to read issues assigned to your user; nothing that can write or comment. If you ever see a scope you don't expect on the consent screen, don't approve — open an issue.
- GraphQL responses are cached for five minutes.
The widget will read from
chrome.storage.localwithin that window. Click the refresh icon on the card to force a fresh fetch any time. - Rate limits show as themselves. If Linear rate-limits the request, the widget shows an amber banner with the retry interval — distinct from a generic failure or a token problem.