DEV Community

loading...
Cover image for Why I'm building Moiva.io

Why I'm building Moiva.io

aantipov profile image Alexey Antipov Updated on ・3 min read

Introduction 👋

Hi dear developers! Christmas is coming and I have a gift for you 🎁 :)

My name is Alexey. I'm a software developer and I'm building a tool that I hope you'll find helpful. In this article, I want to explain what made me start working on it and why I think you need it.

Problems and Prior Art solutions

JavaScript ecosystem is thriving. For every problem, we have many existing solutions in the form of npm packages - we reached 1 million packages milestone in 2019. That is a sign that the ecosystem is alive and continues to advance. Every coming library fuels developers' imagination to create new even better solutions - faster, with better UX and DX, with more features.

On the other hand, it creates the problem of choice, we need to choose the right solution, the best library. What tech stack to use when building an evergreen project? Which package to use to replace the legacy one? Or maybe you have already chosen one, but need to convince your team that it's the best one.

One approach

Every year tons of new articles are written trying to help developers to pick the right library or framework.

Alt Text

Also, many surveys are conducted trying to solve the problem. Some of the well-known surveys are StateOfJS and Stack Overflow Annual Developer Survey.

Those articles and surveys themselves create a new problem - which article/survey to trust, which one is up to date, the most objective and comprehensive.

Another approach

Developers can also do their own investigation and get factual up-to-date information themselves. For example, one can go to Npm Trends and compare how popular the libraries are in terms of npm downloads. Bundlephobia can be used to check the bundle filesize. Github can provide information related to popularity, issues, commits frequency, etc. Many other services exist to provide different kinds of metrics.
The problem here is to know the metrics, know which services to use to get the data, combine the results, and get the answer. It's not easy at all.

Solution 💡

I decided to alleviate the problem and create a tool to help us, developers, get the factual data and easily compare javascript libraries side by side using graphs and charts.

Meet Moiva.io! 👋👋👋

Alt Text

Features 🪝

Here is the list of main selling points:

  • data about any npm package
  • different sources of data, like (NPM, Github, Bundlephobia, Google Trends, Thoughtworkds Tech Radar)
  • side by side comparison of any number of libraries using charts and graphs

Upcoming Features 🔥

Here are the ideas that I have at the moment:

  • alternatives autosuggestion. For example, when one selects MomentJS, the tool auto-suggests date-fns and dayjs to compare it with. Similar to what NpmTrends already does Alt Text
  • more metrics for comparison such as salaries per technology 💰, commits frequency, vulnerabilities 🐛, real usage on websites.
  • use of data from popular surveys
  • UX improvements

Feedback is a gift

The project is at an early age, so any kind of feedback is very important for it to become the right tool that solves the real problems of real people. So please share your opinion

2020-12-17 Update

I addressed one of the popular feedbacks and renamed the project to Moiva.io. I made corrections to the post to reflect that change.

Discussion (23)

pic
Editor guide
Collapse
shaijut profile image
Shaiju T

Hi this is nice idea. 😄 , But are the data accurate ?

Angular:

Jsdiff Github Stars: 59587

jsdiff.dev/?compare=angular -

Github Stars: 68.7 k

github.com/angular/angular

?

Collapse
aantipov profile image
Alexey Antipov Author

Hi Shaiju,

Thanks for the question!
The information is correct, it's just confusing naming of Angular's npm packages.
It's the old AngularJS (angular npm package) which has 59587 stars - github.com/angular/angular.js/
The latest Angular framework (which has 68.7 k stars) is exposed as @angular/core npm package
moiva.io/?compare=%40angular%2Fcor...

I will later provide more details so that it'll be easy to validate data and get more information

Collapse
shaijut profile image
Shaiju T

Nice , It will be useful if you can provide tag options to select top JS frameworks as options like angular, react, vue. So users can select each tag to search faster instead of typing.

Also you can show in sidebar top trending JS framework by day, week , month and year.

Thread Thread
aantipov profile image
Alexey Antipov Author

Nice idea, thanks! 👍 I noted it down.
Another idea that I mentioned in the "Upcoming features" section is "alternatives autosuggestion", it should also help to some extent to select libraries for comparison

Collapse
shaijut profile image
Shaiju T

Also change the repo text, currently it says : A repo for jsstats.com issues

Thread Thread
aantipov profile image
Alexey Antipov Author

Oh, right! Thanks for noticing it! I fixed it now.
I thought I cleaned it and fixed it everywhere :)

Collapse
zarehba profile image
zarehba

Love your idea. I always visit a few websites and sort of compile this data myself when looking for a library.

In my opinion 2 most important things:
I) Add autosuggestion as you have planned and do the autosuggestions RIGHT. I don't mean any fancy AI model, just autosuggestion of the most POPULAR ALTERNATIVES. That's whats missing for me in npmtrends and would be a good reason on itself for me to switch to JsDiff.
Because the biggest issue with npm is there are hundreds of libraries named reasonably yet being not used at all or just being complete bullcrap...
II) You should prioritize like this: |accuracy of data| = |UX| > |number of data sources compiled on the website|.
It's a 'at one glance' tool. I'd say it can really only by done by trial and error (or surveys...).

