Building reliable web apps with elm

Presenting 'Elmtroduction'
Presenting 'Elmtroduction'

I think it was about 12-18 months ago that I first started looking into elm-lang. I had felt that my skill-set had been plateauing for about 6 months and I was looking for something new to motivate and inspire me.

Ideally I wanted something that was just out of reach, so to speak. Something that I could apply my existing knowledge to, yet have that same ‘deep-end’ sensation I had when I first started writing JavaScript professionally.

Elm v0.15 had just been released and was describing itself as a new functional language for building UIs, that compiles to JavaScript. It boasts of guaranteeing no runtime exceptions thanks to it’s polite and helpful inferred type system.

With having several years experience in building JavaScript applications and only limited knowledge of functional programming - Elm sounded exactly what I was looking for.

Since then I have:

  • consumed any and every elm related resource available.
  • battled the inferred type system, which I now depend on.
  • learnt some fundamentals of functional programming, which have taught me new ways of approaching problems.
  • travelled to S.F and attended an Elm Hack Night.

Most important. I have been completely inspired, motivated and a lot more curious since learning elm.

I’m not sure if it’s made me a better programmer, but it’s definitely fuelled my passion for building things.


  • elm-calculator: An experiment in abstracting data-attribute values from elements onClick.
  • elm-survey: An experiment with Ports.
  • elm-github-user-repos: An experiment with elm’s Http library.
  • elm-subscriptions: A sandbox that builds previous basic Signal examples using subscriptions (introduced in 0.17).
  • elm-simple-json-debugging: A sandbox for understanding how to debug a JSON response.
  • slackm8: An app that pulls in Slack app members, shuffles then into groups and assigns to new channels.
  • elm-convert-case: An experiment with using elm’s Regex.
  • elm-scroll-progress: A package for rendering a progress indicator for window.onscroll.
  • is-online: A package for indicating if the app has an internet connection.
  • reading-time: A medium-esque article reading stats package.
  • … and many others that will never see the light of day.


Top 5 resources