<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Ruby Weekly</title>
    <description>A free, once–weekly e-mail round-up of Ruby news and articles.</description>
    <link>https://rubyweekly.com/</link>
    <item>
      <title>Patch Rails now: 21 security fixes in one release</title>
      <link>https://rubyweekly.com/issues/825</link>
      <description>

  

    
    
    
  




&lt;table border=0 cellpadding=0 cellspacing=0 align="center" border="0"&gt;
  &lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em;"&gt;
  &lt;div&gt;    
    &lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;
&lt;td align="left" style="padding-left: 4px; font-size: 15px; line-height: 1.48em;"&gt;&lt;p&gt;#​825 — November 5, 2026&lt;/p&gt;&lt;/td&gt;
&lt;td align="right" style="padding-right: 4px; font-size: 15px; line-height: 1.48em;"&gt;&lt;p&gt;&lt;a href="https://rubyweekly.com/link/192550/rss" style=" color: #0055bb;   "&gt;Read on the Web&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    
    &lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0 12px;"&gt;&lt;p&gt;Ruby Weekly&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em;"&gt;
  &lt;a href="https://rubyweekly.com/link/192493/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/wk23kxvdsqvd7rhiqr2g.jpg" width="640" style="    line-height: 100%;    "&gt;&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;span&gt;🔒&lt;/span&gt; &lt;a href="https://rubyweekly.com/link/192493/rss" title="rubyonrails.org" style=" color: #0055bb;    font-size: 1.1em; line-height: 1.4em;"&gt;Rails 8.0.5.2 and 8.1.4.1 Released to Fix 21 Security Issues&lt;/a&gt;&lt;/span&gt; — A rare 21-advisory release, led by a &lt;em&gt;critical&lt;/em&gt; Active Storage bug (when using ImageMagick/&lt;code&gt;mini_magick&lt;/code&gt;) where attaching a specially crafted image can let an uploader write (and sometimes read) arbitrary files. A &lt;a href="https://rubyweekly.com/link/192494/rss" style=" color: #0055bb;   "&gt;Strong Parameters&lt;/a&gt; bypass, &lt;code&gt;remote_ip&lt;/code&gt; spoofing in 8.1, and more make this a key update.&lt;/p&gt;
  &lt;p&gt;Mike Dalessio (Rails Core) &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;&lt;p&gt;💡 &lt;a href="https://rubyweekly.com/link/192495/rss" style=" color: #0055bb; font-weight: 600;   "&gt;Christine Seeman's walkthrough&lt;/a&gt; covers the advisories you may want to give a closer look, what can break on upgrade, and workarounds if you &lt;em&gt;can't&lt;/em&gt; upgrade.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  &lt;a href="https://rubyweekly.com/link/192492/rss" style=" color: #0055bb;   "&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/c_limit,w_480,h_480,q_auto/copm/acf02560.png" width="135" height="135" style="padding-top: 12px; padding-left: 12px;     line-height: 100%; "&gt;&lt;/a&gt;
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/192492/rss" title="go.fastruby.io" style=" color: #0055bb;    font-size: 1.05em;"&gt;🚨 Rails 8.0 Security Support Ends Nov 7. Upgrade with AI&lt;/a&gt;&lt;/span&gt; — Our AI agent works on your own CI and opens small PRs only when your suite is green. It dual-boots with `next_rails`. Nothing merges without your review. &lt;a href="https://rubyweekly.com/link/192492/rss" style=" color: #0055bb;   "&gt;Join the beta waitlist and get a free Rails 8.1 readiness check&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;FastRuby.io® | AI-native Rails Maintenance &lt;span style="text-transform: uppercase; margin-left: 4px; font-size: 0.9em;   color: #997 !important; padding: 1px 4px; "&gt;sponsor&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/192504/rss" title="www.aha.io" style=" color: #0055bb;    font-size: 1.05em;"&gt;Moment of Ruby: An Argument for Nothing&lt;/a&gt;&lt;/span&gt; — How can you tell "no argument was supplied" from an explicit &lt;code&gt;nil&lt;/code&gt; or &lt;code&gt;false&lt;/code&gt; without a sentinel constant? Here's a cute, small Ruby idiom to do it.&lt;/p&gt;
  &lt;p&gt;Chris Zempel (Aha!) &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;p&gt;&lt;strong&gt;⚡️ IN BRIEF:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;📘 &lt;a href="https://rubyweekly.com/link/192499/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Programming Ruby 4&lt;/a&gt;, the sixth edition of the &lt;em&gt;Pickaxe&lt;/em&gt;, is now in print!&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🇺🇸 &lt;a href="https://rubyweekly.com/link/192500/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;RubyConf 2027&lt;/a&gt; is heading to Portland, Oregon on May 24-26, with early-bird tickets going on sale November 11.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On Ruby 4.0, defining a method in a module costs more for each class that includes it, &lt;a href="https://rubyweekly.com/link/192501/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;up to 4x slower than 3.4&lt;/a&gt;. Rails route helpers, in particular, run into this, and a backport to 4.0 has been requested.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🇧🇪 Ruby is &lt;a href="https://rubyweekly.com/link/192502/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;returning to FOSDEM&lt;/a&gt; with a &lt;em&gt;'Ruby Beyond Rails'&lt;/em&gt;-themed &lt;a href="https://rubyweekly.com/link/192503/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;devroom&lt;/a&gt; on January 30 in Brussels. &lt;a href="https://rubyweekly.com/link/192551/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;The CFP&lt;/a&gt; closes December 1.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/192552/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;RubyMine 2026.3&lt;/a&gt;, JetBrains' popular commercial Ruby IDE, has been released.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;span&gt;⚠️&lt;/span&gt; &lt;a href="https://rubyweekly.com/link/192496/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Trilogy Fixes an SQL Injection in Rails' Favored MySQL Client&lt;/a&gt;&lt;/span&gt; — &lt;a href="https://rubyweekly.com/link/192497/rss" style=" color: #0055bb;   "&gt;Trilogy&lt;/a&gt;, the MySQL client GitHub built and Rails recommends, had a 9.3-rated SQL injection vulnerability which has been fixed and requires an upgrade to v2.13.2+, if you're using it. Greg Molnar built a vulnerable app to see how bad the vulnerability is and &lt;a href="https://rubyweekly.com/link/192498/rss" style=" color: #0055bb;   "&gt;found it's worse than he first thought&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;Trilogy maintainers &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;&lt;p&gt;
