Problem
Finding a fair way to rank packages or tools is not easy.
Method tested
I am currently evaluating a popularity ranking that aims to be more fair than github stars or download counts and is based on real usage in open source projects. For now it ignores documentation or tests, but I believe that real usage is impacted implicitly by those, even if explicit evaluation could be also useful.
I will start with a ranking of npm tools and packages related to elm.
More exactly, all npm
packages matching the regex /(^|-|/)elm(-|$)/
and whose last release is more recent than elm 0.19.0 one (if your tool was not included because of this filter and works with 0.19.x, tell me about it, I will add it manually if possible).
The ranking uses the number of public repositories that depend of the tool. This value can be found for npm
tools on GitHub in “Insights -> Dependency graph -> Dependents”, it also usually appears since recently on the repository homepage next to stars as “Used by”. As far as I can tell, it includes indirect dependencies.
As a consequence to using GitHub to find dependents, packages without a GitHub repository informed in the package.json
have a ranking of 0 except for those I added manually (elm-verify-examples
, elm-pages
, elm-canvas
).
Also to avoid giving an unfair advantage to old tools compared to new tools, the value found is divided by the number of moons (28 days) since the first release of the npm package (I used 28 days quite arbitrary to avoid anomalies with a too short value like a day). So the final result is close to the average number of new users per month.
Potential issues
-
npm
packages without a GitHub repository have an evaluated usage of 0 - Maybe some packages like elm-json are more likely to be installed globally and may be penalized by this method.
- The effect of dividing by the numbers of “moons” can be noticed for example with elm-pages. As far as I know, its release has not been announced yet (except for a work in progress announcement), but its ranking is pretty high because it is used in two projects in less than one month. On the other hand, the
elm
installer is highly downranked by its very old first release in 2014. So maybe 28 days is a little short.
Results
Here are the results, tell me what you think, and maybe give a try at some tools:
Avatar | Tool | Usage/Moon | Description |
---|---|---|---|
elm-hot | 47,23 | Hot code swapping for Elm | |
elm-hot-webpack-loader | 30,78 | Webpack loader providing hot code swapping for Elm | |
elm-format | 27,47 | Install elm-format | |
find-elm-dependencies | 22,59 | Find elm dependencies | |
elm-serve | 18,02 | Node.js module to refresh and reload your Elm Application in your browser when your code changes. | |
elm-webpack-loader | 16,43 | Webpack loader for the Elm programming language. | |
elm-brunch | 14,42 | Brunch plugin to compile Elm code (http://elm-lang.org) | |
elm-test | 14,34 | Run elm-test suites. | |
elm-live | 13,33 | A flexible dev server for Elm. Live reload included! | |
elm-verify-examples | 7,92 | Verify examples in Elm doc-comments | |
elm | 7,85 | Installer for Elm: just downloads the binary into node_modules | |
elm-hot-loader | 7,79 | Hot swapping for Elm module. | |
create-elm-app | 6,66 | Elm apps with zero configuration | |
elm-analyse | 5,9 | A tool that allows you analyse your Elm code and identifies deficiencies and best practices. | |
@dillonkearns/elm-graphql | 4,78 | Autogenerate type-safe GraphQL queries in Elm. | |
parcel-plugin-elm-env-vars | 4,27 | A parcel plugin for generating Elm file for your env vars automatically. | |
node-elm-compiler | 4,11 | A Node.js interface to the Elm compiler binaries. | |
@dawehner/elm-static-html-lib | 3,76 | Generate HTML from Elm views | |
elm-css | 3,39 | Elm-based CSS Preprocessor | |
elm-pages | 2,59 | Type-safe static sites, written in pure elm with your own custom elm-markup syntax. | |
elm-doc-preview | 2,01 | Elm offline documentation previewer with hot reloading. | |
react-elm-components | 1.40 | Write React components in Elm | |
elm-typescript-interop | 1,27 | Code generator for type-safe elm-typescript interprocess messages. | |
parcel-plugin-elm | 1,19 | A parcel plugin that enables elm support | |
elm-debug-transformer | 1,18 | Transform Elm Debug.log output into nice log object with custom formatter | |
elm-upgrade | 0,96 | Upgrade Elm projects | |
elm-xref | 0,96 | Cross referencing tool for Elm - find usages and unused code | |
prettier-plugin-elm | 0,96 | Adds Elm language support to Prettier via elm-format | |
elm-asset-webpack-loader | 0,93 | Webpack loader for assets (like images or fonts) in Elm programming language | |
elm-coverage | 0,76 | > Work in progress - Code coverage tooling for Elm | |
elm-canvas | 0,72 | Custom element to be used in conjunction with Elm | |
elm-doc | 0,7 | Elm dependency documentation tool | |
elm-json | 0,69 | Deal with your elm.json | |
elm-css-modules-loader | 0,53 | webpack loader for using CSS modules in Elm code | |
elm-mapbox | 0,51 | A custom element designed for use with elm-mapbox | |
elm-css-modules-plugin | 0,5 | Babel plugin for use within cultureamp/elm-css-modules-loader | |
gatsby-plugin-elm | 0,5 | Gatsby plugin to handle elm files | |
elm-module-parser | 0,46 | Parses Elm module declaration and import statements. | |
elm-fancy-brunch | 0,41 | Elm support for brunch, with error display. | |
elm-ethereum-ports | 0,4 | Helpers to wire Elm ports to your elm-ethereum app. | |
elm-monitor | 0,4 | Monitor your elm program with redux-devtools | |
tree-sitter-elm | 0,39 | Tree sitter definitions for elm | |
@elm-tooling/elm-language-server | 0,38 | Implementation of an elm language server in node. | |
elm-lsp | 0,36 | Linting through LSP protocol for Elm | |
elm-select | 0,36 | Select DOM elements and optionally call a function. | |
@kachkaev/run-elm | 0,29 | Temporary fork of run-elm | |
elm-ethereum-generator | 0,24 | Install elm-ethereum-generator | |
rollup-plugin-elm | 0,24 | Import .elm files as ES6 modules. | |
elm-simple-loader | 0,19 | A simple Webpack loader for Elm sources. Uses your system Elm installation. | |
getto-code-stat-elm | 0,19 | code statistics for Elm | |
fuse-box-elm-plugin | 0,17 | A plugin for fuse-box for transpiling and bundling Elm programs | |
elm-outdated | 0,16 | Keep your Elm dependencies up-to-date | |
html-elm | 0,15 | Convert html to elm-html | |
@whiletruu/format-elm-webpack-errors | 0,12 | Colours and formats elm compiler error messages in json format it finds in webpack errors. | |
parcel-plugin-elm-bundle | 0,12 | Parcel plugin for bundling multiple Elm applications. | |
bs-elm | 0,1 | Bindings for mounting and interacting with Elm applications in Reason. | |
elm-docstyle | 0,1 | A tool that allows you to check the quality fo your Elm code documentation. | |
elm-doctest | 0,09 | doctest for elm | |
elm-ts | 0,09 | A porting of TEA to TypeScript featuring fp-ts, io-ts, rxjs5 and React | |
elm-element | 0,08 | Use Elm applications as web components. | |
graphql-to-elm-package | 0,07 | Support package for graphql-to-elm, which generates Elm types, encoders and decoders from GraphQL queries | |
ng-elm | 0,07 | Write Angular 2 components in Elm | |
pwac-elm | 0,06 | elm environment for pwac | |
elm-gen | 0,05 | Experimental CLI tool for generating Elm JSON Decoders and Encoders, written mostly in Elm | |
elm-rings | 0,05 | Capture and record the state of your Elm application in Elm 0.19 and 0.18. | |
elm-string-representation | 0,05 | Parses Elm string representation for data | |
ember-elm | 0,05 | Write Elm in your Ember app | |
graphql-to-elm | 0,05 | Generates Elm types, encoders and decoders from GraphQL queries | |
literate-elm | 0,04 | Runs literate Elm code blocks and calculates Elm expressions | |
elm-docs | 0,03 | Markdown documentation generator for elm-make compatible projects | |
@poi/plugin-elm | 0 | Use Poi to build your Elm apps. | |
@revathskumar/babel-plugin-elm | 0 | Babel plugin to compile elm code embedded in your app | |
@teamthread/css-modules-elm-types-loader | 0 | Generate Elm type aliases for CSS Modules | |
@teamthread/elm-web-components | 0 | Run your Elm apps through web components. | |
@the-sett/serverless-elm-bridge | 0 | Use Elm with the serverless framework (deploy to AWS, Azure, Google) | |
@thought2/elm-edit | 0 | ||
angularjs-ng-elm | 0 | AngularJS directive for Elm modules with interoperation via ports | |
babel-elm-assets-plugin | 0 | This Babel plugin allows you to search for a particular function call in Elm, and replace it with a require() JS call. This allows you to use webpack generated assets directly in your Elm code. |
|
build-elm-assets | 0 | Builds an Elm file containing all paths of assets in a directory | |
create-elm-batteries | 0 | Create an Elm app, batteries included. | |
css-in-elm | 0 | Elm-based CSS Preprocessor | |
elm-antique-bugfix-binary | 0 | The Elm Platform: Binaries for the Elm programming language. | |
elm-app-gen | 0 | A CLI for generating Elm projects that build with Parcel | |
elm-app-webcomponent | 0 | ### Installation | |
elm-app | 0 | Create [Elm 0.19][elm] + [Webpack 4][webpack] apps with no build configuration. | |
elm-deps-rss | 0 | Generate an Elm project RSS feed for its dependencies releases | |
elm-desktop-app | 0 | the simplest way to write desktop applications in Elm | |
elm-enums | 0 | Process ./enums.defs -> ./Enums.elm, autogenerating custom types and JSON encoders/decoders from enums. | |
elm-git-install | 0 | A tool for installing private Elm packages from any git url. | |
elm-habitat | 0 | Helpers for mounting Elm applications in specific parts of the DOM. | |
elm-js | 0 | Elm architecture in javascript | |
elm-kitchen | 0 | An utility to generate an Elm SPA skeleton. | |
elm-local-packages | 0 | Launch elm packages site with local elm caches. | |
elm-markup | 0 | Command Line Interface to Elm Markup. | |
elm-minify | 0 | Minify compiled Elm modules! | |
elm-node | 0 | Run Elm + JS programs easily in node | |
elm-packages | 0 | Elm packages info library | |
elm-project-inspect | 0 | Elm project inspection | |
elm-smuggle | 0 | Install the elm-smuggle binary | |
elm-svg-cli | 0 | Convert svg assets to elm | |
elm-svg-webpack-plugin | 0 | webpack plugin to convert svg assets to elm | |
elm-symfony-bridge | 0 | Webpack plugin exposing symfony’s translations and routing to elm. | |
elm-system | 0 | Deploy a system of Elm applications as a single-page web app. | |
elm-translator | 0 | Type safe translations for Elm. The npm package contains a binary to autogenerate Elm code from a json specification. | |
elm-update | 0 | The elm-update command allows to list the updatable dependencies listed in an elm.json file. Future releases will allow optional auto update of the file as well. |
|
elm-web-server | 0 | An API with Node.js-bindings for Elm WebSocket/HTTP-servers | |
elm-webpack-project-loader | 0 | Webpack Loader for Elm Projects. | |
generate-elm-app | 0 | Simple setup for elm application | |
generator-elm-parcel | 0 | Generate a baisc Elm project with Parcel | |
generator-elm-starter-kit | 0 | Generate a simple Elm Spa | |
generator-elm | 0 | Generate a minimal Elm + Webpack 4 project | |
getto-elm | 0 | basic structure with elm | |
gulp-elm | 0 | elm compiler for Gulp | |
icons-to-elm | 0 | Convert a directory with svg files into an Elm icon module | |
laravel-elixir-elm | 0 | A package to provide support for compiling Elm in Laravel Elixir 6 | |
laravel-mix-elm | 0 | Compile Elm files with Laravel Mix | |
material-components-elm-js-imports | 0 | JavaScript imports for material components for elm | |
parcel-plugin-elm-css-modules | 0 | A Parcel plugin for generating Elm file for your CSS Modules automatically. | |
parcel-plugin-elm-hot | 0 | Elm HMR in Parcel without losign state | |
protoc-gen-elm | 0 | Elm protoc plugin | |
razzle-examples-with-elm | 0 | ## How to use | |
razzle-plugin-elm | 0 | ## Installation | |
redux-elm-subscriptions | 0 | A tiny, zero-dependency package to listen to global events in an Elm Architecture manner. | |
static-html-from-elm | 0 | Turn your Elm app into a static HTML site | |
svg-to-elm | 0 | Convert SVG to Elm HTML modules. | |
todomvc-example-in-vanilla-javascript-using-elm-architecture- | 0 | Learn how to use The Elm Architecture in JavaScript to create functional and fast UI! |