A drama in the JS world!

So, there's a library called Chalk, which is used for colourful output to the terminal. It is often criticized for its slowness and unnecessary dependencies it ships. Amongst the miniature alternatives to Chalk there was Colorette, a blazing fast library by Jorge Bucaran. It was often brought into projects as the replacement for Chalk, and the biggest usage came from Browserslist, PostCSS, and other projects of Andrey Sitnik, an advocate for minimalistic libraries

So a few days ago, Colorette v2 came out. It featured some refactoring and a breaking change, which resulted in the end users needing to call a function to enable the automatic detection of colour support. This had to be done in every file that uses Colorette, which isn't very performance-friendly. People didn't like it and tried to make Jorge revert this, but Jorge kept the change nevertheless. No he towards him here: It's his project, so he can decide to make it work it the way he wants.

Not liking the new API, Andrey Sitnik, the creator of the aforementioned PostCSS and Browserslist as well as other big JS libraries, decides to create an alternative. He creates Nano Colors, which is heavily based on Colorette with improvements from Kleur, a similar project. He mentions the original authors in the README and LICENSE files, but fails to do it in a way that makes the inspiration clear. Apart from that, Nano Colors was created as a fresh project, not a fork.

Andrey replaces Colorette with Nano Colors in every project of his and, leveraging his fame amongst other JS developers, starts to push Nano Colors to other projects, including ESLint and Babel.

Meanwhile, Jorge notices people migrating away from Colorette and disliking the changes, so he reverts the API to the old behaviour. However, he breaks the most important rule of SemVer and reverts the previously breaking change in a non-major version, making 2.0.0 incompatible with, say, 2.10.0

At the same time, Jorge starts to blame Andrey for copying Colorette. Andrey replies, saying that Nano Colors improves upon Colorette (especially in terms of speed) and was created as a reply to the breaking API changes. Jorge makes Andrey put a more noticeable reference to Colorette in Nano Colors' README, and Andrey manages to incorporate Colorette's Got history into Nano Colors.

Nevertheless, the PR acceptance process in ESLint and Babel is now stalled because of Jorge's comments.


In the end: a useless drama, that is arisen from a feature that should have been included in the stdlib of every language by now. IMO both developers behaved wrongly, and the thing still isn't settled, which may lead to people not using either of the packages because of the drama.

I wish Jorge would have listened before releasing v2, and Andrey would have pushed his changes in form of a PR to Colorette. But what we get are two equivalent libraries and some drama around them ¯\_(ツ)_/¯


Sign in to participate in the conversation

Fosstodon is an English speaking Mastodon instance that is open to anyone who is interested in technology; particularly free & open source software.