<?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>Bundler's new dependency cooldown feature</title>
      <link>https://rubyweekly.com/issues/803</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;#​803 — June 4, 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/186081/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/186083/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/haj3cwdrxntdfofg2xv7.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/186083/rss" title="blog.rubygems.org" style=" color: #0055bb;    font-size: 1.1em; line-height: 1.4em;"&gt;Cool Down Before You Install: Give New Gems a Few Days to Be Vetted&lt;/a&gt;&lt;/span&gt; — A compromised account can ship a malicious gem and your next &lt;code&gt;bundle install&lt;/code&gt; can pull it within minutes. &lt;a href="https://rubyweekly.com/link/186084/rss" style=" color: #0055bb;   "&gt;Bundler 4.0.13&lt;/a&gt;, released yesterday, provides an opt-in 'cooldown' to hold back releases until they've 'aged' a few days. Meanwhile, &lt;code&gt;bundle outdated&lt;/code&gt; shows what’s waiting and for how long.&lt;/p&gt;
  &lt;p&gt;Hiroshi Shibata (RubyGems) &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/186082/rss" style=" color: #0055bb;   "&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/c_limit,w_480,h_480,q_auto/copm/6665f9bd.jpg" width="146" 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/186082/rss" title="link.testdouble.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;What Is Legacy Software in the Age of AI?&lt;/a&gt;&lt;/span&gt; — Software becomes legacy by succeeding long enough to accumulate the weight of every decision and shortcut made along the way. AI creates speed, but also many unintended consequences resulting in more user friction, not less.&lt;/p&gt;
  &lt;p&gt;Test Double &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/186085/rss" title="baweaver.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Beyond &lt;code&gt;Enumerable&lt;/code&gt;: For Want of Better Windows&lt;/a&gt;&lt;/span&gt; — &lt;code&gt;Enumerable&lt;/code&gt; gives names to most of the loops you’d otherwise hand-write, but not &lt;em&gt;all&lt;/em&gt; of them. Brandon goes after a shape it doesn't have, stateful sliding windows, and builds his own efficient implementation.&lt;/p&gt;
  &lt;p&gt;Brandon Weaver &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;&lt;p&gt;💡 I've been using Ruby for decades but still enjoy an occasional &lt;a href="https://rubyweekly.com/link/186086/rss" style=" color: #0055bb; font-weight: 600;   "&gt;browse through the &lt;code&gt;Enumerable&lt;/code&gt; docs&lt;/a&gt; as I still haven't internalized it all!&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;Matz's &lt;a href="https://rubyweekly.com/link/186087/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Spinel&lt;/a&gt; Ruby AOT compiler has continued to improve over the past few weeks, adding support for &lt;code&gt;Time&lt;/code&gt;, &lt;code&gt;Rational&lt;/code&gt;/&lt;code&gt;Complex&lt;/code&gt;, keyword args, GC introspection, and initial steps towards networking and gem support.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;📺 &lt;a href="https://rubyweekly.com/link/186088/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;The videos from &lt;em&gt;Tropical on Rails&lt;/em&gt;&lt;/a&gt;, which took place in Brazil this April, are now available on YouTube.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🎂 &lt;em&gt;Shopify&lt;/em&gt;, perhaps the world's largest &lt;a href="https://rubyweekly.com/link/186089/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Rails monolith&lt;/a&gt;, launched 20 years ago this week.&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/186090/rss" title="mitrev.net" style=" color: #0055bb;    font-size: 1.05em;"&gt;Managing Ruby Versions with Mise&lt;/a&gt;&lt;/span&gt; — A very basic introduction, but as I’ve fallen in love with &lt;a href="https://rubyweekly.com/link/186091/rss" style=" color: #0055bb;   "&gt;Mise&lt;/a&gt; this year for managing &lt;em&gt;all&lt;/em&gt; of my languages (e.g. Go, Node, Rust) and multiple Ruby implementations (e.g. TruffleRuby and JRuby, alongside CRuby) I want it to be on everyone’s radar. It’s great!&lt;/p&gt;
  &lt;p&gt;Georgi Mitrev &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;💰 37signals became &lt;a href="https://rubyweekly.com/link/186092/rss" style=" color: #0055bb; font-weight: 600;   "&gt;Mise's first 'premier' sponsor&lt;/a&gt; this 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/186093/rss" title="katafrakt.me" style=" color: #0055bb;    font-size: 1.05em;"&gt;What If Hanami Had Templateless Views?&lt;/a&gt;&lt;/span&gt; — It doesn’t take much to add this to Hanami, showing just how flexible the web framework can be.&lt;/p&gt;
  &lt;p&gt;Paweł Świątkowski &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/186094/rss" title="sinaptia.dev" style=" color: #0055bb;    font-size: 1.05em;"&gt;Jidoka: Automation with a Human Touch&lt;/a&gt;&lt;/span&gt; — Pair coding agents with senior engineers to modernize legacy code and ship faster with built-in quality.&lt;/p&gt;
  &lt;p&gt;JIDOKA by 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/186096/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;How to Choose a Gem Wisely&lt;/a&gt; – The basics of dependency hygiene. &lt;cite&gt;Gelsey Torres&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://rubyweekly.com/link/186097/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Implementing Account-Specific Rate Limits in Rails&lt;/a&gt;  &lt;cite&gt;Tejas Bubane&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/186098/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/lb8kzyedutk7spsovwx8.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;"&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/186098/rss" title="railsdesigner.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Meet Mata: Live Reloading with DOM Morphing for Rack Apps&lt;/a&gt;&lt;/span&gt; — A lightweight "live reload" solution for views in Rack apps. It uses Server-Sent Events (SSE) and &lt;a href="https://rubyweekly.com/link/186099/rss" style=" color: #0055bb;   "&gt;idiomorph&lt;/a&gt; for updating the DOM. &lt;a href="https://rubyweekly.com/link/186100/rss" style=" color: #0055bb;   "&gt;GitHub repo.&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;Rails Designer &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;&lt;p&gt;⚡ If you only need Rails, &lt;a href="https://rubyweekly.com/link/186131/rss" style=" color: #0055bb; font-weight: 600;   "&gt;Hotwire Spark&lt;/a&gt; offers a broader live reloading approach.&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/186103/rss" title="fandf.co" style=" color: #0055bb;    font-size: 1.05em;"&gt;Depot's Sherlock Can Now Analyze Your CI Builds&lt;/a&gt;&lt;/span&gt; — Ask it to break down your pipeline analytics, debug slow builds, or open a support ticket. It just works.&lt;/p&gt;
  &lt;p&gt;Depot &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/186104/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;SimpleCov 1.0 RC1: The Code Coverage Analysis Tool&lt;/a&gt;&lt;/span&gt; — &lt;a href="https://rubyweekly.com/link/186105/rss" style=" color: #0055bb;   "&gt;SimpleCov&lt;/a&gt; provides an effective way to use the code coverage data collected during testing by &lt;a href="https://rubyweekly.com/link/186106/rss" style=" color: #0055bb;   "&gt;Coverage&lt;/a&gt;. The changelog is a rather long list, but shows big strides forward in its config, parallel test support, and coverage for unloaded files.&lt;/p&gt;
  &lt;p&gt;Berlin, Fleischer, Matsuda, 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;span&gt;🔒&lt;/span&gt; &lt;a href="https://rubyweekly.com/link/186101/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Console1984: A More Secure, Auditable Rails Console&lt;/a&gt;&lt;/span&gt; — &lt;code&gt;rails console&lt;/code&gt; can often come in handy in prod, but it can also provide users with a little too much power. This extension helps to protect against easy access of sensitive information and provides an audit trail for when it happens.&lt;/p&gt;
  &lt;p&gt;Basecamp &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;💡 Back in 2023, 37signals wrote about how they use Console1984 and other tools to &lt;a href="https://rubyweekly.com/link/186102/rss" style=" color: #0055bb; font-weight: 600;   "&gt;allow employees to navigate customer information with care.&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;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/186107/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Tmuxinator: A Tool to Manage Complex &lt;code&gt;tmux&lt;/code&gt; Sessions Easily&lt;/a&gt;&lt;/span&gt; — &lt;a href="https://rubyweekly.com/link/186108/rss" style=" color: #0055bb;   "&gt;tmux&lt;/a&gt; is a terminal multiplexer a lot like &lt;code&gt;screen&lt;/code&gt; but with more features (and increasingly popular in the LLM era as a way to give agents persistent, controllable terminal sessions).&lt;/p&gt;
  &lt;p&gt;Bargi and Chow &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/186109/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Gem in a Box 3.1&lt;/a&gt; – Self-hosted gems server with push support. v3.1 deprecates the RubyGems proxy.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/186110/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;RuboCop 1.87.0&lt;/a&gt; – Adds &lt;code&gt;--enable-all-cops&lt;/code&gt; and &lt;code&gt;--disable-all-cops&lt;/code&gt; options along with an experimental &lt;a href="https://rubyweekly.com/link/186111/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Rubydex&lt;/a&gt; integration.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/186112/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Ratomic 0.2&lt;/a&gt; – Mike Perham's library of Ractor-safe mutable data structures.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🔒 &lt;a href="https://rubyweekly.com/link/186113/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Puma 8.0.2&lt;/a&gt; and &lt;a href="https://rubyweekly.com/link/186114/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;7.2.1&lt;/a&gt; – Two security-related bugs patched.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/186115/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Excon 1.5&lt;/a&gt; – Fast HTTP 1.1 client library.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/186116/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Cucumber 11.1&lt;/a&gt;, &lt;a href="https://rubyweekly.com/link/186117/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;RMagick 7.0.3&lt;/a&gt;, &lt;a href="https://rubyweekly.com/link/186118/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Passenger 6.1.4&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;🔬 Shipping AI code? &lt;a href="https://rubyweekly.com/link/186119/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. Free for open source.&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/186120/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/esgf3ag3ra1bdpygf18p.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/186120/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;The Ruby Users Forum&lt;/a&gt; &lt;em&gt;(above)&lt;/em&gt; launched earlier this year as a venue for Rubyists to ask questions and hang out with other Rubyists. It has also become a way to get support for numerous Ruby projects, &lt;a href="https://rubyweekly.com/link/186121/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;now including Sidekiq and Faktory&lt;/a&gt;, with creator Mike Perham ready to answer your questions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;As well as being a Rubyist, Remi Mercier is also a &lt;em&gt;glass-maker&lt;/em&gt; and is &lt;a href="https://rubyweekly.com/link/186122/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;going to make a limited-edition stained glass&lt;/a&gt; to commemorate Ruby.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;DHH makes the argument that &lt;a href="https://rubyweekly.com/link/186123/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;agents 'democratize open source'&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;PostgreSQL 19, currently in beta, is getting built-in support for &lt;a href="https://rubyweekly.com/link/186124/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;graph style SQL/PGQ queries and traversal.&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;/div&gt;
  &lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;




