small medium large xlarge

Programming Elm: Build Safe and Maintainable Front-End Applications


Cover image for Programming Elm

Programming Elm

Build Safe and Maintainable Front-End Applications


Elm brings the safety and stability of functional programing to front-end development, making it one of the most popular new languages. Elm’s functional nature and static typing means that runtime errors are nearly impossible, and it compiles to JavaScript for easy web deployment. This book helps you take advantage of this new language in your web site development. Learn how the Elm Architecture will help you create fast applications. Discover how to integrate Elm with JavaScript so you can update legacy applications. See how Elm tooling makes deployment quicker and easier.

Customer Reviews

Programming Elm is wonderfully accessible for folks coming to Elm from JavaScript. Jeremy Fairbank takes the time to introduce each concept thoroughly and thoughtfully, so the learning path is quite smooth.

- Brian Hicks

Organizer, elm-conf

Programming Elm is a joyful an empathetic primer on building software with Elm, and I recommend it to anyone interested in adding Elm to their front-end development toolkit.

- Luke Westby

Engineer, Creator of Ellie, NoRedInk

I love the approach of teaching real-world solutions by starting from a project with real-world problems.

- Kevin Yank

Host, Elm Town Podcast

See All Reviews

Choose Your Format(s)

  • $21.95 In Stock
  • Ebooks are DRM free.

  • Ebook delivery options.

What You Need

You will need the latest version of Elm, 0.19, along with a browser to run the examples in this book.

Contents & Extracts

  • Preface
    • Why Elm?
    • Who Is This Book For?
    • What’s In This Book?
    • How to Read This Book
    • Online Resources
    • Acknowledgements
  • Get Started with Elm
    • Get Started with Functions
    • Use Static Types
    • Build a Static App
    • What You Learned
  • Create Stateful Elm Applications
    • Apply the Elm Architecture excerpt
    • Create the View
    • Handle State Changes
    • The Elm Architecture Life Cycle
    • What You Learned
  • Refactor and Enhance Elm Applications
    • Refactor with Good Practices
    • Comment on Photos
    • What You Learned
  • Communicate with Servers
    • Safely Decode JSON excerpt
    • Fetch from HTTP APIs
    • What You Learned
  • Go Real-Time with WebSockets
    • Load Multiple Photos
    • Receive Photos from WebSockets
    • What You Learned
  • Build Larger Applications
    • Organize the View
    • Simplify Messages
    • Use Nested State
    • Use Extensible Records
    • Remove View Duplication
    • Prevent Invalid States
    • What You Learned
  • Develop, Debug, and Deploy with Powerful Tooling
    • Debug Code with the Debug Module
    • Rapidly Develop and Deploy Elm Applications
    • What You Learned
  • Integrate with JavaScript
    • Embed an Elm Application
    • Upload Images with Ports
    • Display Uploaded Images
    • What You Learned
  • Test Elm Applications
    • Test-Driven Development in Elm
    • What to Expect When You’re Expecting
    • Fuzz Your Tests
    • Test an Application
    • What You Learned
  • Build Single-Page Applications
    • Build a Skeleton SPA
    • Route to a Component Page
    • Welcome Back Picshare
    • Handle Dynamic Routes
    • What You Learned
  • Write Fast Applications
    • Benchmark Code
    • Traverse Large Lists
    • Get Lazy
    • Build Lazy Applications
    • What You Learned
  • Install Elm
    • All Roads Lead to Node
    • Install the Elm Compiler
    • Install Development Tools
  • Run the Local Server
    • Install and Run the Server
  • Elm Package Versions
    • Install an Older Package Version


Jeremy Fairbank is a web developer with a master’s degree in computer science. He has many years of experience in front-end development and full-stack development, working heavily with JavaScript. He is an avid conference speaker and teacher, presenting on web development topics. He is passionate about front-end development and its future, now taking that passion to the world of Elm.