Are those downsides still valid today?

Debugging looks awful and is largely unhelpful

Still the case, though if you do it right, it’s just as in every other language

Js

x = 1; y = 0;

fun1(x); //changes both x and y
Console.log("x", x);
fun2(y,x); //changes both x and y
Console.log("y", y);

Elm

{-| This example showcases how you would simulate mutable data.
This is NOT the default way how you would program in elm.
-}
{x = 1,y = 2}
|> (\model -> 
    { model
    | x = fun1 model.x |> Debug.log "x"
    }
  )
|> (\model -> fun2 model.x model.y)
|>(\model ->
  let
    --This is a nice way to quickly print something
    _ = Debug.log "y" model.y
  in
  model
  )

You cannot install Elm packages from anywhere other than the official package repository.

You can clone a package and then add the path to your elm.json file. But this was always the case.

Most of the tutorials / examples online are out of date due to v0.19

Nope. Personally I like to point people towards Beginning Elm for a good introduction to Elm. And from there you will find lots of other tutorials.

The docs are incomplete

Sadly yes. There is still an example at the end of the official Guide that’s just a “Todo”. Here is a blog post discussing the missing example.

Elm core development lives in a walled garden that you can’t touch, even if you wanted to

True. Here is a post by evan about it:

Pull requests being open for 2+ years

Still true. Here’s an official response. TLTR: It’s intended.

Runtime errors can happen

True. But not the way described in the blog post. If you use Elm each day, expect to get maybe one runtime error every year or so. Most of them are bugs and looking into the corresponding issue will give a fast fix for it. That said i would not know any of them of by heart.

Missing key features

At the time of writing, Elm has no implementation for server side rendering, web sockets or localStorage.

You can do a lot of things using Ports. There are some things that are definitely NOT to complicated for using Ports. But it those cases you should look into web components. If you find something that can’t be done using Ports or web components, it would be worth writing a blog post about it. It would definitely be interesting to read.

Lacks the ecosystem of its siblings

True. I’d say Elm as fewer packages then React (The community is also smaller) but the quality of the packages and specially the documentations is higher. That said you can use React and Elm together.

Also, as a side note: Elm Awesome is not the right places to find packages. Instead, use Elm Catalog

7 Likes