Find open-source issues you can actually take.
Project activity, maintainer reply times, claims and linked pull requests â right on GitHub.
đ contri-two.vercel.app · Install · Features · How the numbers work · Code walkthrough · Contributing · Launch kit
![]() Is it alive? |
![]() Will someone reply? |
Starting in open source is mostly guesswork: is the project still maintained, will anyone review my PR, and is someone already working on that âgood first issueâ? CONTRI answers those three questions on the page you're already on, using public evidence it links to â no backend, no analytics, public repositories only.
| Where | What you see |
|---|---|
| Issue page | A badge beside the title: Looks free, Claimed by @sam, Claim went quiet, Open PR #12 or Assigned. Click for the evidence. |
| Repository page | A badge in the About box with merges in the last 90 days and the team's typical reply time. |
| Overview | Exact PRs merged in 90 days (common bots excluded), human authors, commits, weekly chart, median time to merge, latest release. |
| Team | Median and average first team reply for outside PRs and issues, who is still waiting, and the maintainer roster â found from GitHub team badges, who labels/assigns/merges, CODEOWNERS and the owner. |
| Issues | Beginner presets, âLooks freeâ filter, claim detection, linked-PR checks (a whole page at once when signed in). |
| On-device AI | âSummarize the threadâ and âHow do I start?â using Chrome's built-in Gemini Nano. Runs locally; nothing is uploaded. |
| Discover | Projects matched to the languages you use, ranked by recent human merges and open good-first-issues. |
| Saved & watched | A private shortlist with notes, side-by-side comparison, and watched issues that notify you when an issue is unassigned, gets a PR, goes quiet or closes. |
| Contribution brief | A source-linked prompt to paste into any AI chat when on-device AI is unavailable. |
CONTRI follows GitHub's light or dark appearance with the same teal glass look.
Add CONTRI to Chrome â one click, updates automatically. The same listing works in Edge (allow extensions from other stores when asked) and Brave.
For Firefox (experimental) or a manual install:
- Download
contri-v<version>.zip(not âSource codeâ) from the latest release and unzip it. - Open
chrome://extensions(oredge://extensions,brave://extensions) and turn on Developer mode. - Click Load unpacked and choose the unzipped folder.
- A welcome page opens. Sign in with GitHub (or skip and use anonymous mode).
Requires Node.js 24.
npm ci
npm run build # outputs dist/Then Load unpacked â dist. After pulling changes, rebuild, click Reload on the extension card and reload your GitHub tab.
Firefox (experimental): npm run package:firefox creates contri-v<version>-firefox.zip for about:debugging â Load Temporary Add-on. On-device AI is Chrome-only.
Anonymous mode works within GitHub's limit of 60 requests per hour. Signing in raises it to 5,000 and switches CONTRI to GitHub's GraphQL API, so most checks take one request instead of dozens.
- Sign in with GitHub uses the OAuth device flow with the CONTRI OAuth App: you get a short code, approve it on github.com, done. No password ever passes through CONTRI, and no scopes are requested (public, read-only access).
- Personal access token: Settings walks you through creating a fine-grained, read-only token for public repositories.
The sign-in is kept in memory until the browser closes unless you choose âStay signed inâ, which stores it encrypted (AES-GCM). Either way it lives where GitHub pages cannot read it and is only ever sent to api.github.com. If GitHub rejects it (expired or revoked), Settings asks you to reconnect.
Every build uses the CONTRI OAuth App (client ID in src/shared/config.ts; client IDs are public and the device flow has no secret). A fork that wants its own app:
- On GitHub: Settings â Developer settings â OAuth Apps â New OAuth App. Use your homepage as the callback URL (it is not used), tick Enable Device Flow, and leave Expire user access tokens off.
- Copy the Client ID and build with
VITE_GITHUB_CLIENT_ID=<your client id> npm run build(or put it in.env).
VITE_GITHUB_CLIENT_ID=none builds a version that offers only the token option.
| Action | Anonymous | Signed in |
|---|---|---|
| Overview | ~7 requests | 2 |
| Team analysis | ~25 requests | 2â3 |
| Issue check | ~3 requests | 1 |
| Page of 30 issues + PRs | 2 + 3 per issue | 2 |
Reports are cached (team: 6 hours, overview: 30 minutes, issue checks: 10 minutes). Partial reports are cached for a third of that so large repositories don't burn requests on every visit.
npm run dev # layout preview of the widget (no live data)
npm test # unit tests (fixtures, no network)
npm run test:e2e # installs dist/ into Chromium, drives it on a mock GitHub, runs axe accessibility checks
npm run lint # ESLint
npm run format # Prettier
npm run check # format check + lint + unit tests + build
npm run package # dist â contri-v<version>.zip (+ sha256)
npm run verify:package
CONTRI_CONTRAST=1 npx playwright test contrast # WCAG AA text contrast over the glass
CONTRI_PERF=1 npx playwright test perf # content-script cost on GitHub pagesFor test:e2e, run npm run build first and install the browser once with npx playwright install chromium.
The code is organized so contributors can work on one layer at a time:
src/core/ pure logic: metrics, maintainer roster, claim detection, verdicts (unit-tested)
src/background/ service worker: sign-in, request queue, caching, GitHub REST + GraphQL reports
src/content/ what runs on github.com: launcher, widget UI, badges, on-device AI
src/settings/ the Settings / welcome page
src/shared/ types and helpers shared by both sides
tests/unit/ Vitest
tests/e2e/ Playwright + mock GitHub
More detail in docs/ARCHITECTURE.md.
New to the codebase? DeepWiki has a browsable walkthrough of every part of CONTRI â the service worker, claim detection and verdicts, metrics and the maintainer roster, the widget, tests and release pipeline â and you can ask it questions about the code. It is generated automatically from this repository, so if it disagrees with the code or docs/, the code and docs/ win.
Every number links to its evidence. Unavailable data is shown as âââ, never as zero. Samples say how much they cover, and â„ marks a lower bound. A missing linked PR does not prove nobody is working on an issue, and CONTRI says so. Full definitions: docs/METRICS.md.
- Public evidence only. CONTRI sees what GitHub's public API shows. Work nobody linked or mentioned is invisible, so âLooks freeâ is a strong hint, not a guarantee.
- Samples on big projects. Charts, author counts and team reply times use the most recent items (up to 100 merged PRs, 20 PRs and issues per kind, the latest 100â300 comments of an issue). Every sampled number says so, and lower bounds are marked â„.
- Claim detection is a heuristic over English phrases such as âI'd like to work on thisâ,
/assignor âassign meâ. Other languages and unusual wording may be missed. - Maintainer detection uses GitHub's team badges, triage and merge activity, CODEOWNERS and the owner. Maintainers who never triage or merge in the sampled window may be missed.
- GitHub layout changes can move or hide the inline badges until CONTRI is updated. The panel keeps working.
- On-device AI needs a Chrome build with the built-in model; elsewhere CONTRI offers the copy-paste brief.
- Anonymous mode shares GitHub's limit of 60 requests per hour with anything else on your network.
| Symptom | What to do |
|---|---|
| No launcher or badge after installing or updating | Reload the GitHub tab. Tabs opened before an install or update don't have the new content script yet. |
| âGitHub request limit reachedâ | Wait until the time shown, or sign in (5,000 requests per hour). |
| âYour GitHub sign-in expired or was revokedâ | Settings â Sign out, then sign in again or paste a new token. |
| âNot found on GitHubâ | The repository is private, renamed or deleted. CONTRI only reads public repositories. |
| A badge is missing on an issue page | GitHub may have changed its layout. The panel still works; please open an issue. |
| Numbers look stale | Use â» in the panel to refresh, or Settings â Clear cached reports. |
| âSign in with GitHubâ is missing | The build was made with VITE_GITHUB_CLIENT_ID=none. Use a token, or the official release. |
Issues and pull requests are welcome â especially for accessibility, metric accuracy, GitHub layout changes that break badges, and translations. Start with CONTRIBUTING.md. Good first issues are labeled good first issue (CONTRI will tell you whether they're free).
Does CONTRI send my data anywhere?
Only to GitHub's API, to read public repository data. There is no CONTRI server and no analytics. On-device AI runs inside Chrome. See PRIVACY.md.
Does âLooks freeâ guarantee nobody is working on an issue?
No. It means CONTRI found no assignee, no recent claim and no linked open pull request. Someone may be working without saying so â always comment before you start.
Why does the team tab say ânot enough evidenceâ?
Timings need at least three answered items in the sample. Small or quiet projects often don't have that many recent outside contributions, and CONTRI won't guess.
Does it work on private repositories?
No, by design. CONTRI is for joining public open-source projects.
Which browsers are supported?
Chrome, Edge, Brave and other Chromium browsers (version 124+). Firefox 128+ is experimental. On-device AI needs a Chrome build with built-in AI.
- Issue availability badges with claim detection
- Maintainer roster beyond GitHub's team badge
- Sign in with GitHub (device flow) and GraphQL reports
- On-device AI summaries
- Watched issues with notifications
- Chrome Web Store listing
- Badges on GitHub's issue list and search results
- Translations
- Maintainer view: who is waiting longest for a reply
Have an idea? Open a feature request.
If CONTRI helped you find your first contribution, a â helps other newcomers find it too.
MIT © Safal Gupta. See LICENSE and THIRD_PARTY_NOTICES.md.



