first/fork

01  ·  match

Find the issuethat fits you.Then ship it.

FirstFork scores real GitHub issues on six signals against your languages and level, then walks you through the pull request one copy-pasteable command at a time.

See the scoring
6
scoring signals
8
guided steps
0
GitHub calls per view

Read-only OAuth. We never ask for write access to your repos.

  • TypeScript
  • JavaScript
  • Python
  • Go
  • Rust
  • OpenJDK
  • C++
  • Ruby
  • PHP
  • Swift
  • Kotlin
  • Dart
  • Elixir
  • Scala
  • Haskell
  • Lua
  • Solidity
  • TypeScript
  • JavaScript
  • Python
  • Go
  • Rust
  • OpenJDK
  • C++
  • Ruby
  • PHP
  • Swift
  • Kotlin
  • Dart
  • Elixir
  • Scala
  • Haskell
  • Lua
  • Solidity
  • React
  • Next.js
  • Vue.js
  • Svelte
  • Angular
  • Node.js
  • Deno
  • Bun
  • Django
  • Flask
  • FastAPI
  • PyTorch
  • TensorFlow
  • Docker
  • Kubernetes
  • Terraform
  • PostgreSQL
  • MongoDB
  • Tailwind CSS
  • Vite
  • React
  • Next.js
  • Vue.js
  • Svelte
  • Angular
  • Node.js
  • Deno
  • Bun
  • Django
  • Flask
  • FastAPI
  • PyTorch
  • TensorFlow
  • Docker
  • Kubernetes
  • Terraform
  • PostgreSQL
  • MongoDB
  • Tailwind CSS
  • Vite

the story

Two ways this goes.

Every first contribution starts in a search box. This is the difference between doing that alone and doing it here.

The usual way

Tab 47 of “good first issue”…
Closed in 2021.
Already claimed.
Not actually easy.
  • GitHub search
  • Reddit
  • Discord
  • X
  • Google
  • Stack Overflow
  • YouTube
  • dev.to

Thousands of issues.
But you still have to find the one that fits.

The FirstFork way

Just your profile.
ONE PROFILE

FIRSTFORK

Scores. Maps. Introduces.
Guides. Keeps it fresh.

  • Match scorescores it
  • Deep Divemaps the repo
  • Mentorfinds who to ask
  • Skill graphreads your history
  • Guidewalks the PR
  • Fetcherkeeps it fresh

SIX SPECIALISTS ON EVERY MATCH
Score. Map. Introduce. Read. Guide. Refresh.

scoring

Six signals. One number you can argue with.

Every factor is normalised to 0–1 and combined with a fixed weight. The weights sum to one, so a card's score reads directly as a percentage, and the breakdown is shown on every card. Nothing is filtered out silently.
26
18
18
15
13
10
  1. Language

    ×0.26

    Exact match to what you write. Adjacent languages get partial credit.

  2. Difficulty

    ×0.18

    Labels mapped to your level. Never a filter, only a reorder.

  3. Repo health

    ×0.18

    A push in the last 30 days beats a dead repo with 40k stars.

  4. Unclaimed

    ×0.15

    Quiet threads rank first. Twenty comments is a queue.

  5. Freshness

    ×0.13

    Opened this week is ideal. Two years old is stale, not hidden.

  6. Welcoming

    ×0.10

    CONTRIBUTING.md and a code of conduct mean they expect you.

what you get

Built for the first pull request, not the fiftieth.

The parts that trip people up are not the code. They are the forty minutes of setup and etiquette around it. Those are handled.
language100
repo health92
freshness100
unclaimed80
difficulty100
welcoming100

Scored, not scraped

Every card carries its six-factor breakdown. If an issue ranks above another, you can see exactly why.

$ git clone$ git checkout -b$ git commit$ git push -u

Copy-paste ready

Clone, branch, commit and PR commands filled in with the repo and issue you picked.

Reads only

The OAuth app asks for read:user and user:email. Nothing that can touch your repos.

Fresh every hour

A background job refreshes the index on a schedule. Your feed never waits on GitHub.

Hacktoberfest aware

Flip one flag and hacktoberfest-labelled issues get indexed faster and badged in the feed.

TypeScriptadvanced · from 41 commits, 3 PRs
Pythonintermediate · from 41 commits, 3 PRs
Gobeginner · from 41 commits, 3 PRs

A skill graph from your real commits

Not what you tick in a form. Your public repos, commit history and merged PRs, read and rated per language, so the ranking reflects what you have actually shipped.

tm

ask @tentoumushii

22 comments in 60 days, active today, welcomes first-timers

ranked from real activity · not the repo owner

The best person to ask, per issue

Who is answering on that repo right now, from the last 60 days of comments and reviews. Often not the owner. Named on the card, so you never post into a void.

A Deep Dive into the repo before you clone it

The whole codebase as an isometric map, a 3D architecture graph stacked from entry points down to data, and a drawn path from the issue to the files it touches. Every block clickable, every step explained in plain words.

guide

Then it teaches you the rest.

Finding an issue is not what stops first-timers. It is the eight steps after. Save one and you get this checklist filled in with that repo's clone URL, that issue's number, and a branch name you can paste straight into your terminal.
~/excalidraw — first contribution
$
  1. 01

    Fork the repo

    Make your own copy on GitHub.

    Press Fork on github.com/excalidraw/excalidraw
  2. 02

    Clone it locally

    Pull your fork down to your machine.

    $git clone https://github.com/you/excalidraw.git
  3. 03

    Read CONTRIBUTING.md

    Every project has house rules. Skim them first.

    Setup, tests and commit style, pulled from CONTRIBUTING.md
  4. 04

    Create a branch

    Never work on main. Branch per issue.

    $git checkout -b fix/8412-announce-duplicate
  5. 05

    Make your change

    The actual work. Small and focused wins.

    Small diff. Run the tests before you push.
  6. 06

    Commit with a good message

    Explain the why, not just the what.

    $git commit -m "fix: announce duplicate to screen readers"
  7. 07

    Push and open a PR

    Send it, with a description reviewers can act on.

    $git push -u origin fix/8412-announce-duplicate
  8. 08

    Respond to review

    Feedback is normal. Here is how to handle it.

    Push follow-ups to the same branch. Reply to every comment.
Open to contributionsMIT licensed  ·  issues labelled for newcomers

This site is one of those repositories.
Build something here.

FirstFork is open source and actively looking for people to work on it. It is a reasonable place to make a first contribution, because making that easy is the entire point of the project.

No permission needed
Pick an open issue, or send a pull request for something nobody has raised. There is no proposal to clear first.
Any feature is fair game
If it fits the project and the code is sound, it gets merged. If it does not fit, you get a reason rather than silence.
One command to run it
npm run demo starts the whole app on seeded data. No database to provision, no keys, no accounts.
MIT, and drafts welcome
Open a draft early and ask. A half-working branch with a question attached is a perfectly good thing to send.

06  ·  start

Your first pull request
is already picked out.

what is a pull request?