I want to contribute to an open source project. How to start?

This post was inspired by Drew DeVault blog post I want to contribute to your project, how do I start? and the related discussion on Gambe.ro.

These are tips I wish I had when I started my journey as a developer in regards to open-source projects while at the same time — if I may dare to say — I believe this to be a complement of Drew post.

The post by itself is a gem, but the most striking and true part to me is probably the intro.

I want to contribute to your project, how do I start? I get this question a lot! The answer is usually… don’t. If you already know what you want to do, then the question doesn’t need to be asked. But, if you don’t already know what you want to do, then your time might be better spent elsewhere!
The best contributors are always intrinsically motivated.
— Drew DeVault

Now, what I would like to add at this point is: if you are in such a condition as described in the post, so that you are well-intended (committed to participate in open-source project) but without direction (I don’t know where to start) I would recommend you to forget (just temporarily) about the open-source project and to redirect all your focus and interest to a project that 1) it is yours and 2) you are passionate about.


That means a project that matters to you, that you truly care of.

Usually, when you are doing something in such state of mind, because a mix of bad luck and Murphy Law you’ll find yourself quite surely in one of these two conditions:

  • the library/functionality you wished for it doesn’t exist
  • the library/functionality exists but does not cover your use case

So, at this point, you should have well clear what to do.

Your Project

Contributing to an open-source project, in the end, is not such a crazy or special thing or what. Once you know the programming language that the project is written on and you got a minimum of knowledge to branch and PR you are potentially ready to go.

Now, the issue is that at the beginning you may feel scared or shy. Or perhaps wait for a PR to be taken into consideration may give you a sense of losing control.

Instead, if you work on something you got total control and ownership — some codebase you can play on — that you can change and do as you please you are already one level up.

Because you are going to do all with your best intentions without being attached to the result.

Let me elaborate on this.

A quick example

Some time ago I was looking for a package to add a banner via cli. I’ve found banner-cli that was basically the package I was looking for but, it was missing a custom template functionality.

I needed that particular functionality for my personal project. I did a fork, added my changes and submitted a PR (which is still pending). But to me, it is not that overwhelming as I can use the package with my changes directly from my repo (tnx npm!).

Always the same package has a dependency — another package called prepend-file — that is used to attach the banner at the beginning of the file. Small issue: the BOM character that is used for the utf-8 files was getting ignored.

Again, another fork, other PR. They took 4 months to review and merge my PR. But hey! No big issue as I was using my patched version from my repo.

In summary

You got my point now, right? Once you’re going down the rabbit hole the rest will be a mere consequence. All your troubles and fears about how-to and where to start will be a far away remembrance.

It is up to you now, what do you care about? What do you want to code that matter to you? Rember, passion will drive inner motivation. Ownership will drive confidence. Good luck.