Graduating from contributor to author
Tags: node, javascript, npm, github
Published: 2021-12-17 12:46:15

Something happened yesterday that is sort of a big deal for me: I became the author and sole maintainer of a pre-existing open-source project that I have been collaborating on with the original author for several years.

**The Backstory**
Back in 2018, when I started the BikeTag Project, I was looking to use a third party imagestore for this project that would allow for unlimited use without cost. Enter Imgur.

Imgur allows for unlimited high resolution uploads at no cost and with high availability. (sometimes, lol)

The BikeTag website ([biketag.org](https://biketag.org)) relies entirely upon Imgur for it's functionality. There is no "database" backend for the BikeTag website or game. All data for the active game is stored within the title and description of the images uploaded to Imgur. Because of this, I now have a pretty intimate relationship with the Imgur API and the platform itself.

**As an Open-Source contributor**
When I sit down to start a new Javascript project, and I have a need for an API to implement a feature, I find myself looking at two factors when adding a dependency: when was it last published, and is it a top-level package name? I found this Imgur library because it was named "imgur" on npm. It's really that simple. And although it hadn't been touched in about 5 years -- the interface was simple and it got me up and running within minutes as the [Unofficial Imgur Javascript Library](https://www.npmjs.com/package/imgur).

As my use of the [Imgur](https://github.com/kaimallea/node-imgur) library evolved, I ran into issues with the code that needed to be addressed. I had no real experience in collaborating with other developers on existing open-source projects with as high a usage as this project (over 1,000 monthly downloads at the time). I reached out to the original author and didn't get a response.

Then, something important happened: the request module had been deprecated and with it came a scary message during installation/build. This package, request, is still used by millions of projects on GitHub and the deprecation warning impacted many of my projects. Most notably, I had a gulp build tool that was using request in many nested dependencies. So I went hunting and soon became a collaborator on several different node projects as I communicated with the original authors and begged for updates to their packages. In this process, I eventually tracked down and got a response from the Imgur author. Soon, an update to the imgur package followed.

**The Journey To Author**
It must be difficult for the author of a library to have a community need arise 6 years after you stopped using/needing/maintaing a body of code. The original author of the Imgur package put in the effort, though, and for that I am very grateful. In our collaboration, we sparked a rewrite of the package into TypeScript (attempt #2 for this project) that would also include unit testing.

What transpired over the next 3 years was a combination of the original author's time and attention being pulled away from the project and my need to modify and use the code superceeding the desire to collaborate. This lead to me maintaining a separate fork of the project with features what would only later find themselves in the original body of work.

Over the last year, the active development on the project stalled and I found myself relying on a codebase that had now  diverged greatly from it's origin. I was feeling stuck behind using GitHub alone and I decided to name the package something different and publish it to npm so I could use it more reliably in other projects. Then, last week, I get an update from the original author that they had decided to pass the project on and had chosen me to take over as authoer and maintainer, given that I was the most active in it's continued development.

**The Future Of Open-Source**
As for the future of _my_ open-source goes: there's lots of work to be done!

I had done an analysis of every fork of the project last year to see how the community was using the project. In the move to TypeScript, I sought to have an API that I could use both in NodeJS and in the Browser. This project, however, was started as `node-imgur` and included the `fs` library was used for supporting filesystem uploads out of the box.

When I forked the node-imgur project to start the development of the new BikeTag-API, I immediately began working on an isomorphic build of the codebase so that it would be usable in both environments(server, client). Now, after readying the new BikeTag-API for release, I have a build of the Imgur package that is isomorphic and I am excited to introduce it to the community.

It should be a fun journey! This project currently has 2,800 weekly downloads and at the point of transfer it had 180 stars and 49 forks. I plan to release the new, TS-isomorphic, Unofficial Imgur API at the end of this year. [`imgur@2.0.0`](https://github.com/keneucker/imgur) will drop filesystem support in favor of streams, forcing the community to provide their own fs strategies, while also aiming to reach feature parity with 100% of Imgur's API endpoints by 2.1.0 later in 2022.

Thank you for reading about my experience in becoming an author and maintainer of a popular npm package. If you liked my story and want to support my FOSS work, please consider [sponsoring me](https://github.com/sponsors/KenEucker) or becoming a [patron of the BikeTag Project](https://patreon.com/biketag).

~ Ken