State of Elm 2018 Results

Published December 26, 2018 · 10 Minute Read · ∞ Permalink


The State of Elm survey takes the pulse of the Elm community. What experiences do newcomers have, and are they learning at decent pace? What companies have Elm in production?

This year, the survey ran from the end of Janary to the beginning of March, and collected 1,176 responses (about the same as last year.) After the survey ended, I scrubbed each field for 17 of the questions to make sure we had good data, reduced five of the questions to tags, and performed the analysis below. I know it’s been a long wait; thank you for your patience while I did this, and to all the people who checked in and asked if they could help!

Let’s get going!

Reading This Data

This year, we got 6 more responses than last year. That means that I’ve left the raw counts in instead of converting to percentages, as you don’t introduce much error by comparing them directly. If you want to do that yourself: last year we had 1,170 responses, this year was 1,176.

Except for the map question, all the numbers are available if you hover over the bars. (I would have liked to embed them without hovering, but couldn’t figure out how to do it for faceted plots in vega-lite.)

About You

Do you use Elm?0200400600800Number of RespondentsYes, in side projectsYes, at workNo, but I'm curious about itI used to, but I don't anymoreYes, as a studentNo, and I don't plan to

This was a multiple-choice answer, so the numbers don’t add up to the total—mostly because people use Elm both at work and in side projects.

When you consider these together, about 80% of peple (953) respondents are using Elm in some capacity. Of those, 459 (48%) are using Elm at work, which is cool. It’ll be fun to see at how this changes year-over-year—I hope these numbers increase!

experience-rating1020172018920172018820172018720172018620172018520172018420172018320172018220172018120172018020172018050100150200250Number of RespondentsWhat is your level of experience with functional programming?

This year we don’t have as many people answering that they didn’t have any experience whatsoever. Other than that, we have roughly the same shape of the distribution this year as last year.

This question is designed to get at the idea of how confident people are when using Elm. I think it may be redesigned next year, since these past two years it has not revealed anything useful (other than people click about the middle of the scale.)

languagesJavaScript20172018Python20172018Java20172018Ruby20172018Haskell20172018Elixir20172018C#20172018C20172018C++20172018PHP20172018Clojure20172018TypeScript20172018Scala20172018Go20172018F#20172018Rust20172018Swift20172018Erlang20172018SQL20172018OCaml20172018Lisp20172018PureScript20172018Objective-C20172018Kotlin20172018Bash20172018Perl20172018Scheme20172018CSS20172018HTML20172018Visual Basic20172018Groovy20172018CoffeeScript20172018React201720180200400600800Number of RespondentsWhat programming languages, other than Elm, are you most familiar with?

The differences here year-over-year are pretty significant, but it has more to do with survey design than respondent differences. Last year we asked “What language are you ‘coming from’?” where this year we asked “What programming languages, other than Elm, are you most familiar with?” The new language clarified the intent of the question a lot—and we’ll use it next year—but it meant that we got a lot more responses!

The upshot of this is that most of these languages can’t be compared year-over-year except people’s top language: JavaScript. Not really surprising, at least to me!

watering-holesBlog Posts20172018the Elm Slack20172018the Elm Subreddit20172018Twitter Discussions20172018Podcasts (Elm Town, JavaScript to Elm, etc.)20172018the Elm Discourse20172018Meetups20172018elm-dev Mailing List20172018dev.to20172018Facebook Groups20172018elm-news.com20172018Elm Weekly Newsletter20172018elm-discuss Mailing List20172018elm-lang.org20172018StackOverflow20172018Planet Elm20172018The Elm Documentation20172018IRC20172018KnowThen20172018Google20172018DailyDrip201720180100200300400500Number of RespondentsWhere do you go for Elm news and discussion?

Some surprising changes this year:

