HACKER Q&A
📣 ak_111

What Happened to Elm?


I remember years ago I spent sometime to learn it as I was curious how a purely functional front-end language feels like, and genuinely thought it had a good chance of being massively adapted in the near future, especially with what seemed like a vibrant community.

However, I got distracted by a data science career and toolchain. Am in the process of starting my first SaaS as a solo founder and was looking at what languages to use and was surprised to see that Elm...seems dead? As an example I did a search on hackernews and it hardly got mentioned in the last year (both comments and posts!)

Am wondering if anyone can provide some more light on what happened to the language? Is it a safe bet? And what is a suitable good replacement for it?


  👤 josephcsible Accepted Answer ✓
In version 0.19, the core team hardcoded a whitelist into the compiler of which projects are allowed to use native code (which happened to basically be the core team's pet projects). This basically crippled the language beyond usability for everyone else. https://news.ycombinator.com/item?id=22821447 https://news.ycombinator.com/item?id=17842400 https://news.ycombinator.com/item?id=16510267

As for a replacement, I'd look towards Haskell. At a language level, it looks really similar to Elm, and it's been having a lot of work done towards being more practical on the Web lately, e.g., GHC 9.6 getting a WASM backend merged.


👤 satvikpendem
TypeScript won. I was watching this video by Evan Czaplicki the creator [0], and what struck me was that back then, Evan was absolutely right. He was right that in the high level, we needed a typed JS, but he was wrong in the lower level details, at least in terms of market share. TypeScript won precisely because it doesn't start off as intimidating for JS users, while others like Reason and Elm died off, but ironically TS is way more complex than either of the others in its type system.

Another factor for this is that Syntax Matters™. When Gleam (language on the Erland runtime, cousin of Elixir) started out, it had a Haskell-like syntax, but this was found to be a barrier for adoption, so when the creator changed it to be more C and Rust-like, the adoption rate picked up significantly [1]. In the same vein, perhaps Elm was just too esoteric for those coming from JS. I strongly believe the reason Rust became so popular is that it's an ML in C clothing, rather than being a pure ML like OCaml. With curly braces and all, it's more accessible and then people start learning about the more functional features like maps, folds, and so on.

Elm also had quite a rocky history with the BDFL not allowing other people to use the features the compiler maintainers could use, such as escape hatches, which are documented in other parts of HN. This article [2] is a particularly good overview of why some people left.

[0] https://www.youtube.com/watch?v=oYk8CKH7OhE

[1] https://news.ycombinator.com/item?id=22902462#22903210

[2] https://news.ycombinator.com/item?id=22821447


👤 roebk
Elm is perfectly stable and usable. It's a shame there's not a little more communication / a wider core team working on the the parts of Elm that could reduce the friction for the average web development task.

There's Gren https://gren-lang.org/ which is a fork of Elm. Gren has nodeJS and web storage a support, along with a package manager which can install from github (iirc). I'm eagerly watching the development of this project, hopefully it can provider value and grow into a strong alternative.

I loved working with Elm. It forced me to grow as a developer and appreciate all the benefits advantages that comes with a pure functional programming language. I truly hope Evan can start to win back the lost mindshare.


👤 gregors
They made HUGE mistakes not listening to feedback from their userbase. It's still a cool piece of tech, but they wouldn't budge on a lot of things that were dealbreakers to a lot of people. That's their right to do so of course. In a very competitive area of frontend, people chose to spend their effort and time elsewhere.

👤 squeegee_scream
My professional Elm experience is as follows:

* 2017 - 2019

* 2021 - 2023

* 2023 - ?? (I'm starting a new job next month with Elm)

In my experience Elm isn't dead. But it is good enough. The lack of rapid changes, updates, etc are a feature, not a bug. I hated working in React TypeScript and what felt like constant updates to major libraries, including React and TS themselves.


👤 quickthrower2
My opinion: I wouldn’t use Elm as a solo founder, as you want to put your energy into shipping and Elm, while very good will probably slow you down when you hit the thing it cannot do, and then you need to fork it and change the core code.

React on the other hand, has a vastly larger ecosystem already and is designed to work well with 3rd party code.

Middle ground is using an Elm-like architecture within another framework. The keyword here is “TEA architecture” where TEA means The Elm Architecture, or also MVU (Model View Update)

Elm is excellent and has done a lot of good for the front end world through knock on effects. It is good fun to use. I have a few projects based on it open source. So I am not against Elm I just think it will be annoying if the goal os to ship fast.


👤 xarvh
Elm is still really good for web applications, and the community is still active.

I used Elm in production for many years and it is my choice for most production projects.

Exceptions are

- If you need to do a lot of number crunching and can't use Elm ports

- If you need to use WebGL

- If you depend on very specific JS libraries and can't use web components

Many of the controversial decisions do make sense if you dig deep enough, but... You need to dig enough.

I agree that there is an utter lack of transparency and communication from Evan and the core team.

Worse, there is no acknowledgment of the problem nor any attempt to try and truly involve the community in the future of the language.

Many enthusiastic people have left the community, leaving only those who can tolerate being told what is best for them.

Personally, I stopped contributing to the community in any way.

I started to write my own replacement language, http://squarepants.io/ which also tries to address some of Elm's weaknesses when scaling up (I was fortunate enough to use Elm on some large projects).


👤 spion
A while ago I picked up PureScript again, and it has a new life. The tooling (both cli and editor) has matured, the number of code examples has grown a lot. Its quite pleasant to use!

All the tools and other goodies are listed here https://discourse.purescript.org/t/recommended-tooling-for-p...

What I found particularly fresh for a Haskell-like language was the cookbook (https://github.com/jordanmartinez/purescript-cookbook) which contains lots of small-to-medium-size realistic example. They are to get you started and as a result do wonders for the learning experience.


👤 slimsag
Check out Roc[0][1] by Richard Feldman; it's early-stages (perhaps earlier stages than Elm?) but from everything I've seen it looks a bit like a spiritual successor to Elm, though focused more on native applications (but still seems to have its sights set on webassembly support too)

[0] https://www.roc-lang.org

[1] https://github.com/roc-lang/roc


👤 GiorgioG
Elm is and always has been (AFAIK) a one-man project. It's not suitable for anything that you depend your livelihood on. Look at Svelte, Vue, React, Angular.

👤 rstarast
There's an active fork of Elm in https://gren-lang.org/.

👤 wolfadex
Elm is like American politics. The most vocal people are divided as strongly as if they'd stabbed each other in the back. The majority people aren't vocal and just go about their day, sometimes using it and sometimes not.

My 2 cents. Don't use this place as a metric for whether or not something is successful or worth trying. 20 years ago this community would tell you not to use Ruby or Javascript, but today they'd call you an idiot for not using them.


👤 justatdotin
the elm ecosystem is thriving.

what's interested me most recently are the various efforts to bring elm to the backend -

* choon keat's https://package.elm-lang.org/packages/choonkeat/elm-webapp/

* mario's https://lamdera.app/

* dillon's https://package.elm-lang.org/packages/dillonkearns/elm-pages...

What initially got my attention was that release which removed signals and abandoned FRP. I remember being struck by the idea of an emerging language that was stripping out major features. To me that suggested a strong vision. So I looked closer, and the suggestion was confirmed. My joy of Elm is as much about what it does not allow, as what it does.


👤 innocentoldguy
I loved working with Elm. For me, it was the best of the frontend frameworks due to its functional, Haskell-like nature (Edited to add this comment: totally my subjective opinion, of course). I've found Phoenix's LiveView to be the best alternative for me so far.

👤 z5h
As someone who has done commercial and personal work in Elm for many years, I know that lots of people are actively and productively using it with fewer issues than most other mainstream languages. Of course there are issues in any language or ecosystem

So what is HAPPENING with Elm, is people are productively using it.


👤 xupybd
F# fable Elmish is really nice and similar.

I've heard good things about purescript too.

I love using the SAFE stack in F#. You get the Elm architecture, and the same language front and back. You can even have shared code between the two. Fable remoting makes api calls as easy as an async function call. The back end has access to most of the .net eco system.

F# isn't the purist choice but it's a nice pragmatic functional first language.


👤 srhtftw
I tried using Elm for a side solo. Lots of things to like about it and I learned quite a bit. Played with a lot of toy projects.

But I hit a wall when I wanted to use some templating and communication modules written in Javascript. Working with things like protocol buffers and externally generated html through ports was very frustrating. As I kept working around Elm's limitations I began feeling this wasn't a language I could use part-time. I either needed to go "all in" or find something that made it easy for me use external Javascript. Looked at giving dillonkearns' Typescript api product a try but his e-commerce site crashed...

So now I'm trying out Yew, Rust and WebAssembly. I miss Elm's compiler but wasm_bindgen is way easier to use than Elm ports.


👤 alphanumeric0
I just applied for an Elm job a month ago. It's not dead, it's just super niche.

👤 zem
the core team took a "my way or the highway" attitude, and people picked the highway. the language is still around and being actively developed but the community has largely moved on.

👤 kjellsbells
For anyone who saw this headline and wondered what happened to Elm the email client, the short answer is it was overtaken by Pine and Mutt and is essentially dead. RIP elm, you were my first client and a dear friend.

https://en.wikipedia.org/wiki/Elm_%28email_client%29?wprov=s...


👤 hombre_fatal
fwiw, Elm is still my daily driver for my one man projects. Though I understand why people wouldn’t want to begin learning an ecosystem that seems dead. Elm is still my favorite solution to front end development.

But compared to an ecosystem that is truly dead, Elm has lively Slack and forum communities, and every StackOverflow question is answered such that I don’t even both trying to procrastinate on SO by helping beginners anymore—someone will have beaten me to offer help!

Right now, Elm’s Slack is one of my favorite places to hang out and chat on the internet. While it is a bit confusing why compiler work has slowed down so much, it’s not the best way to judge an ecosystem.


👤 fyzix
Maintainers were too tenacious imo. Inflexible to a frightening degree. I liked the architecture and used it extensively with f# + fable + elmish but these days...I'm using sveltekit + typescript for everything frontend, for it's unmatched velocity.

👤 chris_armstrong
When you look at Elm with similar projects, like Melange or Rescript, they’re all “dead” in the sense that they aren’t the moving targets that most people expect of the Javascript ecosystem.

That said, they are still under active development with their own small communities achieving what they set out to do, and no more. No expansive rewrites or fancy new features.

Compare with Typescript, which always is “improving” because it’s trying to provide type inference around a loose Javascript model, so there’s always more complexity to be added.


👤 softinio
I think the alternatives to consider would be:

- https://www.purescript.org/

- https://reasonml.github.io/en/

Or like others have suggested typescript and the usual libs and frameworks


👤 beefman
AppRun is a JS/TypeScript library inspired by Elm: https://apprun.js.org/

Does very well on comparisons of performance and code size: https://medium.com/dailyjs/a-realworld-comparison-of-front-e...


👤 jokethrowaway
It truly was the best frontend language

Unfortunately or fortunately, beauty and utility emerge out of decentralised chaos not out of dictatorship, no matter how enlightened


👤 bbkane
This was just discussed in the Elm Discourse as well: https://discourse.elm-lang.org/t/request-elm-0-19-2-any-upda...

This thread (mostly) by current Elm users mostly tracks emotions here on HN


👤 jahewson
> Am in the process of starting my first SaaS as a solo founder and was looking at what languages to use

Use the language you know best. Your tech stack is not the product:

https://hoho.com/posts/your-stack-is-not-the-product/

As for what happened to Elm? It reached a local maxima. Evan didn't want its purity to be compromised by external JS interop which cut it off from most of the open source ecosystem. If you never need to leave its confines, it's a wonderful place to be, but an engineer's job is to ship.


👤 schemescape
I'd never heard of Elm until I ran across Iced [1] ("Iced is a cross-platform GUI library focused on simplicity and type-safety. Inspired by Elm.").

Has anyone who liked Elm tried Iced? Any thoughts?

I've been checking out various GUI libraries for Rust, but I don't have time to investigate them in depth--so I thought maybe someone might have already done the investigation for me :)

[1] https://docs.rs/iced/latest/iced/


👤 bargainbin
To add to the discourse here, it's worth considering that since Elm came about WASM has come along in huge strides, and at this point you're faced with a "Why learn Elm when I can use and compile to WASM".

See projects like Yew and Blazor.


👤 mjaniczek
> Is it a safe bet?

Yeah, for web apps it's a good choice if you want simple robust maintainable code.

I mean, for quick throwaway scripts I'd go with JS (as a Bash replacement), but for web apps, Elm strikes a really good balance of features.

The language is not dead, the community mostly lives on [Elm Slack](https://elm-lang.org/community/slack) as opposed to Reddit or StackOverflow.


👤 danbruder
this question comes up often enough there is a site dedicated to it: https://iselmdead.info/.

for the open minded: building in elm will change the way you see software development. like the matrix red pill blue pill scene - you won’t be the same afterwards


👤 kn8
ReScript - super good, actively developed: https://rescript-lang.org/

👤 eeue56
If you're curious for a successor language that has better interop - along with fixing some of the problems that I saw a lot with Elm (former core team member), check out Derw: https://www.derw-lang.com/. The blog is updated frequently with whatever I'm working on, check out the latest post talking about what features are coming to Derw this year: https://derw.substack.com/p/things-coming-to-derw-feburary-2...

And to kick things off, here's a blog post on "Why Derw?": https://derw.substack.com/p/why-derw-an-elm-like-language-th...


👤 mauro_c8
I love elm! It changed the way I program in every other language. Its philosophy resonates with me.

What happened with it? Not much. It just continues working and being useful for the people that use it.

Some folks have started working on a fork of the language, called gren.

Also, last year a package was published that added a different way of interoping with javascript (elm-taskport).

Appart from that, the language is pretty stable and solid in its niche. I don't see it going away in the next 10 years at least.


👤 vosper
They essentially stopped development at 0.19 saying that it was good enough, development went quiet, and then the lead developer went off to work on other things.

👤 VLM
This isn't actually an elm post or a functional post although I know "a little" about that specific topic.

All new industries or genres or fads or anything really, go thru rapid growth of small players which get gobbled up into a couple giant monoliths as time goes on, which makes them really slow, which allows distruptive newcomers to arrive eventually (although not yet in this case).

So about five years ago I remember a study of the then new-ish functional front end project repos on Github and there were only 25x as many scala repos as elm and about 15x as many haskell repos as elm. So without knowing anything about the techs or even talking about the techs you know as rapid growth ends and consolidation begins that elm's going to disappear because its simply too small. Every 2018 elm project converting to scala before 2023 would just be a decimal place in scala or haskell numbers.

For another example see the auto industry. A century before "the big three" there were hundreds of small car companies. All gone!


👤 savanaly
Pardon the excessive length of this response but I think about Elm all day every day and love the chance to talk about it on HN! Currently and for a couple months I've spent several hours per day working on my side project in Elm. Over the two years before that my usage was lighter, probably averaging out to a dozen hours per month. I consider myself experienced in Elm and my history with it goes back to basically the launch of 0.19, the last major version (which is four years old now, I believe).

Elm the language:

Generally rock solid for my purposes as a single dev making "home cooked" apps and games. There are very occasionally things where I'm held back by its inflexibility, but these are more than made up for by the positives. What elm has going for it is that it's totally type safe (not just mostly type safe like typescript) and that Evan and the community did a really good job designing primitive libraries for getting stuff done that have all the virtues you could wish for in other languages. Like great error messages, trying to make sure there's only one way to do something, etc.

Elm the community:

Extremely welcoming and helpful if like me you stick to Slack help and discussion channels. In Github comments threads and on forums like HN things can get spicy though. Elm is generally not as welcoming to folks looking to blaze their own path and build empires of their own as most of the JS ecosystem is. It's not that it never happens or can't happen; people do build their own large empires within Elm (I'm using Lamdera at the moment which is a fork of Elm making it work on the backend as well as frontend and it's definitely built by someone who had a vision related to Elm but which required drastic changes). It's just that that's less common and harder to do here than in other languages. I think there are a lot of folks like me though who are content to paint their masterpieces "within the lines" so to speak and even find comfort in the limitations. It's way easier if you are like me and find yourself doing like I said "home cooked" apps that you can cut scope on if you have to because of the language.

One final note which I've said before and I'll say again: I don't think the language is dead but rather "done". It works great for making a frontend app, and can continue to exist in this state through the year 2100 as far as I care. The creator has promised security updates and perhaps some non-foundational improvements down the line, and that's good enough for me. I'm much happier with that arrangement than with, say, React land where for all you know next year they're gonna release Hooks 2: Electric Boogaloo and you have to learn a bunch of new stuff and all the old libraries will have to update.


👤 naet
One of my previous employers had an Elm frontend and a React frontend. Basically all development on the Elm side was slower. New hires generally had used React before in at least some capacity, but everyone had to learn Elm from scratch. When I left Elm was slowly being phased out but there were still a lot of Elm components left over.

For me, it felt like a heavier cognitive load to do anything with Elm since it was another abstraction level away from the DOM. The quote "I know this is possible in Javascript, but we chose Elm and it makes it very hard" from the "Why I'm leaving Elm" article (https://lukeplant.me.uk/blog/posts/why-im-leaving-elm/#techn...) is something I never said to my boss but still resonates strongly as how I often felt internally frustrated when trying to work with Elm. Some of this might have been because I was very familiar with JavaScript and less familiar with something like Haskell, but I think it's fair to say that most people working on the front end web are likely the same.

For example look at the "simple" counter example... there's a ton going on that doesn't seem intuitive, and even having used Elm professionally I double take looking at lines like "update : Msg -> Model -> Model" or "main = Browser.sandbox { init = init, update = update, view = view }": https://guide.elm-lang.org/architecture/buttons.html

The equivalent React simple counter example (https://reactjs.org/docs/hooks-intro.html) is much more understandable IMO/. Even if you haven't ever used React before, it looks much more like typical HTML and JavaScript. React has plenty of gotchas and is far from perfect, but in terms of getting junior web developers making their first pull requests in our codebases React took way less effort and learning.

Elm isn't dead, it has some dedicated FP fans as users and works fine. It is niche though, and I don't expect that to change.

--

As a side note, it always irked me to see the word "I" in either an Elm error message or the official documentation. In errors it felt overly friendly or personified rather than giving me straight technical info, and in documentation it felt concerning that a single person's opinion might have an overly strong influence and that person might not listen to the broader community on some key issue and prevent progress.


👤 myth_drannon
Might check this discussion on Elm's forum.

https://discourse.elm-lang.org/t/request-elm-0-19-2-any-upda...


👤 Existenceblinks
I think creator's burnout happened due to personal style of working was misaligned with users (developers)' demands. I think there are some points the creator made the right choice such as disallow native code, no more fancy type like typeclass etc. And the bell curve of developers can't stand pure <-> impure interop. They rather like messy types like Typescript where js thingy can float around freely with all insane effects everywhere, plus hackable and ugly structural typing .. unsound. They thought people don't love type like they do but people rather love elegant type! .. it's off-topic now, yeah.

👤 Chadtech_
I still program in it for my day job, as I have at various companies for the last 8 years. I still love it!

It has been fairly quiet as far as development is going. But I do know there are things in the works for another big update.


👤 danabrams
Based on this thread and many others, one thing’s for sure, Elm was polarizing!

👤 pharmakom
- Elm is still great but it seems to have lost momentum

- The compiler allowlist in Elm did not go down well

- Fable (F#) is a great alternative to Elm

- F# is a better server language than Elm on Node.js IMO so is a great full-stack pick


👤 akamaka
Elm was fun and I learned a lot from it, but a purely functional language doesn’t fit cleanly on top of a real-world web browser environment, which is rife with states and side effects.

It was possible to build some elegant projects with Elm if you accepted the limitations, but the messy reality of web apps doesn’t fit within its pure model of the world.


👤 truculent

👤 rk06
There was this blog post which highlights the issues https://lukeplant.me.uk/blog/posts/why-im-leaving-elm/

👤 jedberg
Looks like the last update was in 2005:

http://www.instinct.org/elm/#download

Oh, you weren't talking about the email client. :)


👤 1-more
I write it every day and it whips ass.

👤 cperciva
Most users switched over to pine, but the final nail in its coffin came when mutt was released; mutt stills sucks, but it sucks less.

👤 jmclnx
For some reason I thought they changed the license, thus people leaving it.

👤 gregopet
My experience with Elm was very short and rather funny: a programmer I vaguely know approached me (on Twitter?) and with the usual zealotry of functional programmers started convincing me "You just have to try this language out, it's the best, and they've made it IMPOSSIBLE to get a runtime error!"

Now I don't believe in miracles, the Easter bunny or code that has no way of failing, but I said fine, JS can be terrible (it was even more so I'm those days), so I googled the project webpage, opened it and WHAM, blank page, with only "Error: database connection not available" or something like that written on it. Let me tell you, I laughed so hard as I was closing the tab! And while I'm sure it was just extremely bad luck, I never looked at the project again. They had their chance, and maybe don't make bold promises you can't keep?