Phoenix LiveView

Real-time server-rendered UIs for Elixir/Phoenix without writing JavaScript. LiveView maintains a persistent WebSocket connection, renders HTML on the server, and sends minimal diffs to the browser on state change. Components are Elixir modules with handle_event/3 for user interactions and assign/3 for state updates. Enables rich reactive UIs (forms, live search, dashboards, chat) with a fraction of the client-side complexity of React/Vue. Used by Fly.io, HexDocs, and many production Elixir apps.

Evaluated Mar 06, 2026 (0d ago) v1.0+
Homepage ↗ Repo ↗ Developer Tools elixir real-time websocket server-side-rendering reactive no-javascript phoenix liveview
⚙ Agent Friendliness
66
/ 100
Can an agent use this?
🔒 Security
88
/ 100
Is it safe for agents?
⚡ Reliability
84
/ 100
Does it work consistently?

Score Breakdown

⚙ Agent Friendliness

MCP Quality
--
Documentation
88
Error Messages
85
Auth Simplicity
90
Rate Limits
88

🔒 Security

TLS Enforcement
100
Auth Strength
85
Scope Granularity
80
Dep. Hygiene
90
Secret Handling
88

CSRF protection via Phoenix. Session auth verified in mount/3. User-triggered events restricted to handle_event/3 — no arbitrary server code execution from browser. Input validated server-side before processing.

⚡ Reliability

Uptime/SLA
88
Version Stability
82
Breaking Changes
78
Error Recovery
90
AF Security Reliability

Best When

You're building interactive Elixir/Phoenix web apps that need real-time features and want server-side simplicity — LiveView eliminates most JavaScript for data-driven UIs.

Avoid When

You need rich client-side animations, offline functionality, or your team doesn't use Elixir. React/Vue are better for complex client-side interaction models.

Use Cases

  • Build real-time agent monitoring dashboards in Elixir using LiveView — stream metrics, logs, and status updates to users without REST polling or WebSocket client code
  • Create complex agent control UIs (forms, multi-step wizards, live search) using LiveView components with server-side validation and state management
  • Implement live collaborative agent interfaces where multiple users see the same real-time updates using LiveView PubSub broadcasting
  • Build AI agent chat interfaces with streaming token-by-token display using LiveView's handle_info for server-push events
  • Create interactive data tables with live filtering, sorting, and pagination using LiveView's phx-click and phx-change bindings

Not For

  • Non-Elixir teams — LiveView is Elixir-specific; use Next.js server components, Turbo/Hotwire, or HTMX for other stacks
  • Mobile native UIs — LiveView renders HTML for browsers; for iOS/Android use React Native or SwiftUI
  • Complex client-side interactions requiring precise animation control — LiveView diffs work great for data updates but CSS animations and scroll position management are harder than in pure client SPAs

Interface

REST API
No
GraphQL
No
gRPC
No
MCP Server
No
SDK
Yes
Webhooks
No

Authentication

Methods: session
OAuth: No Scopes: No

LiveView uses Phoenix session auth — the mount/3 callback receives session data for authentication. No separate auth mechanism; uses host Phoenix app's auth (Devise-equivalent via mix phx.gen.auth).

Pricing

Model: open_source
Free tier: Yes
Requires CC: No

Phoenix LiveView is MIT licensed, maintained by Dashbit and Chris McCord. Free for all use.

Agent Metadata

Pagination
cursor
Idempotent
Full
Retry Guidance
Documented

Known Gotchas

  • LiveView mounts twice — once for static render (no WebSocket) and once for connected state; code that only runs on connected? false causes flash of un-mounted content; use connected? checks for async data loading
  • process_info leaks in LiveView — subscriptions (PubSub.subscribe), timers (Process.send_after), or ETS tables created in mount must be cleaned in terminate/2; forgetting cleanup causes resource leaks per disconnected user
  • Live navigation vs regular navigation — push_navigate for LiveView-to-LiveView, redirect for LiveView-to-regular-page; using redirect for LiveView causes full page reload and loses client state
  • phx-debounce required for live search — without debounce, every keystroke sends a handle_event; add phx-debounce='300' to text inputs to batch typing events
  • LiveView components (HEEx ~H sigil) vs LiveComponents — functional components (def render) are stateless, LiveComponent (use Phoenix.LiveComponent) has own state/events; use LiveComponent only for isolated stateful pieces
  • handle_info for server push must match subscribed PubSub messages — if PubSub.broadcast sends {:update, data} but handle_info only matches {:new_data, data}, messages are silently dropped

Alternatives

Full Evaluation Report

Detailed scoring breakdown, competitive positioning, security analysis, and improvement recommendations for Phoenix LiveView.

$99

Scores are editorial opinions as of 2026-03-06.

5215
Packages Evaluated
26151
Need Evaluation
173
Need Re-evaluation
Community Powered