How We Got to LiveView

fly.io
7 min read
fairly easy
We're working on super fun problems and are looking for more people to join us. In particular: we're looking for full-stack developers. We expect this will be a good role for early-to-mid-level career developers.
I'm Chris McCord. I work at Fly.io and created Phoenix, an Elixir web framework. Phoenix provides features out-of-the-box that are difficult in other languages and frameworks. This is a post about how we created LiveView, our flagship feature.

LiveView strips away layers of abstraction, because it solves both the client and server in a single abstraction. HTTP almost entirely falls away. No more REST. No more JSON. No GraphQL APIs, controllers, serializers, or resolvers. You just write HTML templates, and a stateful process synchronizes it with the browser, updating it only when needed. And there's no JavaScript to write. It's a revolution for web development.

Do you remember when Ruby on Rails was first released? I do. Rails was also a revolution. It hit on the idea of using an expressive language and a few well-chosen, unifying abstractions to drastically simplify development. It's hard to remember what CRUD app development was like before Rails, because the framework has been so influential.

Today, I work in a language called Elixir. I spend my days building Phoenix, which is Elixir's goto web framework. Unlike Rails, Phoenix is more than just an Elixir web framework. In the process of building Phoenix, I believe we've hit on some new ideas that will change the way we think about building applications in much the same way Rails did for CRUD apps.

That's a big claim. To back it up, I want to talk you through the history of Phoenix, what we were trying to do, and some of the problems we solved along the way. There's a lot to say. I'll break it down like this:

How real-time app features got me thinking about syncing updates, rather than rendering static content, as the right primitive for connecting app servers to browsers.

How trying to build sync.rb with Ruby led me to Elixir, and why I think Elixir is uniquely suited to solve these problems.

How working in Elixir lit up "distributed computing", not as a radioactive core of a complicated database but as a…
Read full article