🔒 It's a busy time for security releases, so I've included a section at the end of the issue rounding up some releases that have landed to fix numerous vulnerabilities.
&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/192505/rss" title="evilmartians.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;A Look at Lemans, the Harness Behind the &lt;em&gt;Agents on Rails&lt;/em&gt; Benchmark&lt;/a&gt;&lt;/span&gt; — A tour of the Ruby harness Evil Martians built for the Rails Foundation's &lt;a href="https://rubyweekly.com/link/192506/rss" style=" color: #0055bb;   "&gt;coding agent benchmark&lt;/a&gt;, plus some fun in how agents have tried to cheat at it…&lt;/p&gt;
  &lt;p&gt;Dementyev and Petrov (Evil Martians) &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/192507/rss" title="www.johnnunemaker.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Don't Make a Human Do What AI Is Amazing At&lt;/a&gt;&lt;/span&gt; — John shares &lt;a href="https://rubyweekly.com/link/192508/rss" style=" color: #0055bb;   "&gt;Nunebot&lt;/a&gt;, the markdown prompt he uses to sweep his apps and gems, pick one fix per repo, prove the fix with a failing-then-passing test, and open a PR.&lt;/p&gt;
  &lt;p&gt;John Nunemaker &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;&lt;p&gt;💡 Along similar lines, David Bryant Copeland asks &lt;a href="https://rubyweekly.com/link/192509/rss" style=" color: #0055bb; font-weight: 600;   "&gt;why review AI-generated code at all&lt;/a&gt;, arguing the effort is better spent on tooling that catches problems mechanically.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/192510/rss" title="serpapi.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Painless Web Scraping With The New SerpApi's Extract API&lt;/a&gt;&lt;/span&gt; — Scrape any public webpage or add search to your Ruby application with one developer-friendly API built by Ruby engineers.&lt;/p&gt;
  &lt;p&gt;SerpApi &lt;span style="text-transform: uppercase; margin-left: 4px; font-size: 0.9em;   color: #997 !important; padding: 1px 4px; "&gt;sponsor&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;p&gt;📄 &lt;a href="https://rubyweekly.com/link/192511/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Modernizing a Rails App from 2018&lt;/a&gt; – How an ancient Rails 5 app was ported by moving it into a fresh app rather than upgrading in place. I did an upgrade the hard way recently, and I don't blame them! &lt;cite&gt;Kevin Campusano&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📺 &lt;a href="https://rubyweekly.com/link/192512/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;When Rails Met Fibers: Migrating Sidekick from Puma to Falcon&lt;/a&gt; – A 42-minute keynote on moving Shopify's AI assistant onto &lt;a href="https://rubyweekly.com/link/192513/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Falcon&lt;/a&gt;. &lt;cite&gt;Williams, Lawhorn and Barnes&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://rubyweekly.com/link/192514/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;When Two Background Jobs Target the Same Record&lt;/a&gt; – A lost-update reproduction under Solid Queue, and a look at where to fix it. &lt;cite&gt;Syed Aslam&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://rubyweekly.com/link/192515/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;IP-Based Route Restrictions on Heroku with Rails&lt;/a&gt; &lt;cite&gt;Daniela Baron&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📺 &lt;a href="https://rubyweekly.com/link/192516/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;DHH's &lt;em&gt;Kaigi on Rails 2026&lt;/em&gt; Keynote: Where the Tracks Go Next&lt;/a&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0;"&gt;&lt;p&gt;🛠 Code &amp;amp; Tools&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em;"&gt;
  &lt;a href="https://rubyweekly.com/link/192517/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/kwfopyhyzzdffb8ycbz8.jpg" width="640" style="    line-height: 100%;      "&gt;&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/192517/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Spinel 2026.10.25: Matz's Ruby Compiler Continues to Advance&lt;/a&gt;&lt;/span&gt; — The second dated release of Matz's ahead-of-time Ruby-to-native compiler brings in a ton of stuff since &lt;a href="https://rubyweekly.com/link/192518/rss" style=" color: #0055bb;   "&gt;I reviewed it six months ago&lt;/a&gt;! It's faster, offers a new WASM target, supports more of the standard library, and strings now behave as single shared objects like in CRuby. It's a great time to play with it!&lt;/p&gt;
  &lt;p&gt;Yukihiro Matsumoto &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;&lt;p&gt;💡 Stan Lo's &lt;a href="https://rubyweekly.com/link/192519/rss" style=" color: #0055bb; font-weight: 600;   "&gt;new, one-page Spinel intro&lt;/a&gt; rounds the project up generally, and explains how it differs to CRuby, what it &lt;em&gt;can't&lt;/em&gt; compile, and its &lt;a href="https://rubyweekly.com/link/192520/rss" style=" color: #0055bb; font-weight: 600;   "&gt;ruby-bench&lt;/a&gt; results.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/192521/rss" title="www.tigerdata.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;&lt;code&gt;group_by_day&lt;/code&gt; Shouldn't Time Out on Your Biggest Table&lt;/a&gt;&lt;/span&gt; — TimescaleDB extends Postgres so daily counts stay fast on huge tables. Same ActiveRecord. &lt;a href="https://rubyweekly.com/link/192521/rss" style=" color: #0055bb;   "&gt;Get $1000 credit&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;Tiger Data (creators of TimescaleDB) &lt;span style="text-transform: uppercase; margin-left: 4px; font-size: 0.9em;   color: #997 !important; padding: 1px 4px; "&gt;sponsor&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/192553/rss" title="www.jruby.org" style=" color: #0055bb;    font-size: 1.05em;"&gt;JRuby 10.1.3.0 Released with Many Fixes and Improvements&lt;/a&gt;&lt;/span&gt; — A big release for JRuby's Ruby 4.0-compatible line. Mutex, Queue and sockets now go through the Fiber scheduler, method and branch coverage are implemented (so SimpleCov's branch mode can work), and Prism is now merged into JRuby itself.&lt;/p&gt;
  &lt;p&gt;JRuby Team &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;&lt;p&gt;💡 &lt;a href="https://rubyweekly.com/link/192554/rss" style=" color: #0055bb; font-weight: 600;   "&gt;JRuby 10.0.8.0&lt;/a&gt; also landed for those on the Ruby 3.4-compatible line.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/192522/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Duel: Fail CI When Your Code Gets Slower&lt;/a&gt;&lt;/span&gt; — Runs your benchmarks on two versions of your code side by side and fails if the new code is slower.&lt;/p&gt;
  &lt;p&gt;Erik Berlin &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/192523/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;QueryStash: Cache Hot, Slow-Changing Queries Below Active Record&lt;/a&gt;&lt;/span&gt; — Caches lookups of your choosing across requests at the adapter level (so your calls don't need to change) with TTLs calculated from each result.&lt;/p&gt;
  &lt;p&gt;Persona &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/192524/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;rails-query-command: Use Rails 8.2's &lt;code&gt;bin/rails query&lt;/code&gt; on 7.2 to 8.1&lt;/a&gt;&lt;/span&gt; — A backport of Rails 8.2's forthcoming &lt;code&gt;bin/rails query&lt;/code&gt; command that runs on older Rails versions. It runs Active Record expressions or SQL with database-write protection and returns paginated JSON, which is ideal for agents and scripts.&lt;/p&gt;
  &lt;p&gt;Lázaro Nixon &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/192525/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;TaskProgress: Progress Bars for Task Trees, from Terminal to Browser&lt;/a&gt;&lt;/span&gt; — Track nested task trees spread across threads, Fibers, subprocesses and Ractors (on Ruby 4) and render them to a terminal/log/browser with SSE/Turbo.&lt;/p&gt;
  &lt;p&gt;Julik Tarkhanov &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/192526/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;RubyGems and Bundler 4.0.24&lt;/a&gt; – Bundler can now read the Ruby version from &lt;code&gt;mise.toml&lt;/code&gt;'s inline table form and reports which locked gems can't be materialized on your platform.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/192527/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Ferrum 0.20&lt;/a&gt; and &lt;a href="https://rubyweekly.com/link/192528/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Cuprite 0.20&lt;/a&gt; – The Chrome/CDP driver and its Capybara adapter add &lt;code&gt;page.console&lt;/code&gt; message collection and real &lt;code&gt;Logger&lt;/code&gt; support.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/192530/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Grover 2.0&lt;/a&gt; – Security release for the library that transforms HTML into PDFs, PNGs or JPEGs using Puppeteer and Chromium.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/192529/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Net::SSH 8.1&lt;/a&gt; – Three breaking changes, including no interactive prompts when stdin isn't a TTY.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px;"&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;p&gt;📰 Classifieds&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;p&gt;More AI commits and more test runs mean more waiting. &lt;a href="https://rubyweekly.com/link/192531/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;WarpBuild&lt;/a&gt; runs your Ruby CI 2x faster at half the cost. &lt;a href="https://rubyweekly.com/link/192531/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Get $50 in free credits&lt;/a&gt; with &lt;code&gt;START50&lt;/code&gt;.&lt;/p&gt;
 
&lt;p&gt;🔺 Made a library? Written a blog post? Found a useful tutorial? &lt;a href="https://rubyweekly.com/link/192532/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Share it with the Ruby community on RubyFlow&lt;/a&gt;, the Ruby and Rails community linklog.&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0;"&gt;&lt;p&gt;⚠️ A recent wave of Ruby security news&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Following the &lt;a href="https://rubyweekly.com/link/192555/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;regexp fixes we covered in our emergency issue&lt;/a&gt;, k0kubun has asked Ruby core to decide &lt;a href="https://rubyweekly.com/link/192533/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;whether compiling untrusted strings into a Regexp should be supported at all&lt;/a&gt;, and if so, to request CVEs for them. It goes to the November 12 dev meeting. Meanwhile, Infield shows &lt;a href="https://rubyweekly.com/link/192534/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;how to probe an end-of-life Ruby&lt;/a&gt; for the bugs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A dozen advisories have hit Ruby's HTML sanitizing stack: &lt;a href="https://rubyweekly.com/link/192535/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Loofah 2.25.3&lt;/a&gt;, &lt;a href="https://rubyweekly.com/link/192536/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Nokogiri 1.19.5+&lt;/a&gt;, &lt;a href="https://rubyweekly.com/link/192537/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;rails-html-sanitizer 1.7.2&lt;/a&gt; and &lt;a href="https://rubyweekly.com/link/192538/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Sanitize 7.0.2&lt;/a&gt;. The big one is a mutation XSS in Loofah's HTML5 scrubbers that affects the &lt;em&gt;default&lt;/em&gt; allowlist.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/192539/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Rack 3.2.8, 3.1.23 and 2.2.25&lt;/a&gt; fix four issues, the biggest being a multipart parser that retained parsed data in its scan buffer, so a malicious upload could exhaust memory.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/192540/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Addressable 2.9.1&lt;/a&gt; ships fixes for seven advisories, two of them reported by Ruby Central's new gem security effort.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;v0.9.2 of the &lt;a href="https://rubyweekly.com/link/192541/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;&lt;code&gt;brotli&lt;/code&gt; gem&lt;/a&gt; bundles the patched Brotli 1.2.1, closing an &lt;a href="https://rubyweekly.com/link/192542/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;actively exploited decoder RCE&lt;/a&gt; that's recently hit Node and browsers.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/192543/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Ransack 6.0.1&lt;/a&gt; (plus 5.0.3 and 4.4.4) stops &lt;code&gt;sort_link&lt;/code&gt; passing URL options like &lt;code&gt;script_name&lt;/code&gt; through from params, an open redirect and XSS.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
  &lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;




&lt;img src="https://rubyweekly.com/open/825/rss" width="1" height="1" /&gt;</description>
      <pubDate>Thu, 5 Nov 2026 00:00:00 +0000</pubDate>
      <guid>https://rubyweekly.com/issues/825</guid>
    </item>
    <item>
      <title>How fast can you actually patch Ruby?</title>
      <link>https://rubyweekly.com/issues/824</link>
      <description>

  

    
    
    
  




&lt;table border=0 cellpadding=0 cellspacing=0 align="center" border="0"&gt;
  &lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em;"&gt;
  &lt;div&gt;    
    &lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;
&lt;td align="left" style="padding-left: 4px; font-size: 15px; line-height: 1.48em;"&gt;&lt;p&gt;#​824 — October 29, 2026&lt;/p&gt;&lt;/td&gt;
&lt;td align="right" style="padding-right: 4px; font-size: 15px; line-height: 1.48em;"&gt;&lt;p&gt;&lt;a href="https://rubyweekly.com/link/192214/rss" style=" color: #0055bb;   "&gt;Read on the Web&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;&lt;p&gt;🔒 Last Friday we sent out &lt;a href="https://rubyweekly.com/link/192215/rss" style=" color: #0055bb; font-weight: 600;   "&gt;a special issue about some CRuby security releases&lt;/a&gt; which fixed a few nasty regexp bugs. If you haven't updated yet, it's worth a read to see if you're affected and what to check!&lt;br&gt;__&lt;br&gt;&lt;em&gt;Your editor, Peter Cooper&lt;/em&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    
    &lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0 12px;"&gt;&lt;p&gt;Ruby Weekly&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em;"&gt;
  &lt;a href="https://rubyweekly.com/link/192172/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/cblgc1ggermkssfawdvg.jpg" width="640" style="    line-height: 100%;    "&gt;&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/192172/rss" title="paagman.dev" style=" color: #0055bb;    font-size: 1.1em; line-height: 1.4em;"&gt;How Fast Can You Actually Patch Ruby?&lt;/a&gt;&lt;/span&gt; — When the Ruby security fixes shipped last week, Dennis timed how long they took to reach version managers, Docker images, CI services and hosts. The core team's image took eight minutes, while Docker's official image (Rails and Kamal's default) took ~16 hours.&lt;/p&gt;
  &lt;p&gt;Dennis Paagman &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;&lt;p&gt;💡 Things are improving, though, as Ruby core team members now have commit access to Docker's Ruby image repo and are &lt;a href="https://rubyweekly.com/link/192173/rss" style=" color: #0055bb; font-weight: 600;   "&gt;looking into automating updates&lt;/a&gt;. Meanwhile, Greg Molnar shows how to &lt;a href="https://rubyweekly.com/link/192174/rss" style=" color: #0055bb; font-weight: 600;   "&gt;build your own image locally and deploy it with Kamal&lt;/a&gt;.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  &lt;a href="https://rubyweekly.com/link/192171/rss" style=" color: #0055bb;   "&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/c_limit,w_480,h_480,q_auto/copm/999fbf1c.png" width="110" height="110" style="padding-top: 12px; padding-left: 12px;     line-height: 100%; "&gt;&lt;/a&gt;
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/192171/rss" title="www.tigerdata.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Your Dashboard Shouldn’t Wait for a Cron Job&lt;/a&gt;&lt;/span&gt; — The nightly job rolls up yesterday’s rows so the dashboard loads. Numbers lag a day and the job keeps growing. TimescaleDB continuous aggregates refresh rollups inside Postgres, so ActiveRecord reads fresh totals. &lt;a href="https://rubyweekly.com/link/192171/rss" style=" color: #0055bb;   "&gt;Get $1000 credit to start&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;Tiger Data (creators of TimescaleDB) &lt;span style="text-transform: uppercase; margin-left: 4px; font-size: 0.9em;   color: #997 !important; padding: 1px 4px; "&gt;sponsor&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/192175/rss" title="island94.org" style=" color: #0055bb;    font-size: 1.05em;"&gt;Bad Requests and the Dream of a Quiet Rails App&lt;/a&gt;&lt;/span&gt; — Requests for &lt;code&gt;/.env&lt;/code&gt; and &lt;code&gt;/wp-admin&lt;/code&gt;, binary bytes in &lt;code&gt;User-Agent&lt;/code&gt; headers, made-up MIME types… Ben walks through the Rails middleware stack to show why some junk requests become 500s, and why even 'handled' ones can still set off your error monitor.&lt;/p&gt;
  &lt;p&gt;Ben Sheldon &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/192176/rss" title="rubycentral.org" style=" color: #0055bb;    font-size: 1.05em;"&gt;What's New at RubyGems.org: Ruby Central's Changelog Returns&lt;/a&gt;&lt;/span&gt; — Ruby Central catches us up on RubyGems.org and Bundler 4.1 work. Its AI scans of popular gems are a highlight: reviewers rejected 90% of the findings they looked into, though one was a critical &lt;a href="https://rubyweekly.com/link/192177/rss" style=" color: #0055bb;   "&gt;auth bypass in &lt;code&gt;rubyntlm&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;Kirk Haines (Ruby Central) &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/192178/rss" title="blog.julik.nl" style=" color: #0055bb;    font-size: 1.05em;"&gt;Thank You, But I Prefer It My Way&lt;/a&gt;&lt;/span&gt; — If an LLM can just rewrite a library, is it worth persuading a maintainer about your PR or do you just route around it? Julik ponders the complexities and offers some practical ways forward.&lt;/p&gt;
  &lt;p&gt;Julik Tarkhanov &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/192179/rss" title="paolino.me" style=" color: #0055bb;    font-size: 1.05em;"&gt;I Get 215 GitHub Notifications a Day, So I Built a Bot to Triage Them&lt;/a&gt;&lt;/span&gt; — A look at how the creator of &lt;a href="https://rubyweekly.com/link/192216/rss" style=" color: #0055bb;   "&gt;RubyLLM&lt;/a&gt; built a RubyLLM-powered agent to label issues and PRs, reply only when useful, and sort the rest onto a board.&lt;/p&gt;
  &lt;p&gt;Carmine Paolino &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;p&gt;📄 &lt;a href="https://rubyweekly.com/link/192180/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Parsing JSON-Structured Docker Logs with the OpenTelemetry Collector&lt;/a&gt; – How 37signals unwraps the JSON-in-JSON logs from its Kamal-deployed Rails apps. &lt;cite&gt;Lewis Buckley (37signals)&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://rubyweekly.com/link/192181/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Benchmarking Campfire with Many Users&lt;/a&gt; – Sam load-tests Campfire with up to 3,000 users, opens three PRs, and compares Rails with his Roundhouse-transpiled build on Falcon. &lt;cite&gt;Sam Ruby&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://rubyweekly.com/link/192182/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;React Server Components on a Gumroad Fork: From 53 to 86 on Mobile PageSpeed&lt;/a&gt; – Compares live RSC and Inertia versions of a product page, using the commercial &lt;a href="https://rubyweekly.com/link/192183/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;React on Rails Pro&lt;/a&gt;. &lt;cite&gt;Justin Gordon (ShakaCode)&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://rubyweekly.com/link/192184/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Making AI Agents Safe to Retry&lt;/a&gt; – Moving an LLM agent into a Sidekiq job without retries repeating its actions. &lt;cite&gt;Mateus Pereira (FastRuby.io)&lt;/cite&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0;"&gt;&lt;p&gt;🛠 Code &amp;amp; Tools&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em;"&gt;
  &lt;a href="https://rubyweekly.com/link/192185/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/jz0wih3pg2u5ksrgecxq.jpg" width="640" style="    line-height: 100%;    "&gt;&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/192185/rss" title="carton.dtcristo.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Carton: Real Boundaries for Ruby&lt;/a&gt;&lt;/span&gt; — Built on Ruby 4's experimental &lt;a href="https://rubyweekly.com/link/192186/rss" style=" color: #0055bb;   "&gt;&lt;code&gt;Ruby::Box&lt;/code&gt;&lt;/a&gt;, Carton enforces module boundaries at runtime where only what a 'carton' &lt;code&gt;export&lt;/code&gt;s is visible outside it, monkey patches to core classes stay contained, and each carton can bring &lt;a href="https://rubyweekly.com/link/192187/rss" style=" color: #0055bb;   "&gt;its own gem versions&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;David Cristofaro &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/192188/rss" title="go.fastruby.io" style=" color: #0055bb;    font-size: 1.05em;"&gt;🚨 Rails 8.0 Support Ends Nov 7 | Get AI Upgrades on Autopilot&lt;/a&gt;&lt;/span&gt; — Our AI agent ships small upgrade PRs that pass your tests; nothing merges without you. &lt;a href="https://rubyweekly.com/link/192188/rss" style=" color: #0055bb;   "&gt;Join the beta waitlist&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;FastRuby.io® | AI-Native Rails Maintenance &lt;span style="text-transform: uppercase; margin-left: 4px; font-size: 0.9em;   color: #997 !important; padding: 1px 4px; "&gt;sponsor&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/192189/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Spree 6.0: A Rewrite of the Rails E-Commerce Platform&lt;/a&gt;&lt;/span&gt; — Marketplace, B2B, tax and inventory features are now in the open source core, carts and orders are separate models, and the checkout state machines are gone. Note that Rails now powers only the backend, with a React admin and Next.js storefront.&lt;/p&gt;
  &lt;p&gt;Spree Commerce &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/192190/rss" title="geneva-drive.dev" style=" color: #0055bb;    font-size: 1.05em;"&gt;GenevaDrive: Durable, Step-Based Workflows for Rails&lt;/a&gt;&lt;/span&gt; — Define multi-step workflows tied to a record, with waits, resumable steps over large collections, and signals from webhooks. State lives in your database, with steps surviving restarts and duplicate job runs being skipped.&lt;/p&gt;
  &lt;p&gt;Julik Tarkhanov &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;span&gt;⏱️&lt;/span&gt; &lt;a href="https://rubyweekly.com/link/192191/rss" title="blog.rhannequ.in" style=" color: #0055bb;    font-size: 1.05em;"&gt;Horologium: Scientific Time Library for Ruby&lt;/a&gt;&lt;/span&gt; — A new gem, extracted from &lt;a href="https://rubyweekly.com/link/192192/rss" style=" color: #0055bb;   "&gt;Astronoby&lt;/a&gt;, that handles eight time scales including TAI, TT, TDB, UTC and UT1, plus leap seconds (which &lt;code&gt;Time&lt;/code&gt; can't represent) and precise Julian dates.&lt;/p&gt;
  &lt;p&gt;Rémy Hannequin &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;⭐ &lt;a href="https://rubyweekly.com/link/192193/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;RubyGems and Bundler 4.1.0.beta3&lt;/a&gt; renames Bundler's new &lt;code&gt;override&lt;/code&gt; keys to &lt;code&gt;in:&lt;/code&gt; and &lt;code&gt;with:&lt;/code&gt;, and records overrides in a new &lt;code&gt;OVERRIDES&lt;/code&gt; section of &lt;code&gt;Gemfile.lock&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/192194/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Prosopite 2.5&lt;/a&gt; – N+1 query detector. Now suggests fixes, adds RSpec and Minitest assertions, and can ignore known N+1s while you adopt it gradually.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/192195/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;OmniAuth 2.2 / 2.3&lt;/a&gt; – Multi-provider auth. The first new minor versions since 2022 add &lt;code&gt;allowed_hosts&lt;/code&gt; and support for concurrent sign-ins.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/192196/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;The Git Gem 6.0&lt;/a&gt; – Ruby interface to the &lt;code&gt;git&lt;/code&gt; command line. A big breaking release that removes the old object model and requires Git 2.43+.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/192197/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;ruby-duckdb 2.0&lt;/a&gt; – Ruby client for the DuckDB analytical database, now tracking &lt;a href="https://rubyweekly.com/link/192198/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;DuckDB 2.0&lt;/a&gt; and dropping several deprecated APIs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/192199/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Rage 1.29&lt;/a&gt; – Fiber-based, Rails-compatible API framework, now ready for Ruby 4.1's fiber scheduler changes.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0;"&gt;&lt;p&gt;📢  Elsewhere in the ecosystem&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Sean Goedecke argues that &lt;a href="https://rubyweekly.com/link/192200/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;software is slow because of bad design, not slow languages&lt;/a&gt;, drawing on his experience of staring at Ruby flamegraphs and profiling Rails endpoints.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Nate Berkopec ported &lt;a href="https://rubyweekly.com/link/192201/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Ruby 4.0.9&lt;/a&gt; to &lt;a href="https://rubyweekly.com/link/192202/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Fil-C&lt;/a&gt;, a memory-safe C toolchain. It ran real programs like Puma, but was ~5x slower and used far more memory, so Nate has 𝕏 &lt;a href="https://rubyweekly.com/link/192203/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;declared the experiment over&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Python's experimental JIT &lt;a href="https://rubyweekly.com/link/192204/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;is likely to be removed&lt;/a&gt;. Ruby came up a lot &lt;a href="https://rubyweekly.com/link/192205/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;in the related Hacker News thread&lt;/a&gt;, where Jean Boussier &lt;a href="https://rubyweekly.com/link/192206/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;credited Matz&lt;/a&gt; for supporting work on Ruby's JITs.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Sentry has &lt;a href="https://rubyweekly.com/link/192207/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;given $1m to open source maintainers&lt;/a&gt; this year, up from $750k, with $40,000 going to Ruby Central.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
  &lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;




&lt;img src="https://rubyweekly.com/open/824/rss" width="1" height="1" /&gt;</description>
      <pubDate>Thu, 29 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://rubyweekly.com/issues/824</guid>
    </item>
    <item>
      <title>Ruby regexp security fixes: a newsflash</title>
      <link>https://rubyweekly.com/issues/823</link>
      <description>

  

    
    
    
  




&lt;table border=0 cellpadding=0 cellspacing=0 align="center" border="0"&gt;
  &lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em;"&gt;
  &lt;div&gt;    
    &lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;
&lt;td align="left" style="padding-left: 4px; font-size: 15px; line-height: 1.48em;"&gt;&lt;p&gt;#​823 — October 23, 2026&lt;/p&gt;&lt;/td&gt;
&lt;td align="right" style="padding-right: 4px; font-size: 15px; line-height: 1.48em;"&gt;&lt;p&gt;&lt;a href="https://rubyweekly.com/link/191991/rss" style=" color: #0055bb;   "&gt;Read on the Web&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    
    &lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0 12px;"&gt;&lt;p&gt;Ruby Weekly&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em;"&gt;
  &lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/dds4ygodka8ykec7ycvd.jpg" width="640" style="    line-height: 100%;    "&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;&lt;p&gt;Ruby regexp security fixes&lt;br&gt;Who needs to update?&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;p&gt;It's &lt;em&gt;very&lt;/em&gt; rare I'll do an out-of-band issue of &lt;em&gt;Ruby Weekly&lt;/em&gt; but after digging into today's security releases of CRuby, I felt it was prudent to spread the word.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href="https://rubyweekly.com/link/191976/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Ruby 4.0.9&lt;/a&gt;, &lt;a href="https://rubyweekly.com/link/191977/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;3.4.12&lt;/a&gt;, and &lt;a href="https://rubyweekly.com/link/191978/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;3.3.13&lt;/a&gt; have all been released today with fixes for regexp bugs behind four GitLab-assigned CVEs.&lt;/strong&gt; If you can update, do so. But I'll explain what the issues are below and you can determine if they affect you.&lt;/p&gt;
&lt;p&gt;Takashi Kokubun's &lt;a href="https://rubyweekly.com/link/191979/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;official advisory&lt;/a&gt; has the full story, if you want to go direct to the most official source.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Note: These bugs are specific to CRuby's Onigmo engine. JRuby and TruffleRuby use different regex engines and aren't affected by these fixes.&lt;/em&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;div style="   margin-top: 14px; margin-bottom: 8px;  "&gt;&lt;/div&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;&lt;p&gt;What are the bugs?&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;p&gt;There were three bugs in &lt;a href="https://rubyweekly.com/link/191980/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Onigmo&lt;/a&gt;, Ruby's regular expression engine, that could corrupt memory while a regex pattern is being &lt;em&gt;compiled&lt;/em&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;a href="https://rubyweekly.com/link/191981/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;A double free&lt;/a&gt; when parsing a pattern fails after an alternation. Ruby 4.0 has had this fix since 4.0.0.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://rubyweekly.com/link/191982/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;An integer overflow&lt;/a&gt; in the size of a compiled pattern, first fixed in 4.0.8 – released yesterday.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://rubyweekly.com/link/191983/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;An overflow of internal IDs&lt;/a&gt; in patterns with many repeats, fixed in 4.0.9.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;So if you moved to &lt;a href="https://rubyweekly.com/link/191984/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;4.0.8&lt;/a&gt;, which I featured yesterday, you need one more bump.&lt;/p&gt;
&lt;p&gt;GitLab found these bugs could enable remote code execution on GitLab servers, including attacks that require no login. It assigned four CVEs rated &lt;em&gt;Critical&lt;/em&gt; (CVSS 9.9 or 10.0) and patched the Ruby it ships. Ruby hasn't requested separate CVEs for these fixes so far; its advisory asks users to track them under GitLab's identifiers.&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;&lt;p&gt;Is your code affected?&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;p&gt;You're exposed if your application (or a dependency, alas) compiles regex patterns whose structure a third party can control. For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Regexp.new&lt;/code&gt; or &lt;code&gt;Regexp.compile&lt;/code&gt; called on user input.&lt;/li&gt;
&lt;li&gt;Interpolating input into a regex literal, like &lt;code&gt;/#{params[:q]}/&lt;/code&gt;. Interpolation doesn't escape, so the user can supply a pattern.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Think regex-powered search boxes, user-defined validation rules, or filters in CI and webhook tools. If every regex in your stack is written by you/your team, you're in a better position.&lt;/p&gt;
&lt;p&gt;Two things that &lt;em&gt;won't&lt;/em&gt; help: &lt;code&gt;Regexp.timeout&lt;/code&gt;, since the damage happens during compilation before matching starts, and limits on pattern length, because some of the bugs can be triggered by short patterns. Before the compiled-size fix, for instance, &lt;code&gt;Regexp.new("(?:.{90000,}){90000}")&lt;/code&gt; was enough to lock up the process.&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;&lt;p&gt;What should you do?&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Upgrade to &lt;a href="https://rubyweekly.com/link/191976/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Ruby 4.0.9&lt;/a&gt;, &lt;a href="https://rubyweekly.com/link/191977/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;3.4.12&lt;/a&gt; or &lt;a href="https://rubyweekly.com/link/191978/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;3.3.13&lt;/a&gt;.&lt;/strong&gt; (Ruby 3.3 normally gets only vulnerability fixes now; the core team backported these as an exception, since GitLab, not Ruby, is the one treating them as CVEs.)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Find the risky spots in your code&lt;/strong&gt; by looking for &lt;code&gt;Regexp.new&lt;/code&gt;, &lt;code&gt;Regexp.compile&lt;/code&gt;, &lt;code&gt;Regexp.union&lt;/code&gt; and &lt;code&gt;/#{&lt;/code&gt; constructions, and checking where their input comes from.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Can't upgrade yet?&lt;/strong&gt; The official best practice is to avoid compiling regexes from untrusted input &lt;em&gt;at all&lt;/em&gt;. How you do that is up to you: &lt;code&gt;Regexp.escape&lt;/code&gt; turns user input into a literal-only pattern, and a plain substring match (e.g. &lt;code&gt;include?&lt;/code&gt;) can be enough for many situations.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;On Ruby 3.2 or older?&lt;/strong&gt; Older versions are end-of-life and won't get official fixes, so step 3 is your main option for now.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;I'll be back next Thursday with, I hope, a regular issue… 😅&lt;/p&gt;
&lt;p&gt;___&lt;br&gt;&lt;em&gt;Peter Cooper, editor of Ruby Weekly&lt;/em&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
  &lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;




&lt;img src="https://rubyweekly.com/open/823/rss" width="1" height="1" /&gt;</description>
      <pubDate>Fri, 23 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://rubyweekly.com/issues/823</guid>
    </item>
    <item>
      <title>How Rails made its enums 4.5x faster</title>
      <link>https://rubyweekly.com/issues/822</link>
      <description>

  

    
    
    
  




&lt;table border=0 cellpadding=0 cellspacing=0 align="center" border="0"&gt;
  &lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em;"&gt;
  &lt;div&gt;    
    &lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;
&lt;td align="left" style="padding-left: 4px; font-size: 15px; line-height: 1.48em;"&gt;&lt;p&gt;#​822 — October 22, 2026&lt;/p&gt;&lt;/td&gt;
&lt;td align="right" style="padding-right: 4px; font-size: 15px; line-height: 1.48em;"&gt;&lt;p&gt;&lt;a href="https://rubyweekly.com/link/191878/rss" style=" color: #0055bb;   "&gt;Read on the Web&lt;/a&gt;&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
    
    &lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0 12px;"&gt;&lt;p&gt;Ruby Weekly&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em;"&gt;
  &lt;a href="https://rubyweekly.com/link/191827/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/pybr4dvajnuoltdun5du.jpg" width="640" style="    line-height: 100%;    "&gt;&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;span&gt;📊&lt;/span&gt; &lt;a href="https://rubyweekly.com/link/191827/rss" title="railsdeveloper.com" style=" color: #0055bb;    font-size: 1.1em; line-height: 1.4em;"&gt;The 2026 Rails Community Survey Results&lt;/a&gt;&lt;/span&gt; — The results show a community favoring a familiar core stack (monolith, Postgres, Puma), a huge jump in adoption of &lt;a href="https://rubyweekly.com/link/191828/rss" style=" color: #0055bb;   "&gt;mise&lt;/a&gt;, RSpec remaining the most popular testing framework, and &lt;a href="https://rubyweekly.com/link/191829/rss" style=" color: #0055bb;   "&gt;widespread AI adoption&lt;/a&gt;, while half worry about the long-term value of their skills.&lt;/p&gt;
  &lt;p&gt;Planet Argon &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;&lt;p&gt;💡 If you want something to read or listen to, you can also find out what people's &lt;a href="https://rubyweekly.com/link/191830/rss" style=" color: #0055bb; font-weight: 600;   "&gt;favorite Ruby books&lt;/a&gt; and &lt;a href="https://rubyweekly.com/link/191831/rss" style=" color: #0055bb; font-weight: 600;   "&gt;favorite Ruby podcasts&lt;/a&gt; are.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  &lt;a href="https://rubyweekly.com/link/191826/rss" style=" color: #0055bb;   "&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/c_limit,w_480,h_480,q_auto/copm/44b26ac4.png" width="125" height="125" style="padding-top: 12px; padding-left: 12px;     line-height: 100%; "&gt;&lt;/a&gt;
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/191826/rss" title="go.fastruby.io" style=" color: #0055bb;    font-size: 1.05em;"&gt;🚨 Rails 8.0 Support Ends Nov 7. Upgrade on Autopilot&lt;/a&gt;&lt;/span&gt; — Our AI agent opens small upgrade PRs only when your own CI is green, and dual-boots your application with &lt;code&gt;next_rails&lt;/code&gt;. You review and merge; you stay in control. Beta from $497/mo, month-to-month. &lt;a href="https://rubyweekly.com/link/191826/rss" style=" color: #0055bb;   "&gt;Join the waitlist today&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;FastRuby.io® | AI-native Upgrades on Autopilot &lt;span style="text-transform: uppercase; margin-left: 4px; font-size: 0.9em;   color: #997 !important; padding: 1px 4px; "&gt;sponsor&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/191832/rss" title="tenderlovemaking.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Static Analysis for the Uninitialized&lt;/a&gt;&lt;/span&gt; — Aaron, working through a static analysis textbook, builds an analyzer from scratch to find "possibly uninitialized variables" in Ruby. Sounds in the weeds, but by the end it parses real Ruby with &lt;a href="https://rubyweekly.com/link/191833/rss" style=" color: #0055bb;   "&gt;Prism&lt;/a&gt; and flags a &lt;code&gt;NameError&lt;/code&gt; before running.&lt;/p&gt;
  &lt;p&gt;Aaron 'Tenderlove' Patterson &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;&lt;p&gt;💡 On the topic of Prism, there's some big news this week – see &lt;em&gt;Code &amp;amp; Tools&lt;/em&gt;.&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;p&gt;&lt;strong&gt;⚡️ IN BRIEF:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;💎 &lt;a href="https://rubyweekly.com/link/191834/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Ruby 4.0.8 has been released&lt;/a&gt;. It's billed as &lt;em&gt;"routine"&lt;/em&gt;, but is kinda significant as it fixes forked children hanging on hostname lookups on Linux, Ruby failing to build against the macOS 27 SDK, and a ZJIT bug that swapped keyword arguments.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;📊 Erik Berlin has opened &lt;a href="https://rubyweekly.com/link/191835/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;some PRs to speed up core methods&lt;/a&gt;, including pattern-defeating quicksort for numeric arrays (4-9x faster) and quicker &lt;code&gt;Array#include?&lt;/code&gt;, &lt;code&gt;Range&lt;/code&gt;, &lt;code&gt;String&lt;/code&gt; and &lt;code&gt;Time&lt;/code&gt; operations. Core members are considering which will land in 4.1.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A long-time gem author has &lt;a href="https://rubyweekly.com/link/191836/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;archived all his Ruby gems&lt;/a&gt;, saying the &lt;em&gt;"for humans"&lt;/em&gt; era of Ruby is over. An &lt;a href="https://rubyweekly.com/link/191837/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;intense discussion&lt;/a&gt; ensued on Hacker News.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Rails has &lt;a href="https://rubyweekly.com/link/191838/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;merged &lt;code&gt;config.zjit&lt;/code&gt;&lt;/a&gt;, so ZJIT can be switched on after boot (as YJIT can). The PR's numbers show ~18MB less JIT memory used per worker.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/191839/rss" title="railsatscale.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Rails is a JIT Compiler (Or: How Aaron Made Enums 4.5x Faster)&lt;/a&gt;&lt;/span&gt; — Rails' &lt;code&gt;enum&lt;/code&gt; predicates are built with &lt;code&gt;define_method&lt;/code&gt; and &lt;code&gt;public_send&lt;/code&gt; that JITs struggle to optimize. Aaron Patterson has &lt;a href="https://rubyweekly.com/link/191840/rss" style=" color: #0055bb;   "&gt;made them real generated methods&lt;/a&gt; that are ~4.5x faster under YJIT in his benchmark. Coming to Rails 8.2.&lt;/p&gt;
  &lt;p&gt;Max Bernstein (Rails at Scale) &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/191841/rss" title="www.tigerdata.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Rails Analytics on the Postgres You Already Know&lt;/a&gt;&lt;/span&gt; — TimescaleDB extends the Postgres behind your app so dashboards stay fast as data grows. &lt;a href="https://rubyweekly.com/link/191841/rss" style=" color: #0055bb;   "&gt;Get $1000 credit to start&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;Tiger Data (creators of TimescaleDB) &lt;span style="text-transform: uppercase; margin-left: 4px; font-size: 0.9em;   color: #997 !important; padding: 1px 4px; "&gt;sponsor&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;p&gt;📄 &lt;a href="https://rubyweekly.com/link/191842/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Does Rails Still Make Sense?&lt;/a&gt; – Spoiler: yes. A good retort to anyone asking why you don't just get an LLM to rewrite all your apps in Rust. &lt;cite&gt;Dirk Jonker&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://rubyweekly.com/link/191844/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Eight Months in Next.js: A Rails Developer's Field Notes&lt;/a&gt; – An even-handed look at what Rails hands you for free. &lt;cite&gt;Werner Petrick (Puzzl)&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://rubyweekly.com/link/191879/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Short Written Summaries of 24 Rails World 2026 Talks&lt;/a&gt; – Handy if you skipped the videos! &lt;cite&gt;Yaroslav Shmarov&lt;/cite&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0;"&gt;&lt;p&gt;🛠 Code &amp;amp; Tools&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em;"&gt;
  &lt;a href="https://rubyweekly.com/link/191847/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/y8cl1peqxihiweeubxm3.jpg" width="640" style="    line-height: 100%;      "&gt;&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/191846/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Prism 2.0: Ruby's Parser Gets Its First Major Release in Two Years&lt;/a&gt;&lt;/span&gt; — Prism now underpins CRuby, Ruby LSP and RuboCop, so you're using it even if you never call it directly. It's now faster and leaner, with precompiled platform gems, complete RBS and RBI definitions, a C++ API, and Ruby 4.1 syntax support. There's also &lt;a href="https://rubyweekly.com/link/191847/rss" style=" color: #0055bb;   "&gt;a Web-based playground&lt;/a&gt; where you can give it a spin.&lt;/p&gt;
  &lt;p&gt;Kevin Newton et al. &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/191849/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Net::SSH 8.0: The Pure Ruby SSH Client Library&lt;/a&gt;&lt;/span&gt; — The first major release since 2022. Ed25519, X25519 and ChaCha20 now come from the &lt;code&gt;openssl&lt;/code&gt; gem, so separate gems are no longer needed. Defaults now track OpenSSH (e.g. SHA-1 RSA and DSA are off by default), plus ControlMaster reuse (i.e. connection sharing) and FIDO key support.&lt;/p&gt;
  &lt;p&gt;Miklós Fazekas et al. &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/191848/rss" title="www.appsignal.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Tired of Writing NRQL? AppSignal Builds Your Rails Dashboards for You&lt;/a&gt;&lt;/span&gt; — Dashboards that build themselves, plus deploy markers and uptime checks. Unlimited users, &lt;a href="https://rubyweekly.com/link/191848/rss" style=" color: #0055bb;   "&gt;30-day trial, no credit card&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;AppSignal &lt;span style="text-transform: uppercase; margin-left: 4px; font-size: 0.9em;   color: #997 !important; padding: 1px 4px; "&gt;sponsor&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/191850/rss" title="code.dblock.org" style=" color: #0055bb;    font-size: 1.05em;"&gt;Introducing RuboCop Spellcheck&lt;/a&gt;&lt;/span&gt; — A RuboCop plugin for checking spelling in Ruby comments, strings, identifiers, Markdown, RDoc, AsciiDoc, and plain text.&lt;/p&gt;
  &lt;p&gt;Daniel Doubrovkine &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/191851/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Passenger 7 Preview&lt;/a&gt; – The first major version since 2018. The headline is WebSocket support for Apache, and the minimum Ruby rises to 3.0.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/191880/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;WhatLanguage 3.0&lt;/a&gt; – My pure Ruby natural language detector changes a few of the ISO codes it returns and gets a lot faster.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/191853/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Logster 3.0&lt;/a&gt; – Discourse's embedded log viewer for Rack apps (&lt;a href="https://rubyweekly.com/link/191854/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;screenshot&lt;/a&gt;). Drops support for Ruby &amp;lt;3.3, Rack &amp;lt;3.1 and Rails &amp;lt;8.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/191855/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Aruba 3.0&lt;/a&gt; – Test CLI apps with Cucumber, RSpec or Minitest. Every scenario now gets its own working directory.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/191856/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;ViewComponent 4.17&lt;/a&gt; – Now works under Rails' experimental Ractor mode.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/191857/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Truemail 4.0&lt;/a&gt; – Email address validation library. Now supports Ruby 4.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0;"&gt;&lt;p&gt;🪏 Digging into Ruby's past…&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
&lt;p&gt;I've been working with Ruby for 22 years, but last week I noticed Ryan Davis (of Seattle.rb and Minitest fame) &lt;a href="https://rubyweekly.com/link/191858/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;celebrating his 26th anniversary&lt;/a&gt; of using Ruby, and it got me thinking about Ruby's history which goes far beyond even that.&lt;/p&gt;
&lt;p&gt;Ruby's 33 years old, so there's plenty of history to go over if you can find it amid the linkrot. Last week I discovered a new lead: &lt;a href="https://rubyweekly.com/link/191859/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;a site which archives hundreds of programming mailing lists&lt;/a&gt; all the way back to the 90s. &lt;a href="https://rubyweekly.com/link/191860/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;&lt;code&gt;ruby-talk&lt;/code&gt;'s on there&lt;/a&gt; and its archives go back to &lt;a href="https://rubyweekly.com/link/191861/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;the very first post by Matz in 1998&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Today, &lt;a href="https://rubyweekly.com/link/191862/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;&lt;code&gt;ruby-talk&lt;/code&gt; is a quiet list&lt;/a&gt; with the &lt;a href="https://rubyweekly.com/link/191863/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Ruby Users Forum&lt;/a&gt; largely taking over its role, but at the list's peak in 2006 it hit over 6000 messages a month, so there's tons to go through.&lt;/p&gt;
&lt;p&gt;I've been (&lt;em&gt;very&lt;/em&gt;) slowly going through the archives to find interesting tidbits, so I wanted to share a few bits from the late 90s I enjoyed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/191864/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Matz shared the history of the Ruby project&lt;/a&gt; saying it was 'born' on February 23, 1993 (though it didn't get a public release till December 1995), explained his background as a programmer, and why Ruby came to be.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;There was no RubyGems back then, so people would ask &lt;a href="https://rubyweekly.com/link/191865/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;if Ruby should have its own central archive for modules&lt;/a&gt; with &lt;a href="https://rubyweekly.com/link/191866/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Matz saying he had a 'vague hope'&lt;/a&gt; to have such a thing 'someday'. &lt;a href="https://rubyweekly.com/link/191867/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;The first attempt (the "RAA") appeared&lt;/a&gt; soon thereafter.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ruby was &lt;a href="https://rubyweekly.com/link/191868/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;getting ready for IPv6&lt;/a&gt; as early as 1999. 27 years later, my ISP still doesn't support it… 😅&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Dave Thomas, of &lt;em&gt;Programming Ruby&lt;/em&gt; (Pickaxe) fame, &lt;a href="https://rubyweekly.com/link/191869/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;first appeared in December 1999&lt;/a&gt; asking a question about &lt;code&gt;yield&lt;/code&gt; vs &lt;code&gt;block.call&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Even in 1999, Matz was &lt;a href="https://rubyweekly.com/link/191870/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;pondering a future where Ruby scripts could be frozen into executables&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Two years before JRuby started, &lt;a href="https://rubyweekly.com/link/191871/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Bryce Dooley came up with its name&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you have any interesting data dumps, archives, or similar things relating to Ruby's ancient history – especially community stuff – hit reply and let me know, as I'd love to unearth any interesting gems, ideas, or discussions going on back in the day.&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style=" font-size: 15px; line-height: 1.48em;"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
  &lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;




&lt;img src="https://rubyweekly.com/open/822/rss" width="1" height="1" /&gt;</description>
      <pubDate>Thu, 22 Oct 2026 00:00:00 +0000</pubDate>
      <guid>https://rubyweekly.com/issues/822</guid>
    </item>
  </channel>
</rss>
