Ending an Open Source project (Mapael)

Vincent Brouté • February 7, 2022

I wanted to write a little post about Mapael and its future, as this project occupied me during several years and has gained some popularity year after year, but I didn't talk about it since a long time. I began to develop Mapael from scratch in 2013 (Wow ! Mapael is already this old ?). Since then and until 2018, several versions have been released. Each version came with its batch of great new features (by the way, many thanks to Guillaume who brought a lot of improvements to the last versions, it was a great period of teamwork during some months that I really appreciated).

Now, it's 2022, the library still works like a charm and is downloaded 95,000 times a month according to NPM statistics. However, I haven't maintained it for quite a lot of time. I didn't push any relevant commit on the repository since 2018, and I barely answer to users' issues on GitHub. Why ? I think the main reason is as simple as a lack of time. Working alone on an Open Source project that got some users require a large amount of time because it comes with a bunch of other tasks that goes beyond of simply adding new features. You not only have to make the project evolve, but you also have to take care of the project community : answering GitHub issues and questions sent by emails, reviewing pull requests, discussing and working on new features requested by users are few of the additional time-consuming tasks. Furthermore, at some point, I wanted to use my free time to focus on some other projects and learnings.

Mapael in a nutshell

Mapael is a jQuery plugin built on top of raphael.js that allows you to display dynamic vector maps. For example, you can display a map of the world with areas filled with a color alongside with a legend (otherwise named a choropleth map). You can also build more advanced and highly customizable visualizations by plotting cities with their geo coordinates, drawing links between them and enable some features such as multiple legends, zooming & panning, etc. Feel free to take a look at the demos on the documentation page to see Mapael in action.

A Map built with Mapael

Usage statistics

I have not so much data about Mapael usage. The only data come from Github and NPM. At the end of January 2022, there are :

Since the beginning of the journey, Mapael has received 995 stars and has been forked 200 times. jquery-mapael and mapael-maps repositories total 196 closed pull requests and 148 closed issues.

See more on npm-stat

We can see on the NPM chart above that the number of downloads per month remains at a high level and haven't stopped growing since 2019. This is quite surprising as I haven't published any new release since the beginning of 2018 ! jQuery seems to follow the same growing trend of downloads per month through NPM, so maybe jQuery and Mapael are not dead yet. So what to do with an unmaintained tool with obsolete dependencies but that is still used ?

Future of Mapael ?

To my mind, jQuery Mapael as such is doomed to a certain death. Mapael is closely bound to some obsolete or near-obsolete dependencies. Mapael is built on top of Raphael.js of which the last version has been released 3 years ago. Mapael is also tightly coupled to jQuery, and although jQuery has done a great job during a long time, it will probably disappear in the years to come. Furthermore, it would be now quite hard to add new features on top of the current code base. Indeed, the structure and the API became quite messy over time (Side note : I'm not very proud of how the code I wrote some years algo looks now).

For all the reasons above, I think the project would greatly benefit from being completely rewritten in a more modular way, in modern JS, and providing a more structured API. This hypothetical "reboot" project surely couldn't be named "jQuery Mapael" anymore as it would be a brand-new project. Anyway it was of course a great experience to launch and maintain such an Open Source project during several years !

So what's next for Mapael now ?

As I have taken my distance with the project since few years, there is no official maintainer now. For now, it appears there is still some usage of the library, so as a first step toward Mapael end, I will add a note on the readme file to explain that this project is not maintained by its author anymore. People or organizations who want to use Mapael anyway will be invited to contribute if they need some bugfixes or security fixes. Later, when the usage rate will be low enough, I will probably deprecate the project on NPM and archive the project on GitHub. I think archived projects can still be forked if needed.

In the meantime, there are already plenty of alternatives to build interactive maps with up-to-date javascript libraries : d3.js is for instance a decent one even if it's not only focused on maps.

Bivariate Choropleth built with d3.js

A thought about Open Source Software

We have all heard about log4j and Faker.js stories few weeks ago. A lot of interesting discussions, debates and ideas emerged on social networks after these events about how to support or fund Open Source projects in a sustainable way. These stories highlighted an important issue of Open Source Software : how to keep providing high quality software for free ?

Many projects are directly supported by the companies which created them and many others come with some paid offers that provide more advanced features, cloud access, etc. I may be wrong, but I think most of the projects of this kind don't suffer a lot from fund issues as there is a business model behind.

However, many other projects are maintained only by one or maybe a few developers during their free time. It's often a challenge to keep these projects evolving in the long term, even if they reach some level of popularity. That's why it's important to not forget smaller Open Source projects when you consider bringing some contribution or funding to OSS. Anyway, I think companies that rely on Open Source Software should participate in return, either by granting time to allow developers to contribute or by funding some projects.