127 wires and counting

$ follow Rails

Keep up with Rails 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-09-11
stories 19

© 2026 RepoJournal Home Showcase Explore How it works Privacy

$ the-wire · showcase

Ractor-safe Active Record reflections and a faster BroadcastLogger

By RepoJournal · Filed · About Rails · Composed from the cited sources · methodology

Rails is pushing Active Record toward Ractor compatibility with eager-frozen reflection caches, while a separate patch speeds up the default logger's hot path.

Active Record's reflection cache was the blocker preventing `Post.find`, `Post.where`, and similar calls from running inside a Ractor, because the cache was not frozen. The fix deep-freezes both the reflection and the aggregated reflection, following the pattern of earlier Ractor safety work that eager-loads otherwise lazily memoized values [1]. Expect the same review attention as prior Ractor patches: lazy memoization has to go before the object can be shared across Ractors.

In the same Ractor-safety effort, `timestamp_attributes_for` moves into `SchemaContext` and is computed when the schema loads rather than lazily. As long as the schema is loaded on the main Ractor, those values can then be used on non-main Ractors, and the `reload_from_schema_cache` hook is no longer needed because the `SchemaContext` object is discarded on reload [2]. A related change stops writing to the reloader class when there is nothing to reload, which helps Ractor workers that never need a reload avoid writing to the Reloader instance variable [3].

On the performance side, `BroadcastLogger` is the default logger and usually broadcasts to a single other logger, so `logger.debug` calls that are filtered out by the log level sit on a hot path. Where possible the dispatch now delegates directly via argument forwarding, skipping the arg array, kwarg hash, and method lookup from `send`, which is well optimized in Ruby 4.0 and later [4]. The multiple-logger case still falls back to the general path.

Action Cable users get a documentation fix: the guide's connection callbacks section has been corrected [5]. No behavior change, but worth pulling if you were following the old text.

Quick answers

What shipped in Rails on September 11, 2026?
Rails is pushing Active Record toward Ractor compatibility with eager-frozen reflection caches, while a separate patch speeds up the default logger's hot path. In total, 12 commits and 7 pull requests landed.
Who contributed to Rails on September 11, 2026?
5 developers shipped this update, including Edouard-chin, hmcguire-shopify, etiennebarrie, jhawthorn, and hachi8833.
What were the notable Rails updates?
Introduce CoW when adding Active Record reflections, Move timestamp_attributes_for into SchemaContext, and Don't write to the reloader class when there is nothing to reload.