The Wire · Showcase
PHOENIX WEBSOCKETS GET EXPLICIT DISCONNECT CODES, ELIXIR TIGHTENS TYPE TRACKING
By RepoJournal · Filed · About Elixir & Phoenix
Phoenix just made websocket disconnections explicit and predictable, while Elixir's type system got smarter about tracking and fewer false positives.
Phoenix shipped a critical clarity upgrade for websocket disconnect codes [1], finally making the disconnect flow explicit instead of implicit. This came from collaboration with the Bandit maintainers and fixes a long-standing pain point in real-time applications. On the same cycle, Phoenix's phx.gen.auth template system now consistently uses .eex suffix [2], tightening up generator consistency. Tailwind dark mode with system theme detection landed too [3], closing a gap for theme-aware applications.
Over in Elixir core, the type system got measurable smarter. Cascading warnings that used to flood your compile output are now gone [4], thanks to a fix that only emits warnings for missing exports in actually-defined modules. Type tracking for recursive types improved [5], and the compiler now avoids false positives when generating docs [6]. These aren't flashy, but they're the kind of compiler polish that stops making you disable warnings.
LiveView hit a performance wall and removed it. The gather_keys function in Channel was using Enum.at/2 on maps, which is O(n) garbage [7]. The optimized version uses maps.iterator directly and benchmarks at 1.4x to 1.9x faster. Stream_async error messages got fixed too [8], cutting noise in your error reports. Ecto expanded embedded_schema flexibility, allowing non-virtual :any fields [9], which unblocks dynamic JSON payloads in embeds.
Action items
- → Update Phoenix if you're shipping real-time features - websocket disconnect codes are now explicit and testable phoenixframework/phoenix [plan]
- → Upgrade LiveView to pick up the 1.4x-1.9x gather_keys speedup phoenixframework/phoenix_live_view [monitor]
- → Rebuild against latest Elixir - compiler warnings will drop significantly elixir-lang/elixir [monitor]
References
- [1] Make websocket disconnect codes explicit ↗ phoenixframework/phoenix
- [2] Add eex suffix to phx.gen.auth template override test ↗ phoenixframework/phoenix
- [3] Ensure Tailwind dark: variant works with system theme ↗ phoenixframework/phoenix
- [4] Avoid false positives on cascading warnings elixir-lang/elixir
- [5] Wrap quote in a function that will implement recursive types elixir-lang/elixir
- [6] Avoid warnings when generating docs elixir-lang/elixir
- [7] Optimize gather_keys/2 in Channel to avoid Enum.at/2 on maps ↗ phoenixframework/phoenix_live_view
- [8] Fix stream_async return error message ↗ phoenixframework/phoenix_live_view
- [9] Ecto.Schema: Allow embedded_schema to have non-virtual :any fields ↗ elixir-ecto/ecto
FAQ
- What changed in Elixir & Phoenix on May 23, 2026?
- Phoenix just made websocket disconnections explicit and predictable, while Elixir's type system got smarter about tracking and fewer false positives.
- What should Elixir & Phoenix teams do about it?
- Update Phoenix if you're shipping real-time features - websocket disconnect codes are now explicit and testable • Upgrade LiveView to pick up the 1.4x-1.9x gather_keys speedup • Rebuild against latest Elixir - compiler warnings will drop significantly
- Which Elixir & Phoenix repositories shipped on May 23, 2026?
- phoenixframework/phoenix, elixir-lang/elixir, phoenixframework/phoenix_live_view, elixir-ecto/ecto