RepoJournal
Elixir & Phoenix

Elixir & Phoenix

Elixir, Phoenix, LiveView, and Ecto - the BEAM web stack

Keep up with Elixir & Phoenix in about 3 minutes a day: what actually shipped — the commits, pull requests, releases, and security advisories that matter.

One email a day. Unsubscribe in one click.

Pick a date

Topics: Elixir & Phoenix Full archive →

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.

One email a day. Unsubscribe in one click.

Action items

References

  1. [1] Make websocket disconnect codes explicit ↗ phoenixframework/phoenix
  2. [2] Add eex suffix to phx.gen.auth template override test ↗ phoenixframework/phoenix
  3. [3] Ensure Tailwind dark: variant works with system theme ↗ phoenixframework/phoenix
  4. [4] Avoid false positives on cascading warnings elixir-lang/elixir
  5. [5] Wrap quote in a function that will implement recursive types elixir-lang/elixir
  6. [6] Avoid warnings when generating docs elixir-lang/elixir
  7. [7] Optimize gather_keys/2 in Channel to avoid Enum.at/2 on maps ↗ phoenixframework/phoenix_live_view
  8. [8] Fix stream_async return error message ↗ phoenixframework/phoenix_live_view
  9. [9] Ecto.Schema: Allow embedded_schema to have non-virtual :any fields ↗ elixir-ecto/ecto

Quick answers

What shipped 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. In total, 14 commits and 7 pull requests landed.
Who contributed to Elixir & Phoenix on May 23, 2026?
5 developers shipped this update, including mtrudel, bhtabor, SteffenDE, preciz, and wojtekmach.
What were the notable Elixir & Phoenix updates?
Make websocket disconnect codes explicit, Add eex suffix to phx.gen.auth template override test, and Ensure Tailwind dark: variant works with system theme.

More from Elixir & Phoenix

Daily updates, in your inbox

Follow Elixir & Phoenix

Keep up with Elixir & Phoenix in about 3 minutes a day: what actually shipped — the commits, pull requests, releases, and security advisories that matter.

or

One email a day. Unsubscribe in one click. Read a past issue →

Elsewhere on the wire

Want every project, not just this one?