RepoJournal
Elixir & Phoenix Elixir & Phoenix
138 wires and counting

$ follow Elixir & Phoenix

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

or

fair warning: these emails are deeply technical. diffs, version numbers, CVEs, benchmark deltas. if that's not your idea of a good read, this isn't your newsletter.

Folds into your digest — weekly by default, monthly if you prefer. Unsubscribe in one click.

$ status

wire 2026-10-20
stories 25

© 2026 RepoJournal Home Showcase How it works Privacy

$ the-wire · showcase

Formatter bugs that changed program meaning, and a LiveView assign that always fired

By RepoJournal · Filed · About Elixir & Phoenix · Composed from the cited sources · methodology

Today's Elixir commits are formatter correctness fixes: two of them were rewriting expressions into code that parsed differently, plus a LiveView wrapper that resent global attributes on every render.

Remove quadratic complexity from internal APIs elixir-lang/elixir

by José Valim

José Valim removed quadratic complexity from internal APIs, which is the kind of change that only shows up as slowness on large inputs rather than as a test failure. It lands on main, not in a tagged release, so it reaches you on your next Elixir upgrade.

Keep parens on anonymous function calls with do-end blocks elixir-lang/elixir

by mandar1045

The formatter printed anonymous calls with `:skip_if_do_end`, so `callback.(conn, opts) do` came out as `callback. conn, opts do`, which does not parse, and `fun.(a).(b) do c end` could parse to something different entirely. Anonymous call parens are now `:required`, matching the `call(call)(arguments)` clause below it.

Keep parens on unary operators on the left of in elixir-lang/elixir

by mandar1045

`!!x in y` was formatted as `!(!x in y)`, which the parser reads as `!(!(x in y))`, a different result; it now formats as `!((!x) in y)`, with the same fix applied to `not` and to `Macro.to_string/1`. `!x not in y` was never affected and is left alone.

Only mark global attributes as changed when they change phoenixframework/phoenix_live_view

by emanoelims

A component declaring `attr :rest, :global` had its wrapper assign the caller's globals with `Phoenix.Component.assign/3`, and that key is never in `__given__`, so `assign/3` always flagged it changed. Every expression reading those attributes was resent on re-render even when no global attribute changed; the fix marks them changed only on an actual change.

Retry focus if it did not move phoenixframework/phoenix_live_view

by SteffenDE

In the client, focus is now retried when it did not move, addressing the case tracked in the linked issue. Smaller items alongside it: a spec correction for `Route.build/14` in Phoenix and a docs fix for `Join.escape/3` in Ecto.

Quick answers

What shipped in Elixir & Phoenix on October 20, 2026?
Today's Elixir commits are formatter correctness fixes: two of them were rewriting expressions into code that parsed differently, plus a LiveView wrapper that resent global attributes on every render. In total, 16 commits and 9 pull requests landed.
Who contributed to Elixir & Phoenix on October 20, 2026?
8 developers shipped this update, including José Valim, mandar1045, rhcarvalho, Evan Phoenix, Łukasz Samson, SteffenDE, emanoelims, and Eric Meadows-Jönsson.
What were the notable Elixir & Phoenix updates?
Remove quadratic complexity from internal APIs, Keep parens on anonymous function calls with do-end blocks, and Keep parens on unary operators on the left of in.