With now more than 3000 modules, there are huge gaps in the quality of things you find in the npm registry. But more often than not, it's easy to find a module that is really close to what you need, except if it wasn't for that one bug or missing feature.

Now depending on who is maintaining this module, you may get the problem resolved by simply opening a GitHub issue and waiting for a few days. However, open source doesn't really work without community, nor do you always want to be at the mercy of someone else. So a much better approach is to actually roll up your sleeves, and fix the problem yourself.

Here is the proper way to do this while using npm to manage your forked version of the module:

Fork the project on GitHub

Clone the fork to your machine

Fix the bug or add the feature you want

Push your commits up to your fork on GitHub

Open your fork on GitHub, and click on the latest commit you made

On the page of that commit, click on the "Downloads" button

Right click on the "Download .tar.gz" button inside the popup, and copy the link ("Copy Link Address" in Chrome)

Open up your package.json file, and replace the version number of the module with the url you just copied

Send a pull request upstream (Optional, but this way you will avoid having to maintain that patch of yours against newer versions of the module you forked)

Example: My new airbrake module uses a forked version of xmlbuilder. I submited my fix as a pull request, but it has not been merged yet. In order to pull in my changes via npm anyway, I simply pointed my package.json to the download url of my fork on GitHub like so: