RepoJournal
Elixir & Phoenix Elixir & Phoenix
156 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-11-02
stories 23

© 2026 RepoJournal Home Showcase How it works Privacy

$ the-wire · showcase

Recursive types get readable names, Ecto errors get relative paths

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

Elixir's type printer now names recursive types instead of expanding them, and Ecto stores query expression files relative to the current directory so worktrees and reused builds stop reporting the wrong checkout.

Recursive type pretty printing elixir-lang/elixir

by gldubc

The type printer displays recursive types through named definitions such as `rec(x, nil or {integer(), x})`, covering tuples, maps, lists, functions, and dynamic types while keeping `and`, `or`, and `not` expressions intact without re-expanding recursive fields. Reading a type error on a self-referential structure no longer means chasing an unfolding expansion.

Store query expression files relative to the current directory elixir-ecto/ecto

by onnimonni

QueryExpr, BooleanExpr, JoinExpr, and FromExpr captured the caller's absolute `file` at compile time for `Ecto.QueryError` messages, so a copy of a project reusing its `_build` (git worktrees for parallel coding agents, copy-on-write clones, restored CI caches) reported the original checkout's files. The new `Ecto.Query.Builder.file/1` stores the file relative to the current directory, matching...

Evaluate the subject of to_existing_atom/2 once elixir-lang/elixir

by bmalum

When the allowed list passed to `String.to_existing_atom/2` or `List.to_existing_atom/2` is a literal, the call compiles into a case expression; the translated first argument was spliced into both the case subject and the fallback call to `__to_existing_atom__/2`, so any non-variable argument was evaluated twice when no atom matched and the error could report a value the case never saw. The sub...

Track which guards may fail elixir-lang/elixir

by José Valim

José Valim landed guard analysis that tracks which guards may fail, closing two open issues against the compiler's guard handling. The commit message is a single line, so treat this as groundwork rather than a documented behavior change.

Improve checks in `return_compare` and `mismatched_ordered_comparison` elixir-lang/elixir

by Lukasz Samson

Lukasz Samson tightened the checks in `return_compare` and `mismatched_ordered_comparison` and dropped the unused `number_type?/1`. Elsewhere it was a quiet day: a test-suite warning removed, a Dependabot bump of eslint, eslint-plugin-jest, and jsdom in Phoenix's dev tooling.

Quick answers

What shipped in Elixir & Phoenix on November 2, 2026?
Elixir's type printer now names recursive types instead of expanding them, and Ecto stores query expression files relative to the current directory so worktrees and reused builds stop reporting the wrong checkout. In total, 15 commits and 8 pull requests landed.
Who contributed to Elixir & Phoenix on November 2, 2026?
6 developers shipped this update, including gldubc, José Valim, Lukasz Samson, bmalum, dependabot, and onnimonni.
What were the notable Elixir & Phoenix updates?
Recursive type pretty printing, Store query expression files relative to the current directory, and Evaluate the subject of to_existing_atom/2 once.