You have a GitHub account, a free evening, and no idea which open issue is safe to touch. Pick badly and you spend an hour on a task someone else already claimed. Pick well and you end up with a reviewed pull request, which is the real goal of a first Hacktoberfest.
This plan takes you from "I want to take part" to one well-formed pull request. Budget about an hour to shortlist three issues, then more time for the fix itself.
Step 1: Check the official rules first
Before you search, open the official Hacktoberfest site and read the current dates, eligibility requirements and spam rules. The DEV post announcing this year's challenges does not state any of those details. Rules may also change from year to year, so don't rely on a blog post, including this one.
A pull request that ignores the rules may not count, and a maintainer may close it as spam. Ten minutes of reading now prevents that.
Step 2: Search GitHub for issues you can take
You need a GitHub account and a browser. Paste the queries below into the search bar at github.com/issues, or into the issues search of any repository. These are unexecuted examples. Label names vary by project, so check GitHub's search documentation if a qualifier behaves oddly.
## UNEXECUTED examples. Dependency: a GitHub account (signed in).
is:issue is:open label:"good first issue" no:assignee archived:false
is:issue is:open label:"help wanted" no:assignee archived:false
is:issue is:open label:"good first issue" no:assignee -linked:pr language:python
is:issue is:open label:"good first issue" label:hacktoberfest no:assignee
is:issue is:open label:"good first issue" no:assignee sort:updated-desc
Swap language:python for the language you know best. Add comments:<5 to skip long debates. Not every project uses the same labels, so also try "beginner", "documentation" or "easy" in the label field.
The no:assignee and -linked:pr qualifiers do the heavy lifting. They filter out issues that someone has already claimed or already addressed in an open pull request. Still read the comments, because people often claim an issue in a comment without being formally assigned.
Step 3: Vet each issue before you commit
Open your top five results in tabs. Run each one through this checklist, then keep the three that score highest.
- Recent activity. Look for commits, merged pull requests or issue comments from the last few weeks. A repo that went quiet a year ago will not review your work.
- Maintainer replies. Scan a handful of recent issues and pull requests. If maintainers answer outsiders within days, the project is healthy. If every outside pull request sits unanswered, move on.
- A CONTRIBUTING file. Check the repo root, the
.githubfolder and the README. A project that documents how to contribute is signaling that it wants outside help. - No existing linked PR. Check the issue's sidebar and timeline for linked pull requests. Read the comments for "I'm working on this".
- A clear scope. You should be able to describe the change in one sentence. If the issue says "improve performance" with no detail, skip it.
- A test or verification path. You need a way to prove your change works, such as an existing test suite, a build command, or a rendered docs page you can inspect.
Scoring is a judgment call, not a rule. As a rough guide, an issue that passes four of six checks in a responsive repo is usually a better bet than one that passes five in a silent repo. We cover related ground in see also: build a python seo audit script: step-by-step guide.
Step 4: Claim the issue politely
Pick one issue and leave a short comment, such as: "Hi, I'd like to work on this. I plan to [one-sentence approach]. Is it still available?" If the contributing guide asks you to wait for assignment, wait. Jumping ahead is a quick way to get a pull request closed.
If nobody answers within a couple of days and the guide doesn't forbid it, a gentle follow-up is fine. If the silence continues, go back to your shortlist and take your second choice.
Step 5: Fork, branch, commit, push
Click Fork on the repository page first. You also need git installed locally. The sequence below is unexecuted, and the capitalized names are placeholders to replace. Check whether the default branch is main or master.
## UNEXECUTED example. Dependencies: git, a GitHub account, your fork.
git clone https://github.com/YOUR-USERNAME/REPO.git
cd REPO
git remote add upstream https://github.com/OWNER/REPO.git
git fetch upstream
git switch -c fix-issue-123-short-description upstream/main
## make your change, then run the project's tests or build
git add path/to/changed-file
git commit -m "Fix broken install link in README (#123)"
git push -u origin fix-issue-123-short-description
Keep the change small and limited to what the issue asks for. Match the project's commit message style if the contributing guide defines one. Don't bundle unrelated cleanups into the same branch.
Verify before you open the pull request
Confirm the branch reached your fork. Run git ls-remote --heads origin fix-issue-123-short-description, or open your fork on GitHub and check the branch dropdown.
Then click "Compare & pull request" and link the issue in the description with "Closes #123". Explain what you changed and how you tested it, and fill in any pull request template.
After you submit, open the Checks tab. A passing run means the project's automated checks are satisfied. If a run fails, read the log, fix the problem and push another commit to the same branch. Don't open a second pull request.
Step 6: Recover when a pull request gets closed
Say a maintainer closes your pull request because you ignored the contribution guidelines, or because the change was too low-effort. Don't argue, and don't resubmit the identical diff.
Also read: our guide to pgo + lto explained: do compiler tweaks really help?
Read the maintainer's comment and the contributing file side by side, and find the specific gap. It might be a missing issue link, a skipped test, the wrong commit format, or a trivial change with no explanation. Fix it on the same branch, then comment politely: "Thanks for the feedback. I've updated the PR to follow the guidelines. Could you take another look?"
If the maintainer declines, thank them and move to your next shortlisted issue. Confirm on the official Hacktoberfest site how closed or flagged pull requests affect your participation.
If no issue fits: build something small for a friend
Sometimes the search turns up nothing realistic. The DEV post mentions the Weekend Challenge: Build for a Friend, part of the Hacktoberfest 2026 DEV Challenges. It frames the challenge as building something helpful for someone you know (source). The post gives no rules, deadlines or judging details, so read the official challenge page before you start.
This route suits you if you would rather build a small tool than patch an existing codebase. Treat it as an alternative, not a replacement. It won't teach you how to work with maintainers, which is the skill a merged pull request demonstrates.
What to expect next
Expect a wait. Many maintainers are volunteers, and a first review can take days. Reviews often come back with change requests, which is normal and not a rejection.
Respond within a day or two, push fixes to the same branch, and keep the conversation friendly. Once your first pull request merges, repeat the search with the same queries and look for a slightly larger issue.



