Is Elm going stale? The numbers say no.

I’ve seen a lot of discussion and concern around Elm development activity recently. This comment on Hacker News is a good example: “Most packages I use and Elm itself is weeks and months old, makes me worried that it’s just stale”. Someone else paraphrased their boss’s opinion as “Looks like it’s dead now, no releases in over a year”.

The concern is that this sentiment either puts people off trying Elm, or it makes them consider not using Elm anymore, or it stops them from recommending Elm to their colleagues.

So I thought it would be good to take a look at some actual numbers to get an idea about how things really are. Is Elm some kind of experiment people have tried and left behind? Or does it have an active developer community with bright prospects?

Elm community by numbers

Elm Github:

  • 10557 repositories
  • 823 users
  • Updated within last week: 309
  • Updated within the last month: 759
  • Repos with >100 stars: 75

Other Elm stats:

  • 1301 packages in the package index
  • 569 package authors in the index
  • 12358 users registered on Slack
  • 6145 readers on r/elm
  • 653 users on Elm Discourse

How does this compare to other communities?

Haskell is a popular general purpose functional programming language which is used to develop production software by quite a few companies around the world. It’s also been around for over 25 years.

This is what Haskell Github stats look like:

  • 73735 repositories
  • 9779 users
  • Updated within last week: 1915
  • Updated within the last month: 4440
  • Repos with >100 stars: 475

There are 31850 readers on r/haskell.

These numbers are consistently 6-7x the Elm metrics. So the Elm community is smaller, but not orders of magnitude smaller. Not bad for a language that’s only a few years old!

Let’s look in another direction. PureScript is also a functional programming language for web development that compiles to JavaScript, like Elm, although it has a somewhat different philosophy as it’s more about giving the programmer POWERRR rather than simplicity. It’s also been around for a few years.

Here are some PureScript Github stats:

  • 2836 repositories
  • 184 users
  • Updated within last week: 93
  • Updated within the last month: 412
  • Repos with >100 stars: 18

Also, there are 1493 readers on r/purescript.

The PureScript numbers are about 4x smaller than Elm numbers. This tells us that Elm is definitely not the smallest community among FP alternatives to JavaScript, which is useful to know.

What about development activity?

I took a sample of popular Elm packages, mainly those listed in the package index as well as those with > 150 stars on Github, and listed their latest release and latest development activity times below. By the way, I think the fact that the package site doesn’t show release dates is a good thing, but that is another discussion.

 Library                        | Latest release | Latest activity   
 rtfeldman/elm-css              | 2018           | 03-2018         
 terezka/line-charts            | 2018           | 03-2018         
 rundis/elm-bootstrap           | 2018           | 03-2018         
 gampleman/elm-visualization    | 2018           | 01-2018         
 elm-lang/core                  | 2017           | 03-2018          
 elm-community/elm-test         | 2017           | 12-2017         
 jamesmacaulay/elm-graphql      | 2017           | 12-2017         
 elm-community/elm-webgl        | 2017           | 12-2017         
 saschatimme/elm-phoenix        | 2017           | 11-2017         
 rgrempel/elm-route-url         | 2017           | 09-2017         
 etaque/elm-form                | 2017           | 08-2017         
 gdotdesign/elm-ui              | 2017           | 05-2017         
 evancz/markdown                | 2017           | 03-2017         
 mdgriffith/elm-style-animation | 2017           | 02-2017         
 elm-lang/navigation            | 2017           | 01-2017         
 elm-lang/websocket             | 2016           | 03-2018         
 elm-lang/svg                   | 2016           | 02-2018         
 elm-lang/http                  | 2016           | 01-2018         
 elm-lang/html                  | 2016           | 01-2018         
 NoRedInk/elm-decode-pipeline   | 2016           | 01-2018         
 elm-lang/geolocation           | 2016           | 08-2017         
 elm-lang/keyboard              | 2016           | 07-2017         
 elm-lang/dom                   | 2016           | 07-2017         
 debois/elm-mdl                 | 2016           | 07-2017         
 thebritican/elm-autocomplete   | 2016           | 05-2017         
 evancz/elm-sortable-table      | 2016           | 12-2016         
 ThomasWeiser/elmfire           | 2016           | 12-2016         
 elm-lang/mouse                 | 2016           | 10-2016         
 elm-lang/window                | 2016           | 10-2016         
 ohanhi/elm-native-ui           | -              | 01-2018         
 evancz/react-elm-components    | -              | 12-2016

Here are some numbers we can get out of this table:

  • There are 31 popular packages in the table
  • 15 had a release in 2017 or 2018
  • 11 had dev activity in 2018
  • 24 had dev activity within last year

In other words, 77% of popular packages had some kind of development activity within the last year, 35% had development activity in the three months of this year, and almost half had a release some time in 2017 or 2018.

Given the overall tendency towards slower, more considered release cycles in the Elm world, this is pretty good! It shows that development is ongoing and packages are not abandoned.

As an astute reader, you are probably thinking: “Hang on, but why are there so few popular packages in the first place?” JavaScript probably has 15 million libraries with 150+ stars on Github!

I don’t think this is particularly alarming, as there are a number of reasons to explain this.

Some of this is definitely due to the Elm community being relatively small. But in addition, Elm exists side by side with the existing JS efforts, and a lot of existing work can be reused via the JS interop mechanism. This reduces incentive to re-implement things in Elm.

Possibly the biggest reason, I think, is a difference in fundamental approach. While in the JavaScript world there is a huge number of libraries and frameworks with overlapping functionality (eg Underscore, Lodash and Ramda all provide functions for operating on collections), in the Elm world there is a deliberate drive to avoid such proliferation, and instead have a single library for any given purpose.

In summary

If you are considering or using Elm, I hope this post has given you a bit more clarity about the state of the Elm community and projects.

Based on these numbers, the Elm community is active and fairly large (and it’s growing!), and there is no reason to think that there is no development activity happening around Elm.

Would you like to dive further into Elm?
📢 My book
Practical Elm
skips the basics and gets straight into the nuts-and-bolts of building non-trivial apps.
🛠 Things like building out the UI, communicating with servers, parsing JSON, structuring the application as it grows, testing, and so on.
Practical Elm