Skip to main content

Phoenix Explained: Real-Time Web Apps That Never Stop

Updated 2 min readMarkdown

Introduction

Most web frameworks treat real-time features (live updates, chat, collaborative editing) as an add-on: bolt on WebSockets, manage connections yourself, hope it scales. Phoenix, released in 2015 and built on Elixir, treats real-time as the default. It inherits the Erlang VM's fault tolerance, so a crashing connection affects one user, not the server, and it adds LiveView: server-rendered pages that update live over a persistent connection, without writing JavaScript. It is the framework that made "never stops" a web feature.

Channels, LiveView, and fault tolerance

Phoenix's model rests on a few distinctive ideas:

  • Channels: named topics over WebSockets, so a browser subscribes to a room, a feed, or a document, and the server pushes updates to exactly the right subscribers.
  • LiveView: server-side rendering with live updates: user events travel to the server, the server re-renders the changed part, and only the diff travels back. Interactive pages, almost no client JavaScript.
  • Presence: built-in tracking of who is online in a channel, so user lists and typing indicators come almost free.
  • Fault tolerance by inheritance: every connection is an Elixir process, supervised and isolated, so failures stay small and the system heals itself (see Elixir for the model).

A channel shows the shape: join a topic, broadcast to everyone in it:

defmodule MyAppWeb.RoomChannel do
  use MyAppWeb, :channel
  def join("room:lobby", _payload, socket) do
    {:ok, socket}
  end
  def handle_in("new_msg", %{"body" => body}, socket) do
    broadcast!(socket, "new_msg", %{body: body})
    {:noreply, socket}
  end
end

One process per connection, one broadcast to the whole room, and if a connection crashes, only that connection restarts.

The honest trade

Phoenix's trade is ecosystem and hiring: a smaller community and job market than Rails or Node, and Elixir's functional style takes adjustment. Its conventional structure is also opinionated (productive once learned, unfamiliar at first). Phoenix suits projects where real-time features and reliability matter most, while Rails or Node suit projects where ecosystem depth or hiring dominates.

Real-time, without stopping

Phoenix is real-time web apps that never stop: channels, LiveView, and presence, on Elixir's fault-tolerant foundation. It trades mainstream ecosystem for live features that scale by default, and for apps where "live" is the product, that trade is the point.

Originally published at https://practicaldevblog.blogspot.com/2026/10/phoenix-explained-real-time-web-apps.html

No comments yet. Be the first to comment.