<?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>What if your Rails app didn't need Rails?</title>
      <link>https://rubyweekly.com/issues/818</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;#​818 — September 24, 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/190858/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;🤔 DHH opened &lt;a href="https://rubyweekly.com/link/190800/rss" style=" color: #0055bb; font-weight: 600;   "&gt;Rails World&lt;/a&gt; yesterday with a keynote that may have implications for Rubyists. I know readers like and loathe DHH in equal measure, so my writeup is at the end of this issue to either read or skip as you prefer.&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/190853/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/wng5kodnohn1rkhddjja.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/190853/rss" title="intertwingly.net" style=" color: #0055bb;    font-size: 1.1em; line-height: 1.4em;"&gt;Benchmarking Compiled-Away Rails on Three Rubies&lt;/a&gt;&lt;/span&gt; — &lt;a href="https://rubyweekly.com/link/190854/rss" style=" color: #0055bb;   "&gt;Roundhouse&lt;/a&gt; can compile (some!) Rails apps to simpler &lt;a href="https://rubyweekly.com/link/190855/rss" style=" color: #0055bb;   "&gt;Spinel&lt;/a&gt;-compatible Ruby. But how does "Rails-free" Ruby fare on CRuby, JRuby and TruffleRuby? In Sam's tests, 3-17x faster than Rails, though TruffleRuby, the fastest at running stock Rails, gains least.&lt;/p&gt;
  &lt;p&gt;Sam Ruby &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;💡 Want to try for yourself? &lt;a href="https://rubyweekly.com/link/190856/rss" style=" color: #0055bb; font-weight: 600;   "&gt;Roundhouse has been released&lt;/a&gt;, with Matz 𝕏 &lt;a href="https://rubyweekly.com/link/190857/rss" style=" color: #0055bb; font-weight: 600;   "&gt;showing at Euruko&lt;/a&gt; he used it to compile &lt;em&gt;Campfire&lt;/em&gt; to run on Spinel using 12x less memory. Bear in mind Roundhouse is still experimental and doesn't support every Rails feature.&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/190801/rss" style=" color: #0055bb;   "&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/c_limit,w_480,h_480,q_auto/copm/46a41415.png" width="140" height="140" 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/190801/rss" title="hello.cedarcode.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Your Rails Startup Is Growing Faster Than Your Team&lt;/a&gt;&lt;/span&gt; — Cedarcode adds senior Ruby/Rails engineers who learn your product, figure out what needs to happen next, and stick with problems until they're solved. More capacity as you scale, without more management overhead.&lt;/p&gt;
  &lt;p&gt;Cedarcode &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/190802/rss" title="rubyllm.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;RubyLLM 2.0: A Big Upgrade for the Popular AI Framework&lt;/a&gt;&lt;/span&gt; — Its biggest release yet adds video and speech generation, human approval for tools, and caching, fallbacks and batches across providers. The agentic loop is also now &lt;a href="https://rubyweekly.com/link/190803/rss" style=" color: #0055bb;   "&gt;exposed as steps&lt;/a&gt; you can drive yourself.&lt;/p&gt;
  &lt;p&gt;Carmine Paolino 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;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/190804/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Ruby 3.4.11&lt;/a&gt; is a routine bugfix release, fixing a &lt;a href="https://rubyweekly.com/link/190805/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;stack corruption bug&lt;/a&gt; that could be triggered by methods with over 31 keyword args. A fix for Ruby 4.0 is still forthcoming.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/190806/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;JRuby 10.1.2.0&lt;/a&gt; brings many fiber scheduler fixes and faster subclassing of Java classes. It and &lt;a href="https://rubyweekly.com/link/190807/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;JRuby 10.0.7.0&lt;/a&gt; both fix a startup speed issue on macOS.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Of 200+ vulnerability reports sent to Ruby this year, over 98% were &lt;em&gt;"AI slop or unverified"&lt;/em&gt;, 𝕏 &lt;a href="https://rubyweekly.com/link/190808/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;says Hiroshi Shibata&lt;/a&gt;, with only four becoming CVEs.&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/190811/rss" title="rubyonrails.org" style=" color: #0055bb;    font-size: 1.05em;"&gt;Rails 8.1.4 Released&lt;/a&gt;&lt;/span&gt; — A hefty bug-fix release (&lt;a href="https://rubyweekly.com/link/190812/rss" style=" color: #0055bb;   "&gt;all listed here&lt;/a&gt;), most notably stopping &lt;code&gt;update_all&lt;/code&gt; and &lt;code&gt;delete_all&lt;/code&gt; from ignoring &lt;code&gt;having&lt;/code&gt; clauses.&lt;/p&gt;
  &lt;p&gt;Rafael Franca &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/190813/rss" title="bernsteinbear.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Support Local Variables&lt;/a&gt;&lt;/span&gt; — A paper (&lt;a href="https://rubyweekly.com/link/190814/rss" style=" color: #0055bb;   "&gt;PDF&lt;/a&gt;) from the ZJIT team – to be presented at &lt;a href="https://rubyweekly.com/link/190815/rss" style=" color: #0055bb;   "&gt;VMIL 2026&lt;/a&gt; next month – on the Ruby features that make local variables hard to compile, and how CRuby's new JIT optimizes them aggressively.&lt;/p&gt;
  &lt;p&gt;Bernstein, Kokubun, Patterson, Wu and Menard &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/190816/rss" title="evilmartians.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Rails Hyperdrive: Supercharged Agentic Development for Rails&lt;/a&gt;&lt;/span&gt; — A dev-only Rails engine giving coding agents MCP tools to query your running app, plus skills from your gems, matched to your bundle.&lt;/p&gt;
  &lt;p&gt;Albert Pazderin (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/190810/rss" title="www.appsignal.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Rails World Week: One Gem for Errors, N+1s, Sidekiq and Logs&lt;/a&gt;&lt;/span&gt; — APM built for Ruby and Rails. Every feature on every plan, unlimited users, one bill. &lt;a href="https://rubyweekly.com/link/190810/rss" style=" color: #0055bb;   "&gt;30-day trial, no 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;a href="https://rubyweekly.com/link/190817/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Herb on Rails&lt;/a&gt; – Auditing an app's views with Herb, now that it's &lt;a href="https://rubyweekly.com/link/190818/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;directly supported&lt;/a&gt; in edge Rails. &lt;cite&gt;Juan Vasquez (FastRuby.io)&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://rubyweekly.com/link/190819/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Building a Web Crawler in Ruby with Vessel 0.3&lt;/a&gt; – A walkthrough of Ruby's Scrapy-like framework. &lt;cite&gt;Josef Strzibny&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📺 &lt;a href="https://rubyweekly.com/link/190820/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;The Design and Implementation of ZJIT, and the Next Five Years&lt;/a&gt; &lt;cite&gt;Max Bernstein&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/190821/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/nmk7flf3ulcsxbfvcdy5.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/190821/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Amazing Print 3.0: Pretty Print Your Ruby Objects with Style&lt;/a&gt;&lt;/span&gt; — A fork of the long-fallow &lt;a href="https://rubyweekly.com/link/190822/rss" style=" color: #0055bb;   "&gt;AwesomePrint&lt;/a&gt; that continues to get updates. v3.0 adds Ruby 4.0 support, more options, and updates dependencies.&lt;/p&gt;
  &lt;p&gt;AmazingPrint &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/190825/rss" title="go.fastruby.io" style=" color: #0055bb;    font-size: 1.05em;"&gt;🚨 Rails 7.2 is EOL, 8.0 Support Ends Nov 7. Is Your App Ready?&lt;/a&gt;&lt;/span&gt; — "FastRuby.io upgraded our app to Rails 8.1 on time and on budget." 🤖 AI + our senior team, fixed monthly fee.&lt;/p&gt;
  &lt;p&gt;Bonsai by FastRuby.io® &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/190823/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;HotCell: Securely Run Untrusted Code on Untrusted Inputs&lt;/a&gt;&lt;/span&gt; — A &lt;em&gt;"still pre-release"&lt;/em&gt; way to hand untrusted input processing work (e.g. processing user uploaded files) off to a separate process in a container for improved security and to reduce the potential for fallout from things like &lt;a href="https://rubyweekly.com/link/190824/rss" style=" color: #0055bb;   "&gt;Active Storage's recent vulnerability&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;37signals &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/190826/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Suture 1.2: A Tool for Refactoring Legacy Code&lt;/a&gt;&lt;/span&gt; — Create ‘seams’ around code you want to refactor, record its inputs and outputs, then verify your rewrite against them and run both side by side. v1.2 is the first release in 8 years and adds Ruby 3.4 and 4.0 support.&lt;/p&gt;
  &lt;p&gt;Test Double &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/190835/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Gem in a Box 4.0&lt;/a&gt; – Self-hosted gem server. Now serves the compact index Bundler prefers, and drops the long-sunset RubyGems proxy mode.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/190831/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Extralite 3.1&lt;/a&gt; – Fast, lightweight SQLite library. Now caches prepared statements for parameterized queries automatically.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/190832/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Receipts 3.0&lt;/a&gt; – Library to generate PDF receipts, invoices and statements. Now uses a pure-Ruby PDF generator instead of Prawn.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/190833/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Rails Pulse 0.4&lt;/a&gt; – Self-hosted performance dashboard for Rails (see what it looks like &lt;a href="https://rubyweekly.com/link/190834/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;here&lt;/a&gt;). Now tracks exceptions too.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/190830/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Magnus 0.9&lt;/a&gt; – Write Ruby extensions in Rust. Now also works with the in-development Ruby 4.1.&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;💎 Shipping Ruby code with AI agents? &lt;a href="https://rubyweekly.com/link/190836/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Undercover CI&lt;/a&gt; catches untested methods in your PRs before you merge. Coverage percentages won't.&lt;/p&gt;
 
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/190837/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;At Rails World? Say hi to the AppSignal team in Austin&lt;/a&gt;. Demos, swag and honest answers about your monitoring bill.&lt;/p&gt;
 
&lt;p&gt;🌍 &lt;b&gt;New keys in config/locales?&lt;/b&gt; &lt;a href="https://rubyweekly.com/link/190838/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Localhero&lt;/a&gt; translates them on-brand in the same PR, consistent with your existing translations. Your team tweaks copy, not YAML.&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;The DHH Rails World 2026 Keynote&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/190839/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/gl9fh3wkahg1wrklyeco.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;No stranger to controversy, DHH said his keynote might &lt;em&gt;"ruffle a few feathers"&lt;/em&gt; and it certainly did, judging by the reaction on social media and &lt;a href="https://rubyweekly.com/link/190840/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;this extensive Reddit thread&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;No Rails news.&lt;/strong&gt; The keynote, &lt;a href="https://rubyweekly.com/link/190839/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;▶️ which you can watch here&lt;/a&gt;, will leave anyone hoping for Rails news disappointed. In a departure from prior keynotes, he didn't cover any new core Rails developments, though this may not be a total surprise (his last commit to the Rails repo was in December 2025).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pencils down?&lt;/strong&gt; A key theme was 37signals' now almost total use of coding agents to build software, increasingly in non-Ruby languages like Rust (which HEY's backend is being rewritten in). He called the move away from hand coding &lt;em&gt;"the biggest thing that has happened in the history of computing"&lt;/em&gt; and predicted this would quickly become the status quo.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Writing less code, more English.&lt;/strong&gt; He replayed a clip from a 2005 talk where he was building a Rails app on stage, reflecting: &lt;em&gt;"I was so excited about all the code I wasn't writing."&lt;/em&gt; His argument is agentic development takes Rails' idea of convention over configuration to its extreme, by describing what you want and, now, writing &lt;em&gt;no&lt;/em&gt; code. He went further, declaring English &lt;em&gt;"a better programming language than Ruby."&lt;/em&gt; 🫢&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Where does that leave Rails?&lt;/strong&gt; What little he said about Rails was mostly positive. While HEY is moving towards non-Ruby native apps, he said Rails remains &lt;em&gt;"particularly well positioned"&lt;/em&gt; for the web, and that its conventions &lt;a href="https://rubyweekly.com/link/190841/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;help agents write Rails apps well&lt;/a&gt;, as &lt;a href="https://rubyweekly.com/link/190842/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;recent benchmarks&lt;/a&gt; suggest.&lt;/p&gt;
&lt;p&gt;He closed with a call to remain optimistic about the changing nature of software development. Earlier, he'd said he had &lt;em&gt;"retired from being a professional programmer"&lt;/em&gt;, describing programmers' new role as &lt;em&gt;"professional makers of things"&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Initial reactions have been mixed:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In the YouTube comments, Stefan Lindbohm dryly noted: &lt;em&gt;"This is the most confusing funeral I've ever experienced."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Olly Headey came away &lt;a href="https://rubyweekly.com/link/190843/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;with mixed impressions&lt;/a&gt;, finding it fascinating, and mused: &lt;em&gt;"I actually think this might be the last Rails World ever, at least in the traditional conference form."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Irina Nazarova of Evil Martians 𝕏 &lt;a href="https://rubyweekly.com/link/190844/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;said&lt;/a&gt; the keynote left her &lt;em&gt;"depressed"&lt;/em&gt;, arguing &lt;em&gt;"Ruby &amp;gt; English for describing the logic"&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Hongli Lai, co-creator of &lt;em&gt;Passenger&lt;/em&gt;, 𝕏 &lt;a href="https://rubyweekly.com/link/190845/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;argued&lt;/a&gt; that developers are &lt;em&gt;"in the business of delivering user value"&lt;/em&gt; and still have plenty to do in providing vision, design, philosophy and constraints.&lt;/li&gt;
&lt;li&gt;Richard Worrall loved the keynote and, having been through &lt;em&gt;"the existential dread phase already"&lt;/em&gt;, 𝕏 &lt;a href="https://rubyweekly.com/link/190846/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;said&lt;/a&gt; he was &lt;em&gt;"ready to run through a damn wall."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I'm looking forward to seeing the rest of the Rails World talks, which may show off more of the technical Ruby and Rails-specific aspects the event is known for. Fingers crossed for an epic &lt;em&gt;tenderlove&lt;/em&gt; closer!… 😅&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/818/rss" width="1" height="1" /&gt;</description>
      <pubDate>Thu, 24 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://rubyweekly.com/issues/818</guid>
    </item>
    <item>
      <title>Did AI agents attack RubyGems?</title>
      <link>https://rubyweekly.com/issues/817</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;#​817 — September 17, 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/190501/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/190451/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/mjsvu9mg79porrbvr53z.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/190451/rss" title="rubyhack.ai" style=" color: #0055bb;    font-size: 1.1em; line-height: 1.4em;"&gt;Researchers Tie RubyGems' 'GemStuffer' Campaign to OpenAI Agents&lt;/a&gt;&lt;/span&gt; — Researchers say &lt;a href="https://rubyweekly.com/link/190452/rss" style=" color: #0055bb;   "&gt;May's RubyGems spam flood&lt;/a&gt; came from OpenAI agents that ran code on &lt;a href="https://rubyweekly.com/link/190453/rss" style=" color: #0055bb;   "&gt;RubyDoc.info&lt;/a&gt; and probed a key-leaking CDN bug. OpenAI &lt;a href="https://rubyweekly.com/link/190502/rss" style=" color: #0055bb;   "&gt;has confirmed&lt;/a&gt; its agents were involved, but describes their actions as &lt;em&gt;"benign tasks"&lt;/em&gt;, while &lt;a href="https://rubyweekly.com/link/190454/rss" style=" color: #0055bb;   "&gt;Ruby Central finds no evidence&lt;/a&gt; of successful key theft.&lt;/p&gt;
  &lt;p&gt;Kitts, Larsen, and Von Arx &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;💡 Truffle Security, which &lt;a href="https://rubyweekly.com/link/190455/rss" style=" color: #0055bb; font-weight: 600;   "&gt;disclosed the caching bug&lt;/a&gt; in July, &lt;a href="https://rubyweekly.com/link/190456/rss" style=" color: #0055bb; font-weight: 600;   "&gt;digs into the code from May that targeted it&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/190450/rss" style=" color: #0055bb;   "&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/c_limit,w_480,h_480,q_auto/copm/0d388685.png" width="140" height="140" 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/190450/rss" title="www.fastruby.io" style=" color: #0055bb;    font-size: 1.05em;"&gt;Upgrading Rails Is Dead Simple Now. So Why Are You Behind?&lt;/a&gt;&lt;/span&gt; — Wouldn't it be easier to have Rails upgrades on autopilot? Our AI tooling plus 60,000 dev hours of upgrade experience ships them in half the time, for a fixed monthly fee. Rails 8.0 loses security support Nov 7. Our clients have peace of mind.&lt;/p&gt;
  &lt;p&gt;🌳 Bonsai by FastRuby.io &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/190457/rss" title="railsatscale.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Ractor-age Rails: A How-To Guide&lt;/a&gt;&lt;/span&gt; — A lot of work is being done to make &lt;a href="https://rubyweekly.com/link/190458/rss" style=" color: #0055bb;   "&gt;Ractors&lt;/a&gt; a practical route to true parallelism in Ruby, but making Rails &lt;em&gt;Ractor-able&lt;/em&gt; is a huge challenge. Hartley shares the patterns Shopify’s team is using to get there.&lt;/p&gt;
  &lt;p&gt;Hartley McGuire &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/190459/rss" title="www.ruby-lang.org" style=" color: #0055bb;    font-size: 1.05em;"&gt;Ruby 4.0.7 Released&lt;/a&gt;&lt;/span&gt; — A routine scheduled update with &lt;a href="https://rubyweekly.com/link/190460/rss" style=" color: #0055bb;   "&gt;numerous bug fixes&lt;/a&gt;, like addressing a string corruption issue during automatic GC compaction and a YJIT perf issue when using multiple Ractors.&lt;/p&gt;
  &lt;p&gt;Takashi Kokubun (Ruby Core 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;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/190461/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;RubyGems and Bundler 4.0.21&lt;/a&gt; add some hardening, including rejecting redirects that downgrade HTTPS to HTTP. &lt;code&gt;bundle update --bundler&lt;/code&gt; also no longer pulls in prereleases unless you ask specifically.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/190462/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;TruffleRuby 40&lt;/a&gt; has &lt;em&gt;just&lt;/em&gt; dropped as we go to press – I'll be checking it out and featuring it next week!&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🤖 &lt;a href="https://rubyweekly.com/link/190463/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;&lt;em&gt;Agents on Rails&lt;/em&gt; Stage 2&lt;/a&gt; goes beyond Stage 1's small tasks by having models build real features for 37signals' &lt;em&gt;Fizzy&lt;/em&gt; app. GPT-6 Astra came out on top.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ruby 4.1 will let &lt;a href="https://rubyweekly.com/link/190464/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;&lt;code&gt;method_defined?&lt;/code&gt; match private methods too&lt;/a&gt; using a new &lt;code&gt;include_all&lt;/code&gt; third argument, saving a second lookup that Jean Boussier found took ~1% of a big Rails app's boot time.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/190465/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Kevin Menard is now a Ruby core committer&lt;/a&gt;, with Matz greeting the nomination with &lt;em&gt;"Sounds legit! Welcome to the core committer."&lt;/em&gt;&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/190466/rss" title="metaredux.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;RuboCop 1.91: The Journey to 2.0 Begins&lt;/a&gt;&lt;/span&gt; — RuboCop's creator explains the new 'preview' mode and a shift to having fewer default cops enabled in 2.0, based on how popular Ruby projects configure it. He also has a request: &lt;em&gt;“Run &lt;code&gt;rubocop --preview&lt;/code&gt; on your codebase and tell us what you think.”&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;Bozhidar Batsov &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/190467/rss" title="www.youtube.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Building the Next-Generation Garbage Collector in Ruby&lt;/a&gt;&lt;/span&gt; — A RubyConf talk exploring Ruby’s modular garbage collector support and progress made on its &lt;a href="https://rubyweekly.com/link/190468/rss" style=" color: #0055bb;   "&gt;MMTk&lt;/a&gt;-based alternative.&lt;/p&gt;
  &lt;p&gt;Peter Zhu &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;💡 This is just one of the &lt;a href="https://rubyweekly.com/link/190469/rss" style=" color: #0055bb; font-weight: 600;   "&gt;many RubyConf videos&lt;/a&gt; that have landed on YouTube recently. I'll be covering more in coming weeks.&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/190470/rss" title="www.appsignal.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Switching APM? Compare AppSignal to Datadog, New Relic and Sentry&lt;/a&gt;&lt;/span&gt; — Side-by-side comparisons for Rails teams. Every feature on every plan, unlimited users, one predictable bill.&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;a href="https://rubyweekly.com/link/190471/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Porting a Ruby Discord Bot to Microsoft Teams with AI&lt;/a&gt; – A before-and-after of porting the same Ruby bot twice, by hand in 2023 and with Copilot this week (token usage and sneaky bugs included). &lt;cite&gt;Daniel Doubrovkine&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://rubyweekly.com/link/190472/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Setting Boundaries: A Type for Ranges in Rails&lt;/a&gt; &lt;cite&gt;Kushagra Singh&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://rubyweekly.com/link/190473/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Innocent Looking Ruby Can Be Dangerous&lt;/a&gt; &lt;cite&gt;Greg Molnar&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/190474/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/en0scgzlfkdshsmhbxyo.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/190474/rss" title="davidteren.github.io" style=" color: #0055bb;    font-size: 1.05em;"&gt;Mutineer: Find Code Changes Your Tests Fail to Notice&lt;/a&gt;&lt;/span&gt; — A mutation tester that changes your code (using Prism) to find weaknesses in your tests. Supports Minitest and RSpec and is guided by code coverage to only run the test files that reach the mutated code each time.&lt;/p&gt;
  &lt;p&gt;David Teren &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/190475/rss" title="sinaptia.dev" style=" color: #0055bb;    font-size: 1.05em;"&gt;AI Shouldn't Cost More Than It Saves&lt;/a&gt;&lt;/span&gt; — We can find where LLMs pay off, validate with real data, and tune for cost/effectiveness. Need help? &lt;a href="https://rubyweekly.com/link/190476/rss" style=" color: #0055bb;   "&gt;Let's talk&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;SINAPTIA &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/190477/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Minitest Heat: A Way to Spot Where Test Failures Cluster&lt;/a&gt;&lt;/span&gt; — A reporter that makes it easier to identify patterns and hot spots when testing. &lt;a href="https://rubyweekly.com/link/190478/rss" style=" color: #0055bb;   "&gt;More detail and an example here.&lt;/a&gt; v2.2 supports Minitest 6 with explicit plugin activation using &lt;code&gt;Minitest.load :heat&lt;/code&gt;.&lt;/p&gt;
  &lt;p&gt;Garrett Dimon &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/190479/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;pg_search 2.4: Active Record Named Scopes for Postgres Full Text Search&lt;/a&gt;&lt;/span&gt; — The README is packed with examples, but the basic idea is you get a DSL to lean on Postgres’s &lt;a href="https://rubyweekly.com/link/190480/rss" style=" color: #0055bb;   "&gt;FTS&lt;/a&gt; features in Rails apps. Now requires Ruby 3.3+ and Active Record 8.0+.&lt;/p&gt;
  &lt;p&gt;CaseBook &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/190481/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Resque 3.1&lt;/a&gt; – The popular Redis-backed background job library is back with a &lt;em&gt;"Clearing the PR Queue Release"&lt;/em&gt; closing almost a decade of PRs… 😅&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/190482/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Mission Control - Jobs 1.3&lt;/a&gt; – The official Rails dashboard for Solid Queue (and Resque!) now shows batches.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/190483/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;JWT 3.3&lt;/a&gt; – Implementation of the RFC 7519 OAuth JSON Web Token (JWT) standard.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/190484/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;parallel_tests 5.8&lt;/a&gt; – Faster Minitest, RSpec, and more, by running in parallel on multiple cores.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/190485/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Amoeba 3.4&lt;/a&gt; – Easily clone Active Record objects including their associations.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/190486/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;SimpleCov 1.3&lt;/a&gt;&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;You already trust Postgres for Rails. &lt;a href="https://rubyweekly.com/link/190488/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;TimescaleDB&lt;/a&gt; extends it for time-series and analytics, no second database. &lt;a href="https://rubyweekly.com/link/190488/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Get $1000 credit&lt;/a&gt;.&lt;/p&gt;
 
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/190487/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;At Rails World?&lt;/a&gt; Wed 9/23, 6-8pm in Austin: Tacos at sunset with &lt;a href="https://rubyweekly.com/link/190487/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;AppSignal&lt;/a&gt;. Donut tower, swag, nerdy ice breakers. &lt;a href="https://rubyweekly.com/link/190487/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;RSVP&lt;/a&gt;.&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;📢  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;"&gt;
  &lt;a href="https://rubyweekly.com/link/190489/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/p6yltr8fkd09lp1y1qpo.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;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/190489/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Homebrew 7.0 has been released&lt;/a&gt; with the popular package manager introducing &lt;a href="https://rubyweekly.com/link/190490/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;an official GUI app&lt;/a&gt; &lt;em&gt;(above)&lt;/em&gt;, built-in vulnerability checks, and other security improvements.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Andrew Nesbitt looks at &lt;a href="https://rubyweekly.com/link/190491/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;which languages still let a local file 'shadow' the standard library&lt;/a&gt;, prompted by an attack on a coding agent. Luckily Ruby closed that door back in 1.9.2 (when &lt;code&gt;$:&lt;/code&gt; stopped including the current directory).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Chris Coyier rounds up &lt;a href="https://rubyweekly.com/link/190492/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;new and emerging HTML features worth knowing about&lt;/a&gt;, like the &lt;code&gt;&amp;lt;geolocation&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;install&amp;gt;&lt;/code&gt; elements, as well as HTML-in-Canvas and improvements to &lt;code&gt;&amp;lt;select&amp;gt;&lt;/code&gt; customization.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;I love these &lt;a href="https://rubyweekly.com/link/190493/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;pure CSS 'hand drawn' annotations&lt;/a&gt; you can add to any page. Could be a neat addition to your apps.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;📱 Joe Masilotti says &lt;a href="https://rubyweekly.com/link/190494/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Ruby Native apps are now running on over 100,000 devices&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&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/817/rss" width="1" height="1" /&gt;</description>
      <pubDate>Thu, 17 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://rubyweekly.com/issues/817</guid>
    </item>
    <item>
      <title>Shopify's structural linter for Ruby codebases</title>
      <link>https://rubyweekly.com/issues/816</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;#​816 — September 10, 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/190178/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/190113/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/wxfjdsufnvsacb3lqxdx.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;a href="https://rubyweekly.com/link/190113/rss" style=" color: #0055bb; font-weight: 600;   "&gt;RubyKaigi's Talks&lt;/a&gt; Are Finally Online&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/190114/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;RubyKaigi&lt;/a&gt;, the conference where Ruby's core team gathers each year, took place in Japan this April, but the talks have just made it onto YouTube with &lt;a href="https://rubyweekly.com/link/190113/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;68 videos in this playlist&lt;/a&gt;. Some highlights:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;▶️ &lt;a href="https://rubyweekly.com/link/190115/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Matz's "Meet Spinel" keynote&lt;/a&gt; – It's in Japanese, but the English subtitles are good. Matz covers his use of AI, what AI has helped clear from his backlog, and the &lt;a href="https://rubyweekly.com/link/190116/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Spinel&lt;/a&gt; project (including a fun live demo).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;▶️ &lt;a href="https://rubyweekly.com/link/190117/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Twenty Years of JRuby&lt;/a&gt; – Charles Nutter's keynote on two decades of keeping Ruby thriving on the JVM.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;▶️ &lt;a href="https://rubyweekly.com/link/190118/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Surviving Black Friday: 329 Billion Requests with Falcon&lt;/a&gt; – Falcon's author Samuel Williams and fellow Shopify engineers on running the &lt;a href="https://rubyweekly.com/link/190119/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Falcon&lt;/a&gt; high-performance web server at scale.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;▶️ &lt;a href="https://rubyweekly.com/link/190120/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;From C to Ruby: Porting Doom&lt;/a&gt; – Chris Hasiński on his &lt;a href="https://rubyweekly.com/link/190121/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Ruby DOOM port&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I'll link to more as I get through them. There's some great stuff here!&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;a href="https://rubyweekly.com/link/190112/rss" style=" color: #0055bb;   "&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/c_limit,w_480,h_480,q_auto/copm/b42eb770.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/190112/rss" title="judoscale.com" style=" color: #0055bb;    font-size: 1.1em; line-height: 1.4em;"&gt;You Are an Expensive Babysitter&lt;/a&gt;&lt;/span&gt; — Judoscale automatically scales your job queues based on queue latency (the only reliable scaling metric), so you don't need to babysit them. It really is that easy. &lt;a href="https://rubyweekly.com/link/190112/rss" style=" color: #0055bb;   "&gt;Sign up for free and stop worrying about your job queues&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;Judoscale &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/190122/rss" title="railsatscale.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Introducing Rubydex Linter: Structural Checks for Ruby Projects&lt;/a&gt;&lt;/span&gt; — &lt;a href="https://rubyweekly.com/link/190123/rss" style=" color: #0055bb;   "&gt;Rubydex&lt;/a&gt;, a static analysis engine for Ruby, now has a built-in linter for cross-file, project-level structural rules, like &lt;em&gt;“no class may include both of these mixins”&lt;/em&gt;. Shopify has already used it to replace numerous long-running tests with 20+ such rules to check its whole monolith in under a minute.&lt;/p&gt;
  &lt;p&gt;Stan Lo &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;Ractor's rules are changing: &lt;a href="https://rubyweekly.com/link/190124/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;classes and modules are now 'owned' by the Ractor that created them&lt;/a&gt;, and only that owner can modify them, replacing several 'main Ractor only' rules. Also merged: &lt;a href="https://rubyweekly.com/link/190125/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;timeout support for &lt;code&gt;Ractor.receive&lt;/code&gt; and &lt;code&gt;Ractor.select&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Bozhidar Batsov has &lt;a href="https://rubyweekly.com/link/190126/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;switched off 24 style cops under RuboCop's new 'preview' mode&lt;/a&gt;, a taste of the leaner defaults planned for RuboCop 2.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Shopify's "$1 million over four years" &lt;em&gt;Ruby Shield&lt;/em&gt; partnership with Ruby Central has concluded. &lt;a href="https://rubyweekly.com/link/190127/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Here's a report on what it achieved&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🔒 &lt;code&gt;rubyzip&lt;/code&gt; versions prior to 3.4.0 &lt;a href="https://rubyweekly.com/link/190128/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;contain a path traversal vulnerability&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;When Sam Ruby's &lt;a href="https://rubyweekly.com/link/190116/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Spinel&lt;/a&gt;-compiled &lt;em&gt;Campfire&lt;/em&gt; wouldn't scale much beyond one core, &lt;a href="https://rubyweekly.com/link/190129/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Matz found a bug in Spinel's runtime&lt;/a&gt;, and that was only the &lt;em&gt;start&lt;/em&gt; of this fun story.&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/190130/rss" title="island94.org" style=" color: #0055bb;    font-size: 1.05em;"&gt;Converting a Block Interface to &lt;code&gt;start&lt;/code&gt;/&lt;code&gt;stop&lt;/code&gt; Methods with a Fiber&lt;/a&gt;&lt;/span&gt; — You might reach for a thread to handle this problem, but &lt;a href="https://rubyweekly.com/link/190131/rss" style=" color: #0055bb;   "&gt;fibers&lt;/a&gt; can get you there with less plumbing and overhead.&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/190132/rss" title="noteflakes.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Beyond ORMs: Why Sequel's Original Creator Now Writes Plain SQL&lt;/a&gt;&lt;/span&gt; — The original creator of &lt;a href="https://rubyweekly.com/link/190133/rss" style=" color: #0055bb;   "&gt;Sequel&lt;/a&gt; (before Jeremy Evans took the reins) argues most apps only need a few dozen queries, so why use a DSL when you can write SQL queries in a per-entity ‘store’ class instead?&lt;/p&gt;
  &lt;p&gt;Sharon Rosner &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/190134/rss" style=" color: #0055bb; font-weight: 600;   "&gt;This 2009 blog interview with Jeremy Evans&lt;/a&gt; is a neat bit of history covering Sequel's maintenance handover and history generally.&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/190135/rss" title="durableprogramming.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;How Compliant is Psych? How Much Better Is libfyaml?&lt;/a&gt;&lt;/span&gt; — &lt;a href="https://rubyweekly.com/link/190136/rss" style=" color: #0055bb;   "&gt;Psych&lt;/a&gt;, Ruby’s YAML parser, added an experimental &lt;a href="https://rubyweekly.com/link/190137/rss" style=" color: #0055bb;   "&gt;libfyaml&lt;/a&gt; backend offering stricter YAML 1.2 support. Here’s a test-suite comparison plus a tour of Psych’s YAML edge cases.&lt;/p&gt;
  &lt;p&gt;David Berube &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/190138/rss" title="go.fastruby.io" style=" color: #0055bb;    font-size: 1.05em;"&gt;🚨 Rails 7.2 is Already EOL; 8.0 is Nov 7. What’s Your Exposure?&lt;/a&gt;&lt;/span&gt; — We scan every image, runtime, and K8s workload for CVEs, prioritize by CISA KEV, and manage your risk. &lt;a href="https://rubyweekly.com/link/190138/rss" style=" color: #0055bb;   "&gt;Let's talk!&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;FastRuby.io® | Infrastructure Assessment &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/190139/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;One Decision Put Ruby into a Downward Spiral, and It's Not Too Late to Fix It&lt;/a&gt; – I don't agree with the conclusion, but it's an interesting read. &lt;cite&gt;Matt Solt&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://rubyweekly.com/link/190140/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;The Rails Deprecations You Missed This Summer&lt;/a&gt; – Eight Active Record changes bound for Rails 8.2. &lt;cite&gt;Julio Lucero&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://rubyweekly.com/link/190141/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Standardizing Exception Message Style in Ruby&lt;/a&gt; &lt;cite&gt;Daniel Doubrovkine&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://rubyweekly.com/link/190142/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Optimizing Rails DB Usage: Bullet vs. Prosopite&lt;/a&gt;  &lt;cite&gt;Spinel Cooperative&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; 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/190143/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;json 3.0: The JSON Gem Gets a Big Clean-Up&lt;/a&gt;&lt;/span&gt; — &lt;code&gt;JSON.load&lt;/code&gt; and &lt;code&gt;JSON.dump&lt;/code&gt; are now safe by default with the removal of &lt;code&gt;create_additions&lt;/code&gt;, plus lots of cleanup (no more global mutable defaults, which were blocking Ractor). &lt;strong&gt;However, v3.0 &lt;a href="https://rubyweekly.com/link/190144/rss" style=" color: #0055bb;   "&gt;breaks current Rails releases&lt;/a&gt;&lt;/strong&gt; so pin &lt;code&gt;json &amp;lt; 3&lt;/code&gt; for now.&lt;/p&gt;
  &lt;p&gt;Jean Boussier &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/190145/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;SimpleCov 1.2: Per-Test Attribution and Production Coverage&lt;/a&gt;&lt;/span&gt; — The code coverage tool can now attribute coverage to individual tests, rerun only affected tests on save, cover views (ERB/Haml/Slim), and monitor coverage on &lt;em&gt;production&lt;/em&gt; traffic to find code that’s not getting used.&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/190146/rss" title="www.appsignal.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Rails Monitoring That Never Stops at the Cap. No Overage Invoices&lt;/a&gt;&lt;/span&gt; — Errors, traces, Sidekiq, hosts and logs in one gem. Unlimited users, one bill. &lt;a href="https://rubyweekly.com/link/190146/rss" style=" color: #0055bb;   "&gt;30-day free trial, no 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/190147/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Grape 4.0: The Opinionated REST-like API Framework&lt;/a&gt;&lt;/span&gt; — Grape can run on Rack or be pulled into existing Rails or Sinatra apps, say, and provides a DSL specifically to build RESTful APIs. &lt;a href="https://rubyweekly.com/link/190148/rss" style=" color: #0055bb;   "&gt;v4.0&lt;/a&gt; is &lt;a href="https://rubyweekly.com/link/190149/rss" style=" color: #0055bb;   "&gt;much faster&lt;/a&gt; than before, adds HTTP &lt;code&gt;QUERY&lt;/code&gt; support, and removes deprecations.&lt;/p&gt;
  &lt;p&gt;Doubrovkine, Proulx, 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/190150/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;WhatLanguage 2.1: Natural Language Detection for 160+ Languages&lt;/a&gt;&lt;/span&gt; — No-dependency Unicode and statistics-based text language detection for strings. v2.1 improves detection for short texts and handles texts with mixed scripts better.&lt;/p&gt;
  &lt;p&gt;Peter Cooper &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/190151/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;RubyGems / Bundler 4.1 Beta 1&lt;/a&gt; is ready to try, swapping the Molinillo dependency-resolution implementation for PubGrub, adding &lt;a href="https://rubyweekly.com/link/190152/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;content-addressable gems&lt;/a&gt;, post-quantum signing, and &lt;a href="https://rubyweekly.com/link/190153/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;&lt;code&gt;--cooldown&lt;/code&gt;&lt;/a&gt; overrides.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🤖 &lt;a href="https://rubyweekly.com/link/190154/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;RubyLLM 2.0.0 RC2&lt;/a&gt; – Here's &lt;a href="https://rubyweekly.com/link/190155/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;some of what's coming&lt;/a&gt; for the popular LLM / AI framework, including resumable agents and better support for non-text modalities like OCR, video-gen and TTS.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/190156/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;rv 0.7&lt;/a&gt; – Ruby version/gem manager that installs precompiled Rubies in seconds.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/190157/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Parallel 2.2&lt;/a&gt; – Execute code in parallel using processes, threads, or Ractors.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/190158/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;mruby 4.1 RC&lt;/a&gt; – Matz's lightweight, embeddable Ruby implementation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/190159/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;ruby-macho 7.0&lt;/a&gt; – Pure-Ruby library for parsing and modifying Mach-O files.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/190160/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;The Git Gem 5.4&lt;/a&gt; – Interface for interacting with Git repositories.&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;💎 Shipping Ruby code with AI agents? &lt;a href="https://rubyweekly.com/link/190161/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Undercover CI&lt;/a&gt; catches untested methods in your PRs before you merge. Coverage percentages won't.&lt;/p&gt;
 
&lt;p&gt;🌮 &lt;a href="https://rubyweekly.com/link/190162/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Join AppSignal for tacos at Rails World&lt;/a&gt;. Sunset in Austin with Evil Martians, a donut tower, swag &amp;amp; nerdy ice breakers. &lt;a href="https://rubyweekly.com/link/190162/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;RSVP&lt;/a&gt;.&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;📢  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;"&gt;
  &lt;a href="https://rubyweekly.com/link/190163/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/qwtnwizdp1fp8yvzwdmd.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;ul&gt;
&lt;li&gt;
&lt;p&gt;✨ GitHub has &lt;a href="https://rubyweekly.com/link/190164/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;a new privacy-safe star history API&lt;/a&gt;. GitHub recently locked down the 'stargazer' endpoints for privacy reasons, which broke star tracking sites like &lt;a href="https://rubyweekly.com/link/190165/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Star History&lt;/a&gt; (&lt;a href="https://rubyweekly.com/link/190166/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;more background here&lt;/a&gt;). Now you can check out &lt;a href="https://rubyweekly.com/link/190163/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;an example comparing three Ruby libraries&lt;/a&gt; &lt;em&gt;(shown above)&lt;/em&gt; or create your own.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/190167/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Tailwind Labs is joining Shopify&lt;/a&gt;. &lt;em&gt;Tailwind CSS&lt;/em&gt; and their other open source projects will stay maintained and MIT-licensed.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🇨🇿 &lt;a href="https://rubyweekly.com/link/190168/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;EuRuKo 2026&lt;/a&gt; is next week in Brno, with Matz opening and Koichi Sasada closing. &lt;a href="https://rubyweekly.com/link/190169/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Tickets&lt;/a&gt; are still available.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🐘 &lt;a href="https://rubyweekly.com/link/190170/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Kafgres&lt;/a&gt; is a Kafka-compatible message broker that runs &lt;em&gt;inside&lt;/em&gt; Postgres. Catnip for the &lt;em&gt;"just use Postgres"&lt;/em&gt; fans who want a queue and a log in one place!&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;👕 TIL you can &lt;a href="https://rubyweekly.com/link/190171/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;buy official Puma merch&lt;/a&gt; via a collaboration with &lt;em&gt;Planet Argon&lt;/em&gt;.&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/816/rss" width="1" height="1" /&gt;</description>
      <pubDate>Thu, 10 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://rubyweekly.com/issues/816</guid>
    </item>
    <item>
      <title>ZJIT can now inline GC allocations</title>
      <link>https://rubyweekly.com/issues/815</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;#​815 — September 3, 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/189891/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;"&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/189850/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/upfxjx5o3kbec1l4cc40.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/189850/rss" title="railsatscale.com" style=" color: #0055bb;    font-size: 1.1em; line-height: 1.4em;"&gt;ZJIT 🤝 GC: Inlining GC Fastpath in ZJIT&lt;/a&gt;&lt;/span&gt; — JIT compilation first came to CRuby eight years ago, but the garbage collector has remained opaque to CRuby's JITs, with every allocation requiring a function call. Now, ZJIT can &lt;em&gt;inline&lt;/em&gt; allocations, yielding a notable performance boost. Fingers crossed for Ruby 4.1!&lt;/p&gt;
  &lt;p&gt;Peter Zhu &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 Bluesky, Benoit Daloze noted that &lt;a href="https://rubyweekly.com/link/189851/rss" style=" color: #0055bb; font-weight: 600;   "&gt;TruffleRuby has been doing this for a decade&lt;/a&gt;, one of many reasons it's such a fast implementation!&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/189849/rss" style=" color: #0055bb;   "&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/c_limit,w_480,h_480,q_auto/copm/d3213a3c.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/189849/rss" title="go.fastruby.io" style=" color: #0055bb;    font-size: 1.05em;"&gt;🚨 We Give Your Auditors VEX, Not a Scanner Dump&lt;/a&gt;&lt;/span&gt; — We map your images, runtimes, and K8s workloads against CISA's KEV catalog, decide which findings actually impact your code, and issue the verdicts as VEX statements. Rails 7.2 is already EOL and 8.0 is next: Nov 7! What else is a risk in production?&lt;/p&gt;
  &lt;p&gt;FastRuby.io® | Infrastructure Assessment &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/189892/rss" title="intertwingly.net" style=" color: #0055bb;    font-size: 1.05em;"&gt;Campfire Now Works on Spinel (Mostly)&lt;/a&gt;&lt;/span&gt; — Sam's work compiling Rails apps to run on Matz's &lt;a href="https://rubyweekly.com/link/189893/rss" style=" color: #0055bb;   "&gt;Spinel&lt;/a&gt; Ruby AOT compiler has yielded a &lt;a href="https://rubyweekly.com/link/189894/rss" style=" color: #0055bb;   "&gt;Campfire&lt;/a&gt; 'that chats' in a 5MB binary. Far from 100% complete, but you &lt;em&gt;can&lt;/em&gt; grab it and try it for yourself.&lt;/p&gt;
  &lt;p&gt;Sam Ruby &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/189852/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;RubyGems and Bundler 4.0.20&lt;/a&gt; make &lt;code&gt;gem&lt;/code&gt; work under &lt;code&gt;RUBY_BOX=1&lt;/code&gt; (&lt;a href="https://rubyweekly.com/link/189853/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;explained in more detail here&lt;/a&gt;), and &lt;code&gt;gem update --system&lt;/code&gt; now prints a link to the release notes.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🤖 As part of Rails' &lt;em&gt;Agents on Rails&lt;/em&gt; effort, the newly released &lt;a href="https://rubyweekly.com/link/189854/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Fable 5.1 and GLM 5.3 Flash were run against their benchmark&lt;/a&gt; showing Fable is the new leader amongst models. GLM 5.3 Flash did well, though, at ~96% lower cost.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Samuel Williams proposes that &lt;code&gt;IO::Buffer&lt;/code&gt;, first introduced in Ruby 3.1, &lt;a href="https://rubyweekly.com/link/189855/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;should stop being 'experimental'&lt;/a&gt; in Ruby 4.1.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🇩🇪 &lt;a href="https://rubyweekly.com/link/189856/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Berlin.rb&lt;/a&gt; is a new monthly meetup in Berlin, Germany. Its first meetup, next week, includes Carmine Paolino giving a talk on &lt;a href="https://rubyweekly.com/link/189857/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;RubyLLM&lt;/a&gt; 2.0.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/189858/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Kevin Menard has been proposed as a CRuby core committer&lt;/a&gt;.&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/189895/rss" title="www.securityweek.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;A Critical Rails Vulnerability in Attackers' Crosshairs&lt;/a&gt;&lt;/span&gt; — Remember the major &lt;a href="https://rubyweekly.com/link/189896/rss" style=" color: #0055bb;   "&gt;Active Storage vulnerability&lt;/a&gt; (dubbed &lt;em&gt;KindaRails2Shell&lt;/em&gt;) from late July? It's now being actively exploited, and VulnCheck &lt;a href="https://rubyweekly.com/link/189897/rss" style=" color: #0055bb;   "&gt;reckoned&lt;/a&gt;, back in early August, that patching may not be enough if your secrets leaked first.&lt;/p&gt;
  &lt;p&gt;Ionut Arghire (Security Week) &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/189859/rss" title="code.dblock.org" style=" color: #0055bb;    font-size: 1.05em;"&gt;Adventures in Daylight Saving, Norfolk Island, and Time Zone Math&lt;/a&gt;&lt;/span&gt; — More timezone quirks (don't we love 'em?) including how &lt;code&gt;Europe/Dublin&lt;/code&gt;'s 'inverted' DST scheme can make Ruby's &lt;code&gt;dst?&lt;/code&gt; disagree with itself, and why Norfolk Island's permanent 30 minute offset change broke a gem.&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;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/189860/rss" title="sinaptia.dev" style=" color: #0055bb;    font-size: 1.05em;"&gt;AI Shouldn't Cost More Than It Saves&lt;/a&gt;&lt;/span&gt; — We can find where LLMs pay off, validate with real data, and tune for cost/effectiveness. Need help? &lt;a href="https://rubyweekly.com/link/189861/rss" style=" color: #0055bb;   "&gt;Let's talk&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;SINAPTIA &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/189862/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Charles Nutter Tells the JRuby Story&lt;/a&gt; – An hour long interview with JRuby's maintainer on the project's past, present and future, plus a little myth debunking. &lt;cite&gt;Technology for Humans&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://rubyweekly.com/link/189863/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Solid Queue Batches: Evolution and Architecture&lt;/a&gt; – How &lt;a href="https://rubyweekly.com/link/189864/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Solid Queue&lt;/a&gt; tracks batch completion without hammering a single database row, by the dev who built it. &lt;cite&gt;JP Camara&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://rubyweekly.com/link/189865/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Using Rails for Marketing Sites in the AI Era?&lt;/a&gt; – Two developers debate the idea. &lt;cite&gt;Adam McCrea and Jon Sully&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://rubyweekly.com/link/189866/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Using Ruby to Set the Status Line in Claude Code&lt;/a&gt; &lt;cite&gt;Lucian Ghinda&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/189898/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/r2muzbdbco1swucbyhax.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/189898/rss" title="paolino.me" style=" color: #0055bb;    font-size: 1.05em;"&gt;ArchSpec: Executable Architecture Specs for Ruby Apps&lt;/a&gt;&lt;/span&gt; — An architecture linter for any Ruby codebase. Declare components and boundaries in a single 
spec, then changes can be checked in CI, with no AI and no app boot involved. Presets are included for Rails, hexagonal and modular monoliths. If you remember &lt;a href="https://rubyweekly.com/link/189899/rss" style=" color: #0055bb;   "&gt;Packwerk&lt;/a&gt;, this goes a bit further.&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;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/189870/rss" title="www.appsignal.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;APM for Ruby on Rails. One Gem, Every Feature, One Bill&lt;/a&gt;&lt;/span&gt; — Errors, N+1 queries, slow SQL, Sidekiq jobs and host metrics. Every feature on every plan. Two-minute install.&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/189867/rss" title="ferrum.rubycdp.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Ferrum 0.18: The High-Level API to Control Chrome in Ruby&lt;/a&gt;&lt;/span&gt; — A long standing library that drives Chrome over CDP (no Selenium needed). &lt;a href="https://rubyweekly.com/link/189868/rss" style=" color: #0055bb;   "&gt;0.18&lt;/a&gt; adds &lt;code&gt;Ferrum::Worker&lt;/code&gt; for talking to Workers and Service Workers, an API for reading the CDP accessibility tree, and thread safety improvements. &lt;em&gt;(Yes, we mentioned this release last week, but I only just noticed it deserved a full writeup!)&lt;/em&gt;&lt;/p&gt;
  &lt;p&gt;Dmitry Vorotilin and RubyCDP 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;💡 Capybara users also get &lt;a href="https://rubyweekly.com/link/189869/rss" style=" color: #0055bb; font-weight: 600;   "&gt;Cuprite 0.18&lt;/a&gt; (the Ferrum-powered Chrome driver for Capybara) today, adding real drag-and-drop events and initial shadow DOM support.&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/189871/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;MiniMagick 5.4: A Mini Replacement for RMagick&lt;/a&gt;&lt;/span&gt; — For when you don't need the full power of &lt;a href="https://rubyweekly.com/link/189872/rss" style=" color: #0055bb;   "&gt;RMagick&lt;/a&gt; and just need ImageMagick's features for resizing, rotating, converting, etc. &lt;a href="https://rubyweekly.com/link/189873/rss" style=" color: #0055bb;   "&gt;v5.4&lt;/a&gt; adds a feature to pass open file descriptors in, rather than writing/reading a temporary file.&lt;/p&gt;
  &lt;p&gt;Marohnić 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/189874/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Vessel 0.3: Fast High-Level Web Crawling Framework&lt;/a&gt;&lt;/span&gt; — Ruby's answer to &lt;em&gt;Scrapy&lt;/em&gt; is back with the first release in five years. Pages can now be fetched using Chrome via &lt;a href="https://rubyweekly.com/link/189875/rss" style=" color: #0055bb;   "&gt;Ferrum&lt;/a&gt; or plain HTTP via Mechanize, plus we get proxy rotation, a middleware pipeline, and more.&lt;/p&gt;
  &lt;p&gt;Dmitry Vorotilin &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/189876/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Bullet 8.2&lt;/a&gt; – The N+1 query detector gains thread-safe &lt;code&gt;pause&lt;/code&gt;, &lt;code&gt;resume&lt;/code&gt; and &lt;code&gt;skip&lt;/code&gt; APIs, plus Ruby 4 support.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/189877/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;rubocop-graphql 1.8&lt;/a&gt; – Three new cops for &lt;code&gt;graphql-ruby&lt;/code&gt; schemas, and lazy cop loading for faster boot time.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/189878/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Graphiti 2.0&lt;/a&gt; – Sits on top of your models and exposes them over a JSON:API-compliant interface.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/189879/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Alba 4.0&lt;/a&gt; – A backwards-incompatible release for the JSON serializer that sweeps out long-deprecated APIs.&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;🧰 &lt;a href="https://rubyweekly.com/link/189880/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;APM for Ruby and Rails&lt;/a&gt;: Errors, N+1s, slow SQL, Sidekiq jobs and host metrics in one gem. &lt;a href="https://rubyweekly.com/link/189880/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;30-day trial, no card&lt;/a&gt;.&lt;/p&gt;
 
&lt;p&gt;Building a reporting dashboard in Rails? &lt;a href="https://rubyweekly.com/link/189881/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;TimescaleDB adds time-series analytics&lt;/a&gt; to your Postgres, so it stays fast as data grows.&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;🪄  Join the Quine Clique&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/189882/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/wge78z1quiirg0jzfysn.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;We've previously written (at the end of &lt;a href="https://rubyweekly.com/link/189900/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;issue 805&lt;/a&gt;) about Ruby core team member Yusuke 'mame' Endoh and his fantastic code experiments and IOCCC entries.&lt;/p&gt;
&lt;p&gt;Among numerous Ruby projects, Yusuke is known for &lt;a href="https://rubyweekly.com/link/189883/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Quine Relay&lt;/a&gt;, a Ruby program that generates a Rust program which then continues through 128 different languages before a REXX program generates the original Ruby program again.&lt;/p&gt;
&lt;p&gt;Now he's back with &lt;a href="https://rubyweekly.com/link/189882/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Quine Clique&lt;/a&gt;, an even more significant undertaking written in Ruby that's both a standard quine &lt;em&gt;and&lt;/em&gt; able to produce a quine in any of 50 different languages. And then, &lt;em&gt;those&lt;/em&gt; quines have the same featureset!&lt;/p&gt;
&lt;p&gt;▶️ Yusuke has also &lt;a href="https://rubyweekly.com/link/189884/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;shared a 9-minute video&lt;/a&gt; showing off the concept, if you don't want to run it for yourself.&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/815/rss" width="1" height="1" /&gt;</description>
      <pubDate>Thu, 3 Sep 2026 00:00:00 +0000</pubDate>
      <guid>https://rubyweekly.com/issues/815</guid>
    </item>
  </channel>
</rss>
