How to contribute to open source frontend projects and get your first pull request merged
Most first pull requests stall for reasons written down in a file the author never opened. Here is how to read that file, size the change to it, and judge the silence that follows.
How do you contribute to open source frontend projects and get merged?#
Pick a library you already use, treat its contributing guide as the acceptance criteria, and send one small change with a reproduction and a test plan. Each of those three parts maps to a line a maintainer wrote. For example, Svelte's contributing guide, read in October 2026, says "Small pull requests are much easier to review" and more likely to get merged. Also, Vue's contributing guide wants a fix where "the bug has a proper reproduction either from a related open issue, or is included in the PR itself".
Pick a library you already use
You can only tell a real bug from expected behaviour in software you run.
Treat its contributing guide as the acceptance criteria
Each guide states its own terms, so read the one for the project you picked.
Send one small change with a reproduction and a test plan
Svelte's guide says small pull requests are much easier to review.
In short, the git commands are the easy part. The hard part is choosing a change the project wants, then making it easy to check.
What is a merged upstream fix worth to you and your team?#
A fix merged upstream ships in the library's next release, so your team deletes its local workaround instead of carrying a patch through every upgrade. React's contributing guide says "We should be able to release a new minor version from the tip of main at any time". So a merged fix is never far from a release your app can install.
The same holds for products, not only libraries. For example, the GitLab frontend guide explains how its Vue.js frontend sits on top of Ruby on Rails. As a result, someone who uses GitLab daily can find the component behind a bug and send the fix. When you report the work upward, the outcome is plain: one workaround removed, and one fewer patch to rebase.
Which project and which first contribution should you pick?#
Start with a library already in your package.json, and make the first change a documentation fix, a reproduction or a test before a feature. You can only tell a real bug from expected behaviour in software you run. Quansight Labs argued in March 2026 that "If you contribute to a project you already use and are familiar with, you will get more out of it."
Labels still help once you have chosen. GitHub's label docs describe the good first issue label, which GitHub uses to surface approachable issues. Also, MDN Web Docs, updated 12 September 2026, lists good first issues on a contributors task board. Finally, the Open Source Guides note that you do not have to contribute code at all.
What do React, Vue, Svelte, MDN and GitLab ask for before they merge?#
Each guide states its own terms: React asks for a signed CLA, Vue asks you to tick allow edits from maintainers, and Svelte asks for a test plan. However, the details differ enough that one checklist cannot serve every project. Here is what each guide puts in writing.
| Project | What the guide asks for | Before a big change |
|---|---|---|
| React | A reduced test case, passing yarn test, yarn lint, a signed Contributor License Agreement | Claim an issue; a claim idle over two weeks may be taken over |
| Vue | A clearly identified bug with a reproduction, a test, "Allow edits from maintainers" ticked | An RFC for any non-trivial API addition |
| Svelte | One thing per pull request, a test plan, pnpm lint and pnpm test passing | An RFC for a large new feature |
| MDN Web Docs | A GitHub account, a comment on the issue you pick | Ask questions on the issue |
| GitLab | A tested change that does not lower stability, even as a small first step | Follow the frontend guide's architecture |
Source: the React, Vue, Svelte, MDN Web Docs and GitLab contributing guides, read 6 October 2026.
Since the terms differ, read the guide of the project you picked. A summary of all five is no substitute.
How do you turn a frontend bug into a reproduction a maintainer can run?#
Cut the bug down to the smallest component and the fewest steps that still fail, because React calls a reduced test case the best way to get a bug fixed. In its words, "The best way to get your bug fixed is to provide a reduced test case." So remove your router, your store and your design system one at a time. Then stop when removing one more thing makes the bug go away.
Remove your router
Check the bug still fails without it.
Remove your store
Check again.
Remove your design system
Check again.
Stop
Stop when removing one more thing makes the bug go away. What is left is the reproduction.
What is left is the reproduction. Svelte's guide asks for steps anyone can "follow these steps to reproduce your issue with minimal effort", and it suggests the REPL. Meanwhile, Vue's guide prefers a live demo. In practice, ten lines of markup in the project's playground beat a link to your private app. If isolating the component is the hard part, a Storybook story is a good bench to cut it down on.
Which pages do you work from, and in what order?#
Work from three pages in order: the GitHub flow for the fork and branch, the project's own CONTRIBUTING file for setup and tests, then the changeset guide.
- GitHub's contributing to a project guide: the fork, clone, branch, commit, push and pull request steps.
- Svelte's CONTRIBUTING file:
pnpm install, one test suite withpnpm test, and what a test plan holds. - The Changesets guide to adding a changeset: what a changeset records, and the
pnpm changesetprompt.
Swap step two for your own project's file. The order stays the same, because setup and tests come from the project and nowhere else.
What does the smallest contribution look like as commands?#
One contribution is a short loop of commands: clone your fork, branch, install, run the failing test, fix it, add a changeset, commit and push. Here it is against a Svelte fork, after you click Fork on GitHub.
# 1. Clone your fork and create a branch (GitHub docs)
git clone https://github.com/YOUR-USERNAME/svelte
cd svelte
git branch fix-a11y-alt-text
git checkout fix-a11y-alt-text
# 2. Install and run one test suite (Svelte CONTRIBUTING)
pnpm install
pnpm test validator -t a11y-alt-text
# 3. After the fix, record the change for the changelog (Changesets docs)
pnpm changeset
# 4. Commit and push the branch to your fork
git add .
git commit -m "fix: report missing alt text on images with spread props"
git push -u origin fix-a11y-alt-text
# 5. On GitHub, use the banner on your fork to open the pull request Then paste the test command and its output into the description. That is your test plan.
How small should the pull request be, and what goes in its description?#
Keep one change per pull request with a test plan, because 52.62% of pull requests in one study closed within a day of their first response (Hasan et al., arXiv, accessed October 2026). So a small change is one a maintainer can review and finish in one sitting.
Show data table
| Item | Value |
|---|---|
| closed within one day of the first response | 52.62 |
| closed within one week of the first response | 76.96 |
| took more than one week after the first response | 23.04 |
Once someone replies, most pull requests close within a day.
The description answers review questions before they are asked. Svelte's guide says "A good test plan has the exact commands you ran and their output". It also wants screenshots or video when the UI changes. Then Vue's guide asks you to tick "Allow edits from maintainers", so a reviewer can fix a typo instead of asking you to. Also, Vue wants the fix only, with no unrelated refactors. Finally, the naming and lint habits of clean JavaScript practice make the diff quicker to read.
How long does a pull request usually wait for a first response?#
Across 111,094 closed GitHub pull requests, 80.16% got a first response within a day and 93.01% within a week (Hasan et al., arXiv, accessed October 2026). The same April 2023 study found 68.36% heard back within an 8-hour workday.
Show data table
| Stage | Value |
|---|---|
| within an 8-hour workday | 68.36 |
| within one day | 80.16 |
| within one week | 93.01 |
Most pull requests hear back within a day, and nearly all within a week.
However, read "response" with care. The April 2023 study found that bots often post the first reply. In its sample of very fast replies, 35 of 50 came from a bot. A CLA check or a changeset bot is not a review. Still, the April 2023 study found that less complex pull requests heard from a person sooner.
When is it fair to follow up on a quiet pull request?#
Follow up once your pull request is in the small share still waiting, which by arithmetic from the same study is 19.84% after one day and 6.99% after one week. Each share is what remains once you take away the cumulative shares in Hasan and colleagues' April 2023 arXiv study.
Say you open a Vue fix at 10:00 and hear nothing by 18:00. In that April 2023 study, you are among the 31.64% still waiting after an 8-hour workday, which is common. By the end of the next day the share is 19.84%, and after a week it is 6.99%. So a short, polite comment is fair after a week, and not before a day.
A normal wait
31.64%
of closed GitHub pull requests still waiting for a first response after an 8-hour workday
Your pull request has been open for 8 hours
Most pull requests hear back within a day. Keep working; a follow-up now is too early.
Arithmetic from Hasan et al., arXiv, 17 April 2023: 100 minus the cumulative share with a first response. Modelled, not measured.
When is an upstream pull request the wrong fit?#
An upstream pull request is the wrong fit when the change adds API surface nobody has discussed, or when the project has not answered anyone in a month. For example, Vue's guide sends any non-trivial API addition to its RFC repository first. Likewise, Svelte asks for an RFC before a large new feature. For those, open the discussion and wait for agreement before you write code.
Show data table
| Item | Value |
|---|---|
| first response after one week to one month | 4.38 |
| first response after more than one month | 2.61 |
Only a small tail of pull requests waits a week or more for any reply.
A quiet repository is the second case. In the April 2023 arXiv study, 2.61% of pull requests waited over a month for any reply. If a project's recent pull requests all sit in that tail, keep the fix as a local patch. Then send it later if the project wakes up. Also, a change that only your app needs belongs in your app, not upstream.
Where do you go from your first merged pull request?#
After the first merge, take the next issue in the same project, where you already know the setup, the tests and the people who review. The April 2023 arXiv study found newcomers who got a human reply within a day were more likely to contribute again.
- Next
The next issue in the same project
You already know the setup, the tests and the people who review.
- Then
Branch and commit habits
The post on Git branching and GitFlow covers them.
- After
Read a component's API before you change it
The guide to building scalable UI components shows how.
For the next skills, the post on Git branching and GitFlow covers branch and commit habits. Then the guide to building scalable UI components shows how to read a component's API before you change it. If your team would rather have someone do this work, see hiring frontend developers or hiring React developers. Otherwise, the contributing guide of the project you picked is all you need to start.