What resources did you use to learn Elm?02004006008001,000Number of Respondentsguide.elm-lang.orgthe Elm SlackElm in Action (book)StackOverflowBuilding Web Apps with Elm (Pragmat…Elm for Beginners (KnowThen course)DailyDripProgramming Elm (book)Egghead coursesBeginning Elm (book)The JSON Survival Kit (book)weekly beginners threads on the Elm …Blog PostsDocumentationTrial and Error

The Elm Guide—since rewritten for 0.19—dominates this list. It’s the go-to learning resource!

Below that, we have some interactive resources (the Elm Slack, StackOverflow, and Reddit threads), and books like Elm in Action, Programming Elm, and The JSON Survival Kit.

01usergroupIs there an Elm user group near you?0100200300400500600700Number of Respondents01

About 40% of respondents have an Elm user group near them! Fantastic!

10203040countWhat's the nearest city to you?

This shows the city-level view of respondents. There are hotspots in:

What's the nearest city to you? (Country of Answer)0100200300400Number of RespondentsUnited StatesGermanyUnited KingdomFranceCanadaNorwayAustraliaSwedenNetherlandsSpainSwitzerlandPolandRussiaBelgiumBrazilFinlandCzech RepublicJapanArgentina

Here’s the same data organized by country. When viewed in this way, the United States dominates the list, but all told EU countries plus the UK had 433 respondents, or about the same as the US.

Where do you use Elm?

domainsGaming201620172018Education201620172018E-Commerce201620172018Finance201620172018Health201620172018Productivity201620172018Communication201620172018Internal201620172018Media201620172018Data Visualization201620172018Developer Tools201620172018Entertainment201620172018Music201620172018Reporting201620172018Social Media201620172018Marketing201620172018Research201620172018CMS201620172018Sports201620172018GIS201620172018Transportation201620172018Data Science201620172018Insurance201620172018Web Development201620172018Graphics201620172018Hobby Use201620172018Audio20162017201802004006008001,000Number of RespondentsIn which application domains, if any, have you used Elm?

I’m not sure why gaming dropped last year, but it sure picked up again this year! I was curious what kinds of games people were writing, so I asked! The folks in #gamedev on the Elm Slack pointed me to rofrol/awesome-elm-gamedev as a nice overview, and rofrol/elm-games as a comprehensive list of games in Elm. Enjoy!

A note about “Web Development”… I tried as hard as I could to avoid a situation where people answered this, and was very careful when tagging to try and figure out exactly what people were doing with Elm. “Web Development” isn’t exactly the most helpful answer! As a result, this category dropped way off this year.

experience-length1 year2016201720182 years201620172018Between three months and a year201620172018Under three months2016201720183 years2016201720184 years2016201720185 years2016201720180100200300400Number of RespondentsHow long have you been using Elm?

Overall, people are using Elm longer over time. Makes sense, since people who have been using Elm for one year are likely to use it for another, and another, and so on.

(Note: sorry for the messiness in the chart above; I used vega-lite for these and could not figure out how to get facets to order properly. If you’re a vega-lite expert and want to help fix this, get in touch.)

How far along is your most mature Elm project at work?0100200300400500Number of RespondentsI have not started an Elm project at w…In the planning / learning / exploration …In developmentIn stagingShipped / released to users / in produ…

When people use Elm at work, they tend to get it into production. Hooray!

How is that work project licensed?0100200300400500Number of RespondentsNot applicableClosed sourceOpen source (permissive license like …Open source (share-alike license like …

When work projects are in Elm, they’re mostly closed source, which you can see in these responses. When work projects are open-source, it’s interesting to note that permissive licenses (like BSD-3, under which the compiler and most packages are licensed) are more popular than share-alike licenses like the GPL.

If you aren't using Elm at work, but want to, what's the main challenge preventing your organization from adopting it?020406080100120Number of RespondentsBuy-InUnfamiliarLearning CostHeavy Investment ElsewhereRelatively UnknownFinding a Good FitHiringMaturityBackground: ReactEcosystemBackground: AngularFPInteropClient DemandsFearLegacy ProjectsSustainabilityNot on Backend

The highest response here is “Buy-In”. Most of these were things like “my boss wouldn’t approve it” but some were “my peers don’t like functional languages, or typed languages.” This leads into the second most answered item: Elm (and languages in the ML family) are unfamiliar, especially to people who mostly come from a C-style language background. I think most of the rest of these items stem from these two.

How far along is your most mature Elm side project?0100200300400Number of RespondentsI have not started a side project using …In the planning / learning / exploration …In developmentIn stagingShipped / released to users / in produ…

In contrast with the “how far along is your work project” above, it’s much easier to start a side project but much harder to finish it—there are usually no external deadlines or project managers asking for updates. It makes sense to em, then, that the rate of projects in development would be higher than before, and we see that here.

How is that side project licensed?0100200300400Number of RespondentsOpen source (permissive license like …Not applicableClosed sourceOpen source (share-alike license like …

The Elm compiler and most open-source Elm libraries are licensed as BSD-3, which falls under the top category here.

What is the biggest thing that prevents you from using Elm in your side projects?020406080100Number of RespondentsTimeLearning CostInteropEcosystemType System FeaturesMaturityNot FrontendFinding a Good FitNot on BackendHeavy Investment Elsewhere

This is pretty self-explanatory: people don’t have a lot of time for side projects!

For lessening learning cost, here’s a tip: try challenges like Advent of Code or Project Euler! They provide the framework for trying new languages with small, well-defined problems.

versions0.182016201720180.172016201720180.162016201720180.152016201720180.142016201720180.132016201720180.1220162017201802004006008001,0001,200Number of RespondentsWhat versions of Elm are you using?

0.19 is out now, but it wasn’t when this survey ran. That means that we need to be looking at the usage of 0.18 vs 0.17 and prior. Happily, usage of old versions fell, and current versions rose. I hope to see a similar trend next year with adoption of 0.19!

How do you use Elm?

elm-formatI prefer to use elm-format.20172018I have heard of elm-format, but have not used it.20172018I have not previously heard of elm-format.20172018I have tried elm-format, but prefer not to use it.2017201802004006008001,000Number of RespondentsDo you format your code with elm-format?

Last year the data showed that people were generally in favor of using elm-format. This year, the effect is even stronger! More people have heard of elm-format, and the amount of people who prefer to use it rose.

What tools or libraries do you use to style your Elm applications?0100200300400500600Number of Respondentsplain CSSSASS/SCSSelm-cssstyle-elementsBootstrapMaterial DesignPostCSS

This result—most people using plain CSS or SCSS—tells me that people are integrating Elm into larger existing codebases.

Somewhat unsurprisingly, the first two Elm libraries used are elm-css and style-elements elm-ui. Both are great options for styling Elm apps in a type-safe way!

What tools do you use to build your Elm applications?0100200300400500Number of RespondentsWebpackelm-reactorelm-make standaloneelm-liveshell scriptsMakeBrunchGulpcreate-elm-app

Most people use Webpack to build their Elm applications. Kind of unsurprising, given the support in elm-webpack-starter and elm-webpack-loader.

It was surprising to me to see that the second two results are elm-make and elm-reactor. I’m curious what this means about how people’s applications are delivered and built overall.

What editor(s) do you use to build your Elm applications?0100200300400Number of RespondentsVSCodeVimAtomEmacsSublime TextIntelliJ

VSCode is surprisingly popular! We didn’t previously have a question like this but I would have expected to see Atom at the top, followed by one of Vim or Emacs. That nearly happened here, but I was really surprised to see Atom a third place!

One editor (which fell of the list as fewer than 1% of people answered it) was Kakoune—I was curious so I wrote part of this post in it. It’s got some really interesting ideas about selections. If you’re interested in text editors. maybe check it out!

If you've used JavaScript interop, what have you used it for?050100150Number of RespondentsExternal JS LibrarieslocalStorageFilesMapsWeb AudioFirebaseScrollingDOM QueriesWeb PlatformVisualizationEmbeddingAuthenticationDOM ManipulationAnalyticsDatabasesGoogle MapsTimeWebSocketsFlagsEscape HatchRich Text EditingElectronLegacy CodeGoogle AnalyticsIndexedDBReactViewport

Most people use external JavaScript libraries; things like the AWS SDK and D3 were common.

Next most common is localStorage.

“Files” came in third. I’m curious to see if that’ll hold up next year, now that elm/files and elm/bytes have been released.

What tools do you use to test your Elm projects?0100200300400500600Number of RespondentsI don't write tests for my Elm projectselm-testbrowser acceptance testing (e.g. Cap…elm-benchmark

Almost 50 / 50 “I don’t use this at all” vs “I use the thing you would expect”. This tells me that the split of testing is roughly “50% of people don’t test their Elm applications”.

A useful quetsion, but in retrospect it could have been simpler: “do you test your Elm projects”?

What do you write tests for in your Elm projects?050100150200250300350Number of Respondentsyour most complicated functionmost public functions in your modulesJSON encoders/decodersI don't write tests for my Elm projectsall public functions in your modulesfunctions that return Htmlfunctions that return Cmds

This is more enlightening: people write tests mostly when faced with complex functions whose behavior the compiler can’t check. This is when I write tests too, especially to avoid logical errors or changing values in incompatible ways.

What initially attracted you to Elm, or motivated you to try it?0100200300400Number of RespondentsFPTypesNo Runtime ExceptionsNot JavaScriptTEAOn FrontendSimpleError MessagesLearningPuritySyntaxLike HaskellCorrectnessConference TalksColleagueImmutableFRPEasyBackground: ReduxPerformanceEvan CzaplickiBackground: ReactThoughtfulNot HaskellUsing at WorkCommunityError MessageReliableNovelRichard FeldmanCuriosityBeautifulElegantRefactoringEcosystem

We’ve got a big peak at the top here for functional programming—it’s something a lot of people want to try out, which I’m happy about! Similar thing going on for types; I’m glad people are exploring these areas for themselves. I’ve found them really rewarding!

The third and fourth responses (“No Runtime Exceptions” and “Not JavaScript”) are more in line with what I expected from this question. These are things that are really painful in languages (like JavaScript) for which Elm is a commonly-listed alternative. People want to find solutions to their pains, and if we can help them with that we can grow the Elm community!

(n.b. there’s a looooong tail here, which I’ve cut off by only including items which occurred in 1% or more of responses.)

pain-taggedJSON Decoders20172018Learning20172018FP20172018Ecosystem20172018Interop20172018Documentation20172018Type System Features20172018Scaling20172018Tooling20172018SPA20172018Boilerplate20172018Web Platform20172018Module Organization20172018Lack of Examples20172018Syntax20172018Compilation Times20172018Buy-In20172018Type Classes20172018JSON Encoders20172018Parent/Child Communication20172018Release Cadence20172018Ports20172018Data Modeling20172018Components20172018Leadership20172018Code Reuse20172018HTTP20172018Lack of Learning Resources20172018CSS20172018Verbosity20172018TEA20172018Editors20172018Commands20172018Not on Backend20172018Maturity20172018DOM Queries20172018HTML20172018Breaking Changes20172018020406080100120Number of RespondentsWhat has been your biggest pain point in your use of Elm?

A note about these questions: getting this data is difficult and time-consuming since I have to distill nearly 1,200 plain text inputs into a smallish number of tags for presentation. That means that there are some tags that completely change year-over-year depending on what people type in, and that may not always be accurate. I’ve tried to minimize errors wherever possible, but it’s still a completely human-driven process. That said, I find them particularly valuable as a pulse on how people are feeling year-over-year, so they’ll probably always be in the survey!

This year slightly more people had trouble with JSON Decoders than they did with the learning curve. This flips the #1 and #2 spots year-over-year.

People also had notably less trouble with interop this year, but more problems with documentation.

I find it encouraging that respondents are having much more problems with scaling this year. To me, that means they’ve grown their Elm codebases in such a way that they’re having to think in the bigger picture instead of “hmm, what does Maybe a mean?”

We did see a big drop in people explicitly requesting type classes (or other forms of interfaces), but the total number of requests for type system features remains unchanged.

like-taggedError Messages20172018If It Compiles, It Works20172018Types20172018Refactoring20172018Simple20172018No Runtime Exceptions20172018FP20172018TEA20172018Confidence20172018Syntax20172018Fun20172018Productivity20172018Safe20172018elm-format20172018Clean20172018Community20172018Thoughtful20172018Purity20172018Tooling20172018Maintainable20172018Not JavaScript20172018Data Modeling20172018Easy20172018Design20172018Ecosystem20172018Clear20172018Performance20172018Happy20172018Beginner-Friendly20172018Reliable20172018Makes Me a Better Programmer20172018Union Types20172018Readable20172018Learning20172018Immutability20172018Encourages Good Architecture20172018Frontend Target20172018050100150200Number of RespondentsWhat do you like the most about your use of Elm?

More of the usual culprits for this question!

People like the error messages and types, of course, but we saw a big jump in people saying things like “If It Compiles, It Works” year over year. We also saw a big jump in “Refactoring”, which I think supports my point above about people having more trouble scaling their Elm apps since they’re now having to do that as they’ve grown more advanced.

Another big change was the drop in “Not JavaScript” (47 responses to 18—nearly a 70% decrease!) I hope that long-term Elm is seen as something good in it’s own right, not just a refuge for people who have had a bad experience with JavaScript, so this kind of drop encourages me.

There were a lot of responses saying things like “Elm makes me a better programmer” and “Elm has improved the way I think about my work.” In addition to “Makes Me A Better Programmer”, I tagged those as “Confidence” which roughly doubled in response this year. Those were really nice to tag!