Every Checklist in the Guide
Every chapter ends with a “Do this now” checklist. Here they all are, by module, each linking back to its chapter. A box you tick here is ticked in the chapter too, in this browser, and “Copy as Markdown” turns a list into a task list for an issue.
Getting Started#
Source Code Hosting Platforms: GitHub and the Alternatives#
- Check where the three projects you use most really live: the GitHub repository can be a mirror, and its README says so.
- If one of them lives on its own GitLab or on Codeberg, create an account there before you need it.
- If you maintain a project, add a second push URL to its remote, so every push leaves a copy somewhere else.
Finding Open-Source Software to Use#
- Search the registry, package manager or store you install from before a web search.
- Read the license identifier and check it allows what you’ll do: run it, or ship it inside your code.
- Check the latest release date and the known advisories on the registry or on deps.dev.
- Open the Scorecard and read the checks at 0 that matter for how you’ll use the project.
- Look at the history of the
LICENSEfile for a license change. - Give the repository five minutes with Reading a Repository in Five Minutes.
Reading a Repository in Five Minutes#
- The first page of commits spans weeks or months, not years, and has people on it, not only bots.
- The repository has a license, a description and a contributing guide.
- The README says what the project does, how to try it and where to ask, on the first screen.
- Community standards (
/community) shows the files a contributor needs: contributing guide, code of conduct, security policy, templates. - Of the five newest issues from outsiders, most got a human answer within a week.
- The answers are specific and polite, even to vague reports.
- Sorted by oldest, few open pull requests are more than a year old.
- Dependency bot pull requests get merged, not piled up.
- At least two people commit regularly.
- The latest release, if the project publishes releases, is less than six months old.
Open Source Etiquette: Talking to Strangers Who Owe You Nothing#
- Open the
CONTRIBUTING.mdof a project you use, and find how it wants questions and ideas: issues, Discussions or a chat. - Find its
CODE_OF_CONDUCT.md, and the contact it gives for reports. - Next time you’re about to comment “+1”, react with 👍 and click Subscribe instead.
- Before you post your next comment, read it once as the maintainer, on a Sunday evening.
- Say thanks on one issue that got fixed for you.
Git and GitHub Basics You Actually Need#
- Set
user.nameanduser.emailwith your GitHub no-reply address, then check them withgit config --global --list. - Turn on two-factor authentication on GitHub, if it isn’t on yet.
- Install the GitHub CLI and run
gh auth login. - Fork and clone a project you use with
gh repo fork <owner>/<repo> --clone, and check thatgit remote -vlistsoriginandupstream. - Make a branch from
upstream/main, change two lines, and stage only one withgit add -p.
Contributing#
Finding a Project to Contribute To#
- List the dependencies, tools and editor extensions you use every day, and open their issue trackers.
- Open
/contributeon two of them. - Bookmark an issue search for your language, with
no:assigneeand a recentcreated:date. - Pick three candidate issues and give each repository the five-minute check.
- Read the contributing guide of the one you pick, and start the way it asks: a comment, an assignment, a proposal or a pull request.
Your First Contribution, Step by Step#
- Find the
CONTRIBUTING.mdof the project you want to contribute to, and read the section on pull requests. - Check which Node.js (or Python, or Go) version its CI uses, often in
.nvmrcor the workflow files, and install that one. - Clone it and run the command its README gives you, before you change anything.
- Before you push, run the checks CI will run: the workflows in
.github/workflows/list them. - Open your pull request from a fork on your personal account, with “Allow edits by maintainers” ticked.
- Put a reminder in your calendar two weeks after you open it.
How to Write a Bug Report That Gets Fixed#
- Search open and closed issues for the error message, in quotes.
- Reproduce the bug on the latest release.
- Build a reproduction from the project’s starter, and reduce it until removing anything makes the bug disappear.
- Write expected and actual, and the last version that worked if you know it.
- Add the versions of the project and of what runs it.
- Check the title names the symptom, then post, and look at the issue again in two days.
Non-Code Contributions Maintainers Actually Want#
- Next time a docs page confuses you, fix the sentence before you close the tab.
- Open the issues of a project you use, sorted by newest, and try to reproduce one report.
- Tab through that project’s docs site with the keyboard only.
- Answer one unanswered question in its Discussions or chat.
- Check whether it has a Sponsor button, and whether your company uses it.
Creating#
Planning Your Project#
- Write the problem in two paragraphs at the top of the README, with the “why this over X” sentence.
- Search the package registries for X before writing more code.
- Add a “Non-goals” section to the README, even with two lines.
- Create a
v0.1milestone on GitHub and put the issues that block it in it. - Add the “Decisions are made by…” line to the README or the contributing guide.
Licensing & Legal#
Choosing a License: Four Questions and a Table#
- Check that your project has a
LICENSEfile, and that GitHub shows its name in the About box. - Put the SPDX identifier in the
licensefield of your manifest. - If you use a GPL-family license, decide between “only” and “or later”, and use the matching identifier.
- Look up the license of your three biggest dependencies, and check that it allows what you do with them.
License Compatibility: What You Can Combine, and the Tools That Check#
- Run a license checker on your production dependencies.
- Read every line that isn’t MIT, ISC, BSD or Apache-2.0, and write down why it’s fine, or replace the package.
- Add an allow list to CI, so a new license shows up in a pull request.
- List the non-code files in your repository (fonts, images, docs) and the license of each.
Relicensing: The Source-Available Wave, and the Forks That Answered#
- List the databases, search engines and infrastructure tools you run, and check the license of the exact version you deploy.
- For each one under the BSL, read its Additional Use Grant, and write down why your use is allowed.
- Before a big contribution to a company-owned project, read its CLA and check whether it lets the company relicense your code.
- If you’re starting a company around your project, pick its license now, the way you’d pick it if the project got popular.
CLA or DCO: What You Sign When You Contribute#
- Set
git config --global user.emailto the address you want in public sign-offs, and check that GitHub links it to your account. - Before your next contribution to a company-owned project, read its CLA and answer the three questions above.
- If you contribute at work, find out whether your employer has signed a corporate CLA with the projects you contribute to.
- If you maintain a project, write down in
CONTRIBUTING.mdwhat contributors agree to: inbound=outbound, a DCO sign-off, or a CLA, and why.
Licenses for Things That Aren't Code: Docs, Fonts, Hardware, Data and Models#
- List what your repository contains besides code (docs, images, fonts, data, designs), and write down the license of each.
- Put code samples in your documentation under a code license (CC0 or your project’s license), and say so.
- Before using a CC-licensed image or text in anything commercial, check that its license has no NC.
- Before building on a model, read its license for a user threshold or a list of prohibited uses.
Trademarks, Names and Logos: What Your License Doesn't Cover#
- Search your project’s name in the USPTO and EUIPO databases, and in your package registry, before you grow attached to it.
- Add a “Trademark” section to your README, or a
TRADEMARK.md: who holds the name, what’s allowed without asking, whom to ask for the rest. - Say which license covers your logo, and that it doesn’t cover the trademark.
- If a company sells around your project, register the name or ask your foundation to.
Maintaining#
Saying No: Five Replies That Keep Contributors Coming Back#
- Write a “Non-goals” section in your README, even three lines, and link it from
CONTRIBUTING.md. - Save the five replies above in your GitHub settings, reworded in your own voice.
- Find the oldest open issue you know you won’t do, and close it as not planned, with the reason.
- Label
help wantedthe issues you’d merge but won’t write yourself.
Reviewing Pull Requests: What to Check, What to Say, When to Close#
- It fixes the issue, all of it and only it.
- A bug fix comes with a test that fails without the fix.
- Docs, examples and the changelog follow the change in behavior.
- No breaking change hides in it: public API, options, defaults, output format.
- Anything visible works with a keyboard and a screen reader, and new strings can be translated.
- It’s small enough to review in one sitting.
- CI is green, on the checks that matter for this change.
Reviewing Pull Requests: What to Check, What to Say, When to Close#
- Add a
CODEOWNERSfile to your project, even with one line. - Save the three closing replies above in your GitHub settings.
- Close the oldest open pull request you know you won’t merge, with the reason.
- In your next review, label every comment, and add one
praise:.
Governance: Who Decides, and How to Write It Down#
- Write down who decides in your project today, in a
GOVERNANCE.md, even one paragraph. - List the maintainers in the repository, with what each one can do.
- Decide what needs more than a pull request, and write how those decisions are made.
- Add an emeritus section, and thank the people who stepped back.
Security for Maintainers: Before, During and After the First Report#
- Add a
SECURITY.mdwith supported versions, how to report and your response time. - Turn on private vulnerability reporting.
- Require two-factor authentication for everyone with write access.
- Replace long-lived publish tokens with trusted publishing.
- Set
permissions: contents: readat the top of every workflow. - Pin third-party actions to full commit SHAs, and let Dependabot update them.
- Turn on secret scanning and push protection.
- Run Scorecard, and fix the first finding that applies to your project.
Burnout, Succession and the End of a Project#
- Open Insights > Contributors on your project, over its whole history, and read your share.
- Write down what only you can do: publish, the domain, DNS, secrets, social accounts.
- Give release rights to a second person you trust, through an npm organization or trusted publishing.
- Name your successor in your head. Then write it down in the repository, with what they’d need.
Promoting#
Building a Strong Project Identity#
- Write your project’s values in three to five lines, where contributors will read them: the README or the contributing guide.
- Check your name before you commit to it: the domain, GitHub and GitLab, a web search, a trademark search.
- Look at your logo as a favicon and in one color. If it doesn’t survive both, simplify it.
- Write a one-page style guide: how to use the logo, the color codes, the fonts.
- Open your homepage as a stranger would. The first screen says what the project does, what it solves, and how to contribute.