Why I’m Leaving Elm
I&#x27;ve used Elm professionally for about a year, having done full rewrites of both a bloated React&#x2F;Redux SPA and a map data visualizer with complex JS interop using ports to Leaflet, AWS Cognito, etc. Luke Plant&#x27;s blog post doesn&#x27;t at all reflect my experiences with Elm or my feelings about the core team.<p>For those not privy to the Elm tea, a brief primer: this blog post is primarily concerning a months-old issue regarding the removal of the ability to use native modules, which are effectively patches to the Elm runtime[1] which circumvent the core features of the language that provide its greatest strengths: a genuinely helpful compiler and ironclad runtime guarantees (still have yet to encounter a production runtime error that wasn&#x27;t on the JavaScript side of things!) This &quot;feature&quot; (used loosely) was largely undocumented, always verboten from distribution in user packages, and never intended as anything more than a stopgap measure in extremely rare cases.[2] It was &#x2F;officially&#x2F; not a core language feature intended for widespread usage, and consistently advised against by the Elm team. The removal of native modules was spoken about publicly months before the breaking upgrade. It came as no surprise to me. As an engineer who tries really hard to be responsible, I do not build software which relies on features which are advertised as &#x27;do not use unless absolutely necessary&#x27; and are soon-to-be deprecated unless I&#x27;m willing to accept the inherent risk of doing so.<p>The core Elm team was, in my opinion, extremely communicative, well-reasoned, and thoughtful in this change and in others, despite the inconvenience to a small subset of people. For each feature discussed in Luke&#x27;s post, there is an accompanying Discourse thread[3], discussion on Google groups, Github gists[4], etc., that carefully lays out the reasoning, and carefully consider the scope of a change (in the instance of the removal of custom operators, the Elm team analyzed the package ecosystem and determined less than 5% of packages were affected)[4].<p>I won&#x27;t cover the moral arguments around the obligations of open source maintainers as this has been covered ad nauseam with the Clojure and Rust fiascos of a similar sort - though I personally believe maintainers don&#x27;t owe anyone anything, and I try to treat all free software graciously, as a precious gift, lucky to receive it at all. I will say that Elm&#x27;s somewhat slow, closed BDFL-ish governance is well-documented as well[5, 6], available to all who seek to understand the Elm development process and decide for themselves if this is an ecosystem to hitch their wagon to. Of course the Elm maintainers get to patch their own runtime with native modules, because they are implementing core parts of the language, it&#x27;s practically tautological. That users living in userland cannot do it is not unfair; it&#x27;s a language design feature. What Luke seems to see as a stifling of an open community by the closure of issues and deletion of posts on the Discourse is often basic organizational maintenance to handle redundancies. Conversations around these issues have happened for months and in some cases years, and decisions have been made. They may not be to everyone&#x27;s tastes. That should be just fine! If someone went to Famous Amos Cookies on Discourse, Slack, their mailing list, and opened a Github issue and PR suggesting this genius idea they just had, it&#x27;s so good, wait for it - an oatmeal cookie without raisins! - I hope they would clean it up, close the issue, delete my posts, etc., for their own sanity. Not to mention that the opening to Luke&#x27;s opus here is an admission of his own rudeness to the Elm team on most of these fora. Of course the relationship with maintainers will be strained with this kind of behavior.<p>There are critiques of Elm, to be sure. The pace of releases is somewhat slow, custom operators might be nice for 3rd party parsing libraries, it might be cool to have a PR merged in to get that fuzzy feeling only OSS contributors get. But you cannot reasonably argue that Elm&#x27;s team has been unfair, discriminatory, uncommunicative, or arrogant (pathos, so much pathos here!). I don&#x27;t generally post comments anywhere, but articles like this are irresponsible and damaging not just to the well-being of maintainers who are being generous with their time trying to make something with great care, but to people (like many top level commenters here) who might have tried Elm but won&#x27;t due to an inside baseball post from a spurned developer. It makes me actually sad, like want-to-cry sad.<p>[1] <a href="https:&#x2F;&#x2F;newfivefour.com&#x2F;elm-lang-basic-native-module.html" rel="nofollow">https:&#x2F;&#x2F;newfivefour.com&#x2F;elm-lang-basic-native-module.html</a> (any somewhat experienced Elm developer will get nervous looking at this trivial example and immediately see what might break)<p>[2] <a href="https:&#x2F;&#x2F;groups.google.com&#x2F;forum&#x2F;#!msg&#x2F;elm-dev&#x2F;1JW6wknkDIo&#x2F;H9ZnS71BCAAJ" rel="nofollow">https:&#x2F;&#x2F;groups.google.com&#x2F;forum&#x2F;#!msg&#x2F;elm-dev&#x2F;1JW6wknkDIo&#x2F;H9...</a> (2015!)<p>[3] <a href="https:&#x2F;&#x2F;discourse.elm-lang.org&#x2F;t&#x2F;native-code-in-0-19&#x2F;826" rel="nofollow">https:&#x2F;&#x2F;discourse.elm-lang.org&#x2F;t&#x2F;native-code-in-0-19&#x2F;826</a><p>[4] <a href="https:&#x2F;&#x2F;gist.github.com&#x2F;evancz&#x2F;769bba8abb9ddc3bf81d69fa80cc76b1" rel="nofollow">https:&#x2F;&#x2F;gist.github.com&#x2F;evancz&#x2F;769bba8abb9ddc3bf81d69fa80cc7...</a><p>[5] <a href="https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=o_4EX4dPppA" rel="nofollow">https:&#x2F;&#x2F;www.youtube.com&#x2F;watch?v=o_4EX4dPppA</a><p>[6] <a href="https:&#x2F;&#x2F;github.com&#x2F;elm&#x2F;projects&#x2F;blob&#x2F;master&#x2F;roadmap.md" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;elm&#x2F;projects&#x2F;blob&#x2F;master&#x2F;roadmap.md</a>