&lt;img src="https://rubyweekly.com/open/803/rss" width="1" height="1" /&gt;</description>
      <pubDate>Thu, 4 Jun 2026 00:00:00 +0000</pubDate>
      <guid>https://rubyweekly.com/issues/803</guid>
    </item>
    <item>
      <title>A Unix shell powered by Ruby</title>
      <link>https://rubyweekly.com/issues/802</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;#​802 — May 28, 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/185823/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/185863/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/j0hi542o8d1whr2qevao.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/185863/rss" title="railsatscale.com" style=" color: #0055bb;    font-size: 1.1em; line-height: 1.4em;"&gt;A New Register Allocator For ZJIT&lt;/a&gt;&lt;/span&gt; — Deep-in-the-engine-room stuff, but the kind that makes Ruby faster for us all. Tenderlove’s walkthrough of &lt;a href="https://rubyweekly.com/link/185864/rss" style=" color: #0055bb;   "&gt;ZJIT&lt;/a&gt;’s new register allocator shows how processing an entire method at once lets the JIT keep more values in CPU registers and lays the groundwork for bigger optimizations to come, including method inlining.&lt;/p&gt;
  &lt;p&gt;Aaron Patterson &lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  &lt;a href="https://rubyweekly.com/link/185824/rss" style=" color: #0055bb;   "&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/c_limit,w_480,h_480,q_auto/copm/6a72b8c0.png" width="192" height="149" 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/185824/rss" title="posetteconf.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Hone Your Postgres Skills - Choose from 44 POSETTE 2026 Talks&lt;/a&gt;&lt;/span&gt; — Pick from talks about PostgreSQL-backed app development, Postgres performance, scaling, graph data, AI agents, Postgres 19 and more in the &lt;a href="https://rubyweekly.com/link/185825/rss" style=" color: #0055bb;   "&gt;Ultimate Guide to POSETTE: An Event for Postgres&lt;/a&gt;. This free &amp;amp; virtual developer event is happening 16-18 June.&lt;/p&gt;
  &lt;p&gt;Microsoft | AMD &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/185865/rss" title="janko.io" style=" color: #0055bb;    font-size: 1.05em;"&gt;Extending Ruby LSP with Prism&lt;/a&gt;&lt;/span&gt; — The author adds &lt;em&gt;‘Go To Definition’&lt;/em&gt;for &lt;code&gt;render&lt;/code&gt; calls in Rails templates via a Ruby LSP add-on, though it could be a useful starting point for any Ruby LSP extension.&lt;/p&gt;
  &lt;p&gt;Janko Marohnić &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;Mike Perham reports on (and fixes – in &lt;a href="https://rubyweekly.com/link/185866/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;v8.1.6&lt;/a&gt;) &lt;a href="https://rubyweekly.com/link/185867/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;a 'possible thread/memory leak' in Sidekiq&lt;/a&gt; on Ruby 4.0. The root cause is not yet known.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hitoshi Hasumi, the creator of &lt;a href="https://rubyweekly.com/link/185868/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;picoruby&lt;/a&gt;, &lt;a href="https://rubyweekly.com/link/185869/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;proposes adding bit operations (e.g. &lt;code&gt;bit_at&lt;/code&gt;) to &lt;code&gt;String&lt;/code&gt;&lt;/a&gt;. He already has &lt;a href="https://rubyweekly.com/link/185870/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;a prototype in library form.&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;The Ruby team is &lt;a href="https://rubyweekly.com/link/185871/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;planning to move RBS type definitions for core libraries&lt;/a&gt; from &lt;code&gt;ruby/rbs&lt;/code&gt; into &lt;code&gt;ruby/ruby&lt;/code&gt; itself.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/185872/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Bridgetown&lt;/a&gt;, the Ruby site generator, has introduced &lt;a href="https://rubyweekly.com/link/185873/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;a first-party theme called &lt;em&gt;Willamette&lt;/em&gt;.&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;a href="https://rubyweekly.com/link/185874/rss" title="www.youtube.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;24 Videos from Blue Ridge Ruby 2026&lt;/a&gt;&lt;/span&gt; — &lt;a href="https://rubyweekly.com/link/185875/rss" style=" color: #0055bb;   "&gt;Blue Ridge Ruby&lt;/a&gt; was a few weeks ago and the well-recorded talks are already on YouTube. Some highlights:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ifat Ribon's &lt;a href="https://rubyweekly.com/link/185876/rss" style=" color: #0055bb;   "&gt;Yes, &lt;code&gt;&amp;amp;&lt;/code&gt;…: Ruby’s Secret Talent for Improvisation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Brooke Kuhlmann's &lt;a href="https://rubyweekly.com/link/185877/rss" style=" color: #0055bb;   "&gt;Terminus: A Hanami + htmx App for E-ink Devices&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Joël Quenneville's &lt;a href="https://rubyweekly.com/link/185878/rss" style=" color: #0055bb;   "&gt;State is the First Decision You Never Made&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Kevin Murphy's &lt;a href="https://rubyweekly.com/link/185879/rss" style=" color: #0055bb;   "&gt;InstiLLMent of Successful Practices in an Agentic World&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Rachael Wright Munn's &lt;a href="https://rubyweekly.com/link/185880/rss" style=" color: #0055bb;   "&gt;Your First Open-Source Contribution&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;
  &lt;p&gt;Blue Ridge 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;💡 Kevin Murphy has &lt;a href="https://rubyweekly.com/link/185881/rss" style=" color: #0055bb; font-weight: 600;   "&gt;a trip report (including photos)&lt;/a&gt; of how Blue Ridge Ruby went, and &lt;a href="https://rubyweekly.com/link/185882/rss" style=" color: #0055bb; font-weight: 600;   "&gt;Christine Seeman describes her experience&lt;/a&gt; of speaking there too.&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/185826/rss" title="go.ombulabs.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;🧑‍💻 Ready to Turn your SDLC into an AI-DLC?&lt;/a&gt;&lt;/span&gt; — Custom, human-in-the-loop, Claude skills embedded across planning, QA &amp;amp; release, built with 60k hrs of Rails expertise.&lt;/p&gt;
  &lt;p&gt;Ombulabs.ai | Custom AI Solutions &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/185827/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Running Migrations &lt;em&gt;Once&lt;/em&gt; During a Multi-Host Kamal Deploy&lt;/a&gt; – Using a pre-deploy hook to prevent migration errors when multiple web containers boot at the same time. &lt;cite&gt;Anthony Drake&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://rubyweekly.com/link/185828/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Rails 8.1's Native Markdown Rendering Support&lt;/a&gt; – Via &lt;code&gt;format.md&lt;/code&gt; and &lt;code&gt;render markdown:&lt;/code&gt; &lt;cite&gt;Amol Joshi&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://rubyweekly.com/link/185883/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;How Rails Turns a Controller Action Into a Response&lt;/a&gt;  &lt;cite&gt;Syed Aslam&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;🤖 &lt;a href="https://rubyweekly.com/link/185830/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;My Agent Skill for Test-Driven Development&lt;/a&gt;  &lt;cite&gt;Jason Swett&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/185884/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/cldmx1beaodf8nxv3q7m.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/185884/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Rubish: A Unix Shell Written in Pure Ruby&lt;/a&gt;&lt;/span&gt; — A Unix shell that retains &lt;code&gt;bash&lt;/code&gt; compatibility but adds many Rubyisms like expressions for conditions, method chaining, iterator methods, and more. You can embed it into a Ruby program too. Along similar lines, older Ruby hands might remember Adam Wiggins’ &lt;a href="https://rubyweekly.com/link/185885/rss" style=" color: #0055bb;   "&gt;Rush&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;Akira Matsuda (amatsuda) &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/185831/rss" title="ghost.build" style=" color: #0055bb;    font-size: 1.05em;"&gt;Unlimited Postgres for Developers and Their Agents&lt;/a&gt;&lt;/span&gt; — "Databases were long-lasting infra. Now I spin one up for an afternoon and kill it when done. Feels wasteful. It's not."&lt;/p&gt;
  &lt;p&gt;Ghost &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/185848/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Rouge 5.0: The Pure-Ruby Code Highlighter&lt;/a&gt;&lt;/span&gt; — A long-standing and mature solution with support for 233 languages, plus compatibility with &lt;a href="https://rubyweekly.com/link/185849/rss" style=" color: #0055bb;   "&gt;Pygments&lt;/a&gt; styles so there are tons of themes. &lt;a href="https://rubyweekly.com/link/185850/rss" style=" color: #0055bb;   "&gt;v5.0&lt;/a&gt; drops Ruby 2.7 support, fixes bugs, and adds five new lexers for Thrift, Dylan, 6502 assembly, PDF, and Veryl.&lt;/p&gt;
  &lt;p&gt;The Rouge 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;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/185832/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Discard 2.0: Soft Deletes for ActiveRecord Done Right&lt;/a&gt;&lt;/span&gt; — A mixin to add conventions for flagging records as discarded with &lt;a href="https://rubyweekly.com/link/185833/rss" style=" color: #0055bb;   "&gt;a nice API.&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;John Hawthorn &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/185886/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Rubyzen: A Modern Architectural Linter for Ruby&lt;/a&gt;&lt;/span&gt; — Rubyzen is an ‘architectural linter’ where you can write linting rules as RSpec tests (simpler than RuboCop’s approach). The aim is to provide architectural and structural guardrails for AI developed code.&lt;/p&gt;
  &lt;p&gt;Perry Street Software &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/185836/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;zxcvbn-ruby 2.0: A Password Strength Estimator&lt;/a&gt;&lt;/span&gt; — A Ruby port of Dropbox’s &lt;a href="https://rubyweekly.com/link/185837/rss" style=" color: #0055bb;   "&gt;zxcvbn&lt;/a&gt; JavaScript library to show users how secure their passwords are or to enforce password strength. &lt;a href="https://rubyweekly.com/link/185838/rss" style=" color: #0055bb;   "&gt;v2.0 changelog.&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;Envato &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/185839/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Retriable 4.0&lt;/a&gt; – A DSL for retrying failed code blocks with randomized exponential backoff.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/185840/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;wasmtime-rb 45.0&lt;/a&gt; – Ruby embedding of the &lt;a href="https://rubyweekly.com/link/185841/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Wasmtime&lt;/a&gt; WebAssembly runtime.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;⏱️ &lt;a href="https://rubyweekly.com/link/185842/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Hitimes 3.2&lt;/a&gt; – Fast, high-resolution timer library for recording perf metrics.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/185843/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Petite Vite Rails&lt;/a&gt; – Rails plugin that wires a Vite frontend into a Rails app.&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/185844/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Elasticsearch-quality Full-Text Search for Postgres&lt;/a&gt;, now with native ActiveRecord support.&lt;/p&gt;
 
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/185845/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;RailsPilot&lt;/a&gt; — Can't work through your backlog? Staff engineers with AI-augmented workflows deliver 12 production-ready features/month for $4K. First PR in 24 hours.&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/185847/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/gwlyticmd3ihosgolokk.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;📱 Joe Masilotti, the creator of &lt;a href="https://rubyweekly.com/link/185846/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Ruby Native&lt;/a&gt; — a way to build native mobile apps with Rails — shares &lt;a href="https://rubyweekly.com/link/185847/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;an update on a paid app he built with it&lt;/a&gt; that's now on both the App Store and Google Play Store.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🏆 &lt;a href="https://rubyweekly.com/link/185854/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;KaiCode&lt;/a&gt; is an annual open source 'festival' where you submit an open source project you've built (of between 1-5 years in age), all the projects get reviewed, and you could win a prize. Submissions close on June 1st.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🎉 Congratulations to &lt;a href="https://rubyweekly.com/link/185851/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;&lt;em&gt;The Bike Shed&lt;/em&gt; podcast&lt;/a&gt; (a Ruby-leaning general dev discussion podcast from &lt;a href="https://rubyweekly.com/link/185852/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;thoughtbot&lt;/a&gt;) upon &lt;a href="https://rubyweekly.com/link/185853/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;celebrating its 500th episode.&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;It's a JavaScript thing, but I really enjoyed &lt;a href="https://rubyweekly.com/link/185855/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;this JavaScript crossword&lt;/a&gt; this week. Can someone make a Ruby one? If not, I might have to!&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;💰 Curious about the cost of running a mid-size Ruby event? &lt;a href="https://rubyweekly.com/link/185887/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;RubyConf Austria has shared their numbers.&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🕒 If you're a Postgres user, did you realize that &lt;a href="https://rubyweekly.com/link/185856/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;&lt;code&gt;now()&lt;/code&gt; doesn't necessarily return the current time&lt;/a&gt;? Somehow I didn't.&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/802/rss" width="1" height="1" /&gt;</description>
      <pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate>
      <guid>https://rubyweekly.com/issues/802</guid>
    </item>
    <item>
      <title>Why Ruby still feels like home</title>
      <link>https://rubyweekly.com/issues/801</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;#​801 — May 21, 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/185488/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/185544/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/kffit301ol89cjdtov9l.jpg" width="640" style="    line-height: 100%;    "&gt;&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;span&gt;🛠️&lt;/span&gt; &lt;a href="https://rubyweekly.com/link/185544/rss" title="island94.org" style=" color: #0055bb;    font-size: 1.1em; line-height: 1.4em;"&gt;One Year of Ruby on Rails Configuration&lt;/a&gt;&lt;/span&gt; — The creator of &lt;a href="https://rubyweekly.com/link/185545/rss" style=" color: #0055bb;   "&gt;GoodJob&lt;/a&gt; shares a tour of the monkey patches, extensions, and appwide behaviors that have accumulated in his Rails app’s &lt;code&gt;/config&lt;/code&gt; directory. It’s &lt;em&gt;heavy&lt;/em&gt; on examples and things you might want to &lt;s&gt;steal&lt;/s&gt; be inspired by.&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/185492/rss" title="www.ruby-lang.org" style=" color: #0055bb;    font-size: 1.05em;"&gt;Ruby 4.0.5 Released&lt;/a&gt;&lt;/span&gt; — An off-schedule release to address a critical use-after-free &lt;a href="https://rubyweekly.com/link/185538/rss" style=" color: #0055bb;   "&gt;race condition in the &lt;code&gt;getaddrinfo&lt;/code&gt; timeout handler&lt;/a&gt;. It also resolves a build system regression under the C locale introduced in 4.0.4.&lt;/p&gt;
  &lt;p&gt;Takashi Kokubun &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/185489/rss" style=" color: #0055bb;   "&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/c_limit,w_480,h_480,q_auto/copm/25b971ee.png" width="150" height="150" 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/185489/rss" title="go.ombulabs.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;🤖 Claude Skills Built Around Your Engineering Process&lt;/a&gt;&lt;/span&gt; — We created an &lt;a href="https://rubyweekly.com/link/185491/rss" style=" color: #0055bb;   "&gt;open-source Claude Code skill for Rails upgrades&lt;/a&gt;, leveraging 60,000+ hours of experience. Individual, general skills can only go so far; we build skills that understand your process. Take the next step into AI-assisted development.&lt;/p&gt;
  &lt;p&gt;Custom Solutions | Ombulabs.ai &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;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/185493/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;thoughtbot has joined the Ruby Alliance&lt;/a&gt; – nothing to do with &lt;em&gt;Star Wars&lt;/em&gt; but a program announced in &lt;em&gt;Ruby Central&lt;/em&gt;'s &lt;a href="https://rubyweekly.com/link/185494/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;recent reboot&lt;/a&gt; to allow companies to support RubyGems and the broader ecosystem.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🕹️ The &lt;a href="https://rubyweekly.com/link/185495/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;DragonRuby Game Toolkit&lt;/a&gt; (a Ruby implementation targeted at game development) is &lt;a href="https://rubyweekly.com/link/185496/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;free for the next 24 hours&lt;/a&gt; to celebrate the start of the &lt;a href="https://rubyweekly.com/link/185497/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Ancient &amp;amp; Nameless &amp;amp; Fun &amp;amp; Stupid GameJam&lt;/a&gt; which runs till June 15.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🇪🇺 &lt;a href="https://rubyweekly.com/link/185498/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Euruko 2026&lt;/a&gt; takes place this September 17-18 in Brno, Czechia and &lt;a href="https://rubyweekly.com/link/185499/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;its CFP is open&lt;/a&gt; till June 16 if you'd like to speak.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Jerome Paul noticed &lt;a href="https://rubyweekly.com/link/185500/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;&lt;code&gt;end&lt;/code&gt;-less methods can lead to endless &lt;code&gt;rescue&lt;/code&gt;s&lt;/a&gt;, too…&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/185501/rss" title="aesthetikx.info" style=" color: #0055bb;    font-size: 1.05em;"&gt;What is &lt;code&gt;Date::ITALY&lt;/code&gt;?&lt;/a&gt;&lt;/span&gt; — If you guessed that it has something to do with Julian and Gregorian calendars, you’re right, but that’s just the start of it. A fun journey through some date/time esoterica.&lt;/p&gt;
  &lt;p&gt;John DeSilva &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/185490/rss" title="caio.ca" style=" color: #0055bb;    font-size: 1.05em;"&gt;Why Ruby Still Feels Like Home After All These Years&lt;/a&gt;&lt;/span&gt; — A warm retrospective on why Ruby, fifteen years and several language affairs later, remains satisfying to use. Caio highlights language features like refinements, &lt;code&gt;Forwardable&lt;/code&gt;, and numbered params, alongside modern tooling like Ruby LSP and Steep, and the performance ceiling YJIT raised.&lt;/p&gt;
  &lt;p&gt;Caio Bianchi &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/185502/rss" title="developer.vonage.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Build a Fantasy Adventure Game With Rails and RCS&lt;/a&gt;&lt;/span&gt; — Step into Eldrathia! Build a branching fantasy RPG using Rails and RCS, complete with monsters, magic, and rich cards.&lt;/p&gt;
  &lt;p&gt;Vonage &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/185503/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Inbound Email in Rails Apps with Fuik&lt;/a&gt; – How to use the &lt;a href="https://rubyweekly.com/link/185504/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Fuik&lt;/a&gt; webhook engine to accept email webhooks from common providers. &lt;cite&gt;Rails Designer&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://rubyweekly.com/link/185505/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Ruby vs. Java vs. TypeScript for Building a Claude Cowork Plugin&lt;/a&gt; – Not a positive outcome for Ruby here (Tanin likes types!) but some interesting perspectives. &lt;cite&gt;Tanin Nanakorn&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://rubyweekly.com/link/185506/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Safely Dropping Columns in Rails&lt;/a&gt;  &lt;cite&gt;Akshay Khot&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/185508/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/aomcfxm6awkjitkmadti.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/185508/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;SmarterCSV: The Fastest End-to-End CSV Library for Ruby&lt;/a&gt;&lt;/span&gt; — A CSV parsing and generation library that leans upon C for performance, can handle CSV parsing failures that Ruby's usual CSV library can’t, and with a nicer API too (though &lt;a href="https://rubyweekly.com/link/185509/rss" style=" color: #0055bb;   "&gt;migrating to SmarterCSV&lt;/a&gt; is a one-line change). The &lt;a href="https://rubyweekly.com/link/185510/rss" style=" color: #0055bb;   "&gt;latest release&lt;/a&gt; adds support for non-seekable/streaming IO sources.&lt;/p&gt;
  &lt;p&gt;Tilo Sloboda &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/185507/rss" title="www.tigerdata.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Your Gemfile Doesn't Need an Analytics Database&lt;/a&gt;&lt;/span&gt; — TimescaleDB extends the Postgres your Rails app already uses. Analytics at scale, no new stack. &lt;a href="https://rubyweekly.com/link/185507/rss" style=" color: #0055bb;   "&gt;$1000 credit to start&lt;/a&gt;.&lt;/p&gt;
  &lt;p&gt;Tiger Data (creators of TimescaleDB) &lt;span style="text-transform: uppercase; margin-left: 4px; font-size: 0.9em;   color: #997 !important; padding: 1px 4px; "&gt;sponsor&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;table border=0 cellpadding=0 cellspacing=0 border=0 cellpadding=0 cellspacing=0&gt;&lt;tr&gt;&lt;td style="font-size: 15px; line-height: 1.48em; padding: 0px 15px;"&gt;
  
  &lt;p&gt;&lt;span style="font-weight: 600; font-size: 1.1em; color: #000;"&gt;&lt;a href="https://rubyweekly.com/link/185539/rss" title="yaroslav.io" style=" color: #0055bb;    font-size: 1.05em;"&gt;Bundlebun: Pack Bun into Your Ruby App with No External Setup&lt;/a&gt;&lt;/span&gt; — An approach to packaging the &lt;a href="https://rubyweekly.com/link/185540/rss" style=" color: #0055bb;   "&gt;Bun&lt;/a&gt; JS runtime in a Ruby gem. Yaroslav explains the gem’s architecture and its integrations with Vite and ExecJS.&lt;/p&gt;
  &lt;p&gt;Yaroslav Markin &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/185511/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;LLM Cost Tracker: Self-Hosted LLM Cost Management for Rails&lt;/a&gt;&lt;/span&gt; — A self-hosted LLM cost-tracking engine for Rails monoliths that captures token usage, latency, and costs directly from SDKs and Faraday middleware (no proxies required).&lt;/p&gt;
  &lt;p&gt;Sergii Khomenko &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/185541/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Bridgetown 2.2&lt;/a&gt; – The powerful Ruby site generator has added support for &lt;em&gt;wikilinks&lt;/em&gt; and uses the &lt;a href="https://rubyweekly.com/link/185542/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Falcon&lt;/a&gt; web server by default.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/185512/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Passenger 6.1.3&lt;/a&gt; – The app server adds support for Rack 3's &lt;code&gt;response_finished&lt;/code&gt; post-response hooks.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/185513/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;rubyfmt 0.14&lt;/a&gt; – The Ruby code autoformatter that Stripe recently used &lt;a href="https://rubyweekly.com/link/185514/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;to format 25 million lines of code&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/185515/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Peddler 5.4&lt;/a&gt; – Ruby interface to the Amazon Selling Partner API (SP-API).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🔎 &lt;a href="https://rubyweekly.com/link/185516/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Marcel 1.2&lt;/a&gt; – Identify the MIME type of files from data and extensions.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;📄 &lt;a href="https://rubyweekly.com/link/185517/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;HexaPDF 1.8&lt;/a&gt; – AGPL-licensed PDF creation and manipulation library.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/185518/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;OmniAuth LDAP 3.0&lt;/a&gt; – LDAP authentication strategy for OmniAuth.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/185519/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Comma 4.9&lt;/a&gt; – DSL-based CSV generator for diverse Ruby objects.&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/185520/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Stop wasting time on slow Docker builds&lt;/a&gt;. How to correctly structure caching for your Gemfile, multi-stage builds, and more.&lt;/p&gt;
 
&lt;p&gt;Autoscaling that doesn’t suck. &lt;a href="https://rubyweekly.com/link/185521/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Try Judoscale&lt;/a&gt; and see what all the fuss is about.&lt;/p&gt;
 
&lt;p&gt;🔬 Shipping AI code? &lt;a href="https://rubyweekly.com/link/185522/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. Free for open source.&lt;/p&gt;
 
&lt;p&gt;💎 &lt;a href="https://rubyweekly.com/link/185523/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Elasticsearch-quality Full-Text Search for Postgres&lt;/a&gt;, now with native ActiveRecord support.&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/185524/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/riusmckqkvidthnuvau4.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/185524/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Blastoff Rails&lt;/a&gt; is a Rails conference taking place this June 11-12 in Albuquerque, New Mexico. There's also &lt;a href="https://rubyweekly.com/link/185525/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;a game&lt;/a&gt; to help promote the event featuring a 'Professor Matz' &lt;em&gt;(above)&lt;/em&gt;!&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A brief reminder to &lt;a href="https://rubyweekly.com/link/185526/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;take the 2026 Ruby on Rails Community Survey&lt;/a&gt; from Planet Argon, if you haven't yet. It only takes place every two years – here are &lt;a href="https://rubyweekly.com/link/185527/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;the results from 2024.&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🤖 At Google I/O this week, Google unveiled &lt;a href="https://rubyweekly.com/link/185528/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Modern Web Guidance&lt;/a&gt;, a set of expert-vetted skills to guide your coding agents to build accessible, performant, and secure web experiences, e.g. &lt;code&gt;"Set up my app to begin preloading pages when users hover over important links."&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🤖 &lt;em&gt;Evil Martians'&lt;/em&gt; Ivan Chepurin says &lt;a href="https://rubyweekly.com/link/185530/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;AI-assisted engineers are burning out&lt;/a&gt;, looks at the problems involved, and suggests how to avoid such burnout.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If you've got time, you can &lt;a href="https://rubyweekly.com/link/185543/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;help TruffleRuby complete its Ruby 4.0 support.&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;/div&gt;
  &lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;




&lt;img src="https://rubyweekly.com/open/801/rss" width="1" height="1" /&gt;</description>
      <pubDate>Thu, 21 May 2026 00:00:00 +0000</pubDate>
      <guid>https://rubyweekly.com/issues/801</guid>
    </item>
    <item>
      <title>Why regexes starting with 'k' or 's' got slower in Ruby 4.0</title>
      <link>https://rubyweekly.com/issues/800</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;#​800 — May 14, 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/185173/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/185175/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/phrekbqlyf70fmnussua.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/185175/rss" title="railsatscale.com" style=" color: #0055bb;    font-size: 1.1em; line-height: 1.4em;"&gt;One Engine, Many Tools: Introducing Rubydex&lt;/a&gt;&lt;/span&gt; — Prism unified Ruby’s parsing layer, and now Vinicius Stock (creator of &lt;a href="https://rubyweekly.com/link/185176/rss" style=" color: #0055bb;   "&gt;Ruby LSP&lt;/a&gt;) is betting the &lt;a href="https://rubyweekly.com/link/185177/rss" style=" color: #0055bb;   "&gt;Rubydex&lt;/a&gt; static analysis toolkit can do the same one-level-up for code &lt;em&gt;indexing&lt;/em&gt;, with Ruby LSP, Tapioca, and Packwerk already migrating.&lt;/p&gt;
  &lt;p&gt;Vinicius Stock &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/185178/rss" title="hawksley.org" style=" color: #0055bb;    font-size: 1.05em;"&gt;Adopting Herb at GitHub&lt;/a&gt;&lt;/span&gt; — GitHub spent the past few months integrating the &lt;a href="https://rubyweekly.com/link/185179/rss" style=" color: #0055bb;   "&gt;Herb&lt;/a&gt; ERB toolchain into its Rails monolith. Joel tells the tale, including what Herb caught that &lt;code&gt;erb_lint&lt;/code&gt; missed in GitHub’s ~500,000 lines of ERB.&lt;/p&gt;
  &lt;p&gt;Joel Hawksley (GitHub) &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/185174/rss" style=" color: #0055bb;   "&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/c_limit,w_480,h_480,q_auto/copm/974b76d3.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/185174/rss" title="sinaptia.dev" style=" color: #0055bb;    font-size: 1.05em;"&gt;Jidoka: Automation with a Human Touch&lt;/a&gt;&lt;/span&gt; — Turn your roadmap into a supervised software delivery line. Jidoka pairs coding agents with senior engineers, so teams can modernize legacy code, ship faster, with quality built-in.&lt;/p&gt;
  &lt;p&gt;JIDOKA by 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;strong&gt;⚡️ IN BRIEF:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;🔒 Jun Aruga &lt;a href="https://rubyweekly.com/link/185180/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;proposes adding post-quantum cryptography support&lt;/a&gt; to Ruby's standard libraries, something &lt;a href="https://rubyweekly.com/link/185181/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;he's already worked on&lt;/a&gt; in Ruby's &lt;a href="https://rubyweekly.com/link/185182/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;openssl&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🤗 Richard Schneeman &lt;a href="https://rubyweekly.com/link/185183/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;suggests RubyGems.org should have a concept of 'alumni'&lt;/a&gt; to remember/recognize former maintainers of gems.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🇯🇵 &lt;a href="https://rubyweekly.com/link/185184/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Kaigi on Rails 2026&lt;/a&gt; is a Japanese Rails conference taking place this October 16-17 in Tokyo. Dave Thomas and DHH are booked to keynote.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;🇺🇸 &lt;a href="https://rubyweekly.com/link/185185/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;The CFP for &lt;em&gt;Rails World&lt;/em&gt;&lt;/a&gt; (September 23-24) closes in two days.&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/185186/rss" title="www.ruby-lang.org" style=" color: #0055bb;    font-size: 1.05em;"&gt;Ruby 4.0.4 Released&lt;/a&gt;&lt;/span&gt; — The latest CRuby is here. It’s a scheduled, routine update (which the latest stable release gets every two months) so there are no new features, but &lt;a href="https://rubyweekly.com/link/185187/rss" style=" color: #0055bb;   "&gt;a lot of bugfixes&lt;/a&gt;, so it’s worth the upgrade.&lt;/p&gt;
  &lt;p&gt;Takashi Kokubun &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;🤓 My favorite fix is for a regression in 4.0 where &lt;a href="https://rubyweekly.com/link/185188/rss" style=" color: #0055bb; font-weight: 600;   "&gt;regexes starting with 'k' or 's' became slower&lt;/a&gt;. Why? &lt;code&gt;s&lt;/code&gt; and &lt;code&gt;k&lt;/code&gt; are the only two ASCII letters with &lt;em&gt;two&lt;/em&gt; other characters that become case-equivalent with them (namely, S/ſ - long S, and K/K - the Kelvin sign) causing Onigmo to de-optimize such regexes.&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/185190/rss" title="socket.dev" style=" color: #0055bb;    font-size: 1.05em;"&gt;RubyGems Signups Down as Spammers Target London Councils&lt;/a&gt;&lt;/span&gt; — &lt;a href="https://rubyweekly.com/link/185191/rss" style=" color: #0055bb;   "&gt;RubyGems.org&lt;/a&gt; has &lt;a href="https://rubyweekly.com/link/185192/rss" style=" color: #0055bb;   "&gt;temporarily disabled user signups&lt;/a&gt; (installs and pushes remain live) due to a ‘GemStuffer’ campaign where, oddly, public data shared by local councils in the UK is being turned into junk gems &lt;em&gt;en masse&lt;/em&gt;.&lt;/p&gt;
  &lt;p&gt;Joseph Edwards (Socket) &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/185193/rss" title="beautifulruby.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;A Ruby Timeout That Works (on Linux)&lt;/a&gt;&lt;/span&gt; — In 2015, Mike Perham called &lt;code&gt;Timeout&lt;/code&gt; &lt;a href="https://rubyweekly.com/link/185194/rss" style=" color: #0055bb;   "&gt;Ruby’s most dangerous API&lt;/a&gt; and its problems remain (namely that it won’t interrupt a blocking syscall). Brad is now working on &lt;a href="https://rubyweekly.com/link/185195/rss" style=" color: #0055bb;   "&gt;an alternative approach&lt;/a&gt;, leaning on Linux’s &lt;code&gt;TCP_USER_TIMEOUT&lt;/code&gt;.&lt;/p&gt;
  &lt;p&gt;Brad Gessler &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/185196/rss" title="fandf.co" style=" color: #0055bb;    font-size: 1.05em;"&gt;How Depot Got CI MicroVMs Booting in Under a Second&lt;/a&gt;&lt;/span&gt; — Stop waiting for CI warm pools. Depot CI uses just-in-time microVMs that cold boot in under a second for faster builds.&lt;/p&gt;
  &lt;p&gt;Depot &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/185197/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Solidus vs. Spree&lt;/a&gt; – &lt;a href="https://rubyweekly.com/link/185198/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Solidus&lt;/a&gt; and &lt;a href="https://rubyweekly.com/link/185199/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Spree&lt;/a&gt; are Rails-based e-commerce platforms that share a common ancestry. &lt;em&gt;(Note: This telling of the story is from the Solidus POV.)&lt;/em&gt; &lt;cite&gt;Jared Norman (SuperGood)&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://rubyweekly.com/link/185200/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Use &lt;code&gt;class_names&lt;/code&gt; to Conditionally Apply CSS Classes in Rails&lt;/a&gt; – If you’re interpolating strings into &lt;code&gt;class&lt;/code&gt; attributes, do this instead. &lt;cite&gt;Andy Croll&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;📄 &lt;a href="https://rubyweekly.com/link/185201/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;A Reusable Drag-and-Drop Image Preview in Rails&lt;/a&gt; – How to build a drag-and-drop image upload custom element that works in Rails forms. &lt;cite&gt;Rails Designer&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/185202/rss" style=" color: #0055bb;"&gt;&lt;img src="https://res.cloudinary.com/cpress/image/upload/w_1280,e_sharpen:60,q_auto/u8a2pcnzgzxd7p5rfpuk.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/185202/rss" title="www.youtube.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;Rails Just Made Your Database Agent-Ready&lt;/a&gt;&lt;/span&gt; — A &lt;a href="https://rubyweekly.com/link/185203/rss" style=" color: #0055bb;   "&gt;recent PR to Rails core adds &lt;code&gt;rails query&lt;/code&gt;&lt;/a&gt; to allow read-only queries from the command line. The video covers the essentials with numerous examples. Of course, there’s &lt;a href="https://rubyweekly.com/link/185204/rss" style=" color: #0055bb;   "&gt;an agent skill&lt;/a&gt; that lets agents use it well to answer queries too.&lt;/p&gt;
  &lt;p&gt;Emmanuel Hayford &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/185205/rss" title="go.ombulabs.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;🤖 Need Claude Skills Tailored to Your Engineering Org? Let’s Talk!&lt;/a&gt;&lt;/span&gt; — We &lt;a href="https://rubyweekly.com/link/185206/rss" style=" color: #0055bb;   "&gt;open-sourced our Rails upgrade skills&lt;/a&gt; based on 60,000 hours of experience. Let’s build yours for a11y, dead code, or QA.&lt;/p&gt;
  &lt;p&gt;Ombulabs.ai | Custom AI Solutions &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/185207/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;ASTro: AST-Based Reusable Optimization Framework&lt;/a&gt;&lt;/span&gt; — Ruby core’s &lt;em&gt;ko1&lt;/em&gt; is working on an experimental optimization framework that generates specialized C code from AST interpreters. &lt;a href="https://rubyweekly.com/link/185208/rss" style=" color: #0055bb;   "&gt;Numerous sample implementations&lt;/a&gt; span various subsets of Ruby, Lua, Pascal, and others.&lt;/p&gt;
  &lt;p&gt;Koichi Sasada &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;💡 Two of Koichi's ASTro-based Ruby implementations (&lt;a href="https://rubyweekly.com/link/185209/rss" style=" color: #0055bb; font-weight: 600;   "&gt;abruby&lt;/a&gt; and &lt;a href="https://rubyweekly.com/link/185210/rss" style=" color: #0055bb; font-weight: 600;   "&gt;koruby&lt;/a&gt;) can run the &lt;a href="https://rubyweekly.com/link/185211/rss" style=" color: #0055bb; font-weight: 600;   "&gt;optcarrot&lt;/a&gt; benchmark, and faster than CRuby (without YJIT) too.&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/185212/rss" title="github.com" style=" color: #0055bb;    font-size: 1.05em;"&gt;ruby-warning 1.6: Custom Processing for Warnings&lt;/a&gt;&lt;/span&gt; — A tidy way to customize Ruby warnings. For example: &lt;code&gt;Warning.dedup&lt;/code&gt; to deduplicate them, &lt;code&gt;Warning.ignore(:missing_ivar, __FILE__)&lt;/code&gt; to ignore a specific warning in the current file, or you can even hide all warnings from gem dependencies.&lt;/p&gt;
  &lt;p&gt;Jeremy Evans &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/185213/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;rbspy 0.47&lt;/a&gt; – The live sampling profiler has added Ruby 4.0.4 support.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/185214/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Rack::JsonSchema 1.6&lt;/a&gt; – JSON Schema-based Rack middleware offering request/response validation, mocking, and API documentation.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/185215/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;FriendlyId 5.7&lt;/a&gt; – The &lt;em&gt;"Swiss Army bulldozer"&lt;/em&gt; of slugging and permalink plugins for Active Record.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/185216/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Cutoff 1.1&lt;/a&gt; – Enforcing total execution-time 'deadlines' with checkpoints.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;☎︎ &lt;a href="https://rubyweekly.com/link/185217/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Phonelib 0.10.20&lt;/a&gt; – Phone number validation and formatting library.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/185218/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;MiniScheduler 0.20&lt;/a&gt; – Adds recurring job scheduling to Sidekiq.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://rubyweekly.com/link/185219/rss" style=" color: #0055bb; font-weight: 500 !important;   "&gt;Chusaku 1.5&lt;/a&gt; – Annotate your Rails controllers with route info.&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/800/rss" width="1" height="1" /&gt;</description>
      <pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate>
      <guid>https://rubyweekly.com/issues/800</guid>
    </item>
  </channel>
</rss>
