$ cat elixir/week/2026-10-12.log
the week in review · Oct 12 – Oct 18, 2026
Phoenix rewrites every CI workflow to hardened patterns
By RepoJournal · composed from the cited sources · human-reviewed weekly · methodology
Elixir's week ran the other direction: Registry gained an :off_heap option and the compiler team kept chasing allocations out of Uri and binary_slice.
Standardize and harden GitHub Actions workflows phoenixframework/phoenix
A second pass over phoenixframework/phoenix workflows, following the earlier hardening and the docs.yml addition, standardizes structure and caching and applies the hardened patterns where they were missed. If you fork Phoenix or template your own CI off it, the reusable patterns here are the ones to copy.
Build each pair as a single binary in URI.encode_query elixir-lang/elixir
URI.encode_query now encodes each value straight into the accumulator holding the encoded key and delimiter, so "This avoids intermediate binary allocations and string concatenations for each pair". Query-string building in the hot path gets cheaper without an API change.
Add :off_heap option to Registry (#15992) elixir-lang/elixir
Registry takes an :off_heap option for its storage. For a registry holding a very large number of entries, that moves the table out of the process heap, a memory-layout decision you opt into rather than get by default.
Keep comments on do-end block keywords when formatting elixir-lang/elixir
Comments written after do-end block keywords, as in a `rescue # comment` line, used to be dropped by the formatter. They now move to the start of the relevant block body, so a `mix format` run stops losing text you wrote.
Dispatch consolidated protocols through literal external funs elixir-lang/elixir
Consolidated protocol dispatch previously called impl_for!/1 then the implementation through a dynamic Module.fun(...) call, compiling to apply with an export table lookup per call. Protocol functions now compile the same way before and after consolidation, to literal external funs.
Fix protocol consolidation crash on beams from older Elixir versions (#15995) elixir-lang/elixir
Consolidation no longer crashes when it encounters beams compiled by older Elixir versions. That matters for anyone consolidating against an existing _build from a previous toolchain.
Return :error when casting malformed datetimes without seconds elixir-ecto/ecto
Ecto.Type.cast/2 for the naive and utc datetime types raised FunctionClauseError on strings shaped like a datetime but missing seconds; it returns :error as callers expect. A cast of untrusted input now fails cleanly instead of crashing.
Fix deprecated Dict, HashDict, and HashSet calls elixir-lang/elixir
Alongside: the deprecated Dict, HashDict, and HashSet branches now resolve against Elixir.Dict rather than the absent Erlang module, @deprecated messages in both Elixir and Phoenix lost redundant text that ExDoc already renders, and Ecto stopped dropping interpolated true filters a later or_where depends on.
$ ls elixir/week/ # the briefings behind this review
Keep up with Elixir & Phoenix in about 3 minutes: what actually shipped — the commits, pull requests, releases, and security advisories that matter.
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.