The metrics I find the most important are:
1) npm downloads (that you have) - social proof
2) github stars (must be somewhere at the top!) - social proof
3) date of recent commit - is the project maintained
4) number of contributors - will the project be maintained, is there a community or is it a one-man band's work
5) features - not something you can put on a chart though ;-)
6) variety of metrics: issues, issues resolved ratio, date created, size, commits/PRs trends (how actively does a project grow, it's actually missing from npmtrends),

As to what you already have:

  • Your NPM downloads chart reads wrong. At the beginning / in the middle of a month, like now, the trend always goes downhill. Either make it a 7week average, 30days rolling or extrapolate the December based on the downloads in this month (usually shown as a dotted line)
  • You need to ditch the gray color and use the colors you assigned to search results consistently.
  • Bundlephobia chart is wrong. Min+Gzip must be at the base of charts otherwise one does not know how to read the chart. I'm not convinced as to cumulative character of this chart either.
  • Google trends are not useful as they come. Hard to see what's going on with all these peeks and lows. They might be useful if you show an average of sort or a cumulative value. You'd have to look into that.
  • Obviously some users' score would be great but there simply is no good source of such data... maybe an average of different sources or displaying'em all could work.
  • PR chart -> logically, PR closed have to be at the base, not at the top

Damn, I am so opinionated ;-)
I've added it to bookmarks, though, and keep fingers crossed for you making a great tool! :-)

Collapse
aantipov profile image
Alexey Antipov Author

@zarehba I love your thoughtful feedback and very-very much grateful to you for that! 🙏
Agree with everything!

  • NPM downloads. Confirming the problem 👍 Noted it down.
  • not sure I understand the idea with ditching the gray color. Can you elaborate?
  • Bundlephobia. I already had a conversation about it on reddit and I agree that gzip and non-gzip should not be stackable 👍 Will fix it.
  • Google Trends... It's tough. I agree, I also think that for most npm packages it doesn't make any sense. Take for example table package. What will the chart show for the keyword table? I guess it won't reflect trends for the table package 😃 So it needs some thoughts how to improve it. I think the problem with peeks and lows exists mostly in case of not very popular packages. Popular packages should have more stable graphs. Unfortunately Google Trends doesn't provide a real API to adjust the data, so my abilities are also limited here. Anyway, I'll definitely think about what I can improve
  • PR chart. I think it doesn't say much in its current state (for example a number of closed or merged PRs) 😃. The chart should be improved to have real value.

Thanks a lot for your other notes about metrics and their priority.

Very much valuable feedback 👍 I'll come back to it and make sure I haven't missed anything.

Collapse
zarehba profile image
zarehba

About the gray color - the website would be easier to read when, say, in your example, the bars pertaining to angular would be red on every chart, react ones purple etc.

Yeah, I feel your pain about Google Trends..

Keep up the good work ;-)

Collapse
karfau profile image
Christian Bewernitz

That's awesome, did you know about npms.io? It's currently my goto resource when trying to understand my options.
Maybe there is a way to integrate their metrics? (As far as I know they are called the same as on npm but are working quite differently.)

Collapse
aantipov profile image
Alexey Antipov Author

Hi Christian,
I use npms.io for suggestions and in some other use case. I know that Bundlephobia uses it as well.
Unfortunately, it seems I can't rely on that service for several reasons:

  • the project is not active (the last activity was 2 years ago)
  • for some packages it doesn't give a link to github (npmjs, on the other hand, provides that information for those cases)
  • 2 days ago there was an incident - their service didn't work for some time. As a result, my project didn't work either. (I know it can happen with any servce, but it doesn't give you confidence when you only started using it.)

Having said that, I'm migrating to "native" npmjs api

Collapse
gunn profile image
Arthur Gunn

Bundlephobia shows some useful metrics - Is it tree-shakeable? side-effect free? how many dependencies?
I also look at what languages are in the codebase, and whether there are tests.

Collapse
aantipov profile image
Alexey Antipov Author

Agree about dependencies!
I'll also check what can be done regarding tree-shakeability.
Thanks for the suggestions! 👍

Collapse
jonathanbouligny profile image
Jonathan Bouligny

This is great. Im going to use it on this article blog.bearer.sh/top-node-request-li... and see what it comes up with. Need to find an alternative to Axios and the now dead request.

Collapse
stokry profile image
Stokry

Very nice :-)

Collapse
braydentw profile image
Brayden W ⚡️

What a nifty idea! Thanks for making this 😍

Have you put this on GitHub?

Collapse
gokulkrishh profile image
Gokulakrishnan Kalaikovan

This is grt. I had a similar idea long back. Now I am going to start using this app.

Collapse
robole profile image
Rob OLeary

Nice idea. Looks promising!

Collapse
aantipov profile image
Collapse
sachagreif profile image
Sacha Greif

Very cool! If you want to add in State of JS data in there we also have a public GraphQL API: graphiql.stateofjs.com/

Collapse
aantipov profile image
Alexey Antipov Author

Oh wow!!! That's really cool, you are awesome guys!
It simplifies my life 😀
BTW, looking forward to the results of StateOfJS 2020 survey!

Collapse
aantipov profile image
Alexey Antipov Author

I got feedback that the project's name is confusing.

I agree with that to some extent :)
I'm open to your suggestions, folks.
Let's come up with a simple and catchy name! 🤘

Collapse
aantipov profile image
Alexey Antipov Author

What kind of metrics and resources do you usually use when comparing javascript libraries?
What kind of charts and graphs would be helpful to you?