But let’s be honest, sometimes you just want a framework that’s reliable, efficient, and doesn’t leave you wrestling with configuration files until 3 AM
Source: https://x.com/AmandaBPerino/status/1916800541746749817 or https://threadreaderapp.com/thread/1916800541746749817.html
That’s why I almost always comment on Hacker News or any forum
where I see people still spreading old narratives about Ruby and Rails.
I think we should not just accept them and move on but reply to them and
show why the narrative is wrong. Maybe not with the purpose of
convincing the author who is spreading that narrative but for other
people who might read that without knowing Ruby and Rails. If no one
refutes these statements, people from outside our community could take
them as truth.
I believe it’s important to engage with empathy and try to have a
dialogue with those spreading this myth. We should try to understand
where they heard about it, when they last checked the status of Ruby on
Rails, and how much they know about our ecosystem.
The one with several Ruby releases: 3.4.3, 3.5.0-preview1, and JRuby 10,
where Marco Roth announces herb tools and Matz suggests that Ruby 4.0
may be released this Christmas.
🚀 Launches
Rails Designer launched a new book about JavaScript for Rails Developers is out now. Inside the newsletter, you can find a discount code for 10%
Matt Solt announced the launch of a new AI newsletter - RoboRuby - Ruby AI News
Marco Roth launched a new project → herb - “Powerful and seamless HTML-aware ERB parsing and tooling“
📅 Events:
Friendly.rb announced that their CFP is open until July 1st
Irina Nazarova invited Ruby developers to join the SF Ruby meetup on Wednesday, April 23, at Sentry HQ
Javi Ramirez announced he's organizing a Ruby on Rails meetup near the beach in Lisbon in two weeks
Vienna.Rb announced their upcoming meetup on June 5th, promising an exciting event with great speakers and a mysterious surprise, with more details to be revealed soon
👉 All about Code and Ruby
There are a lot of great news this week:
Takashi Kokubun announced the release of Ruby 3.4.3
Yui Naruse announced a new release of Ruby 3.5.0 preview1
J Ruby Dev Team announced the release of a JRuby 10.0.0.0
Nate Berkopec shared exciting news from RubyKaigi: Matz confirmed that Ruby 4.0 is likely coming this Christmas
Here are some highlights from Code Samples:
Hans Schnedlitz shared a tip about using HTTParty to create custom HTTP clients
Jamie Schembri shared a quick Ruby trick to serve files using just one line of code: ruby -run -e httpd
Brad Gessler proposed a more intuitive Email API for Rails, showcasing a simplified approach to email composition
Gregory Brown shared Conway's Game of Life code with a bug, asking readers to spot what would go wrong
Ruby Cademy revealed a neat ActiveRecord trick: when a RecordInvalid exception is raised, you can access the invalid record using exception.record
Igor Alexandrov shared his Kamal commands cheat sheet, covering essential deployment tasks for Ruby apps
Bhumi shared a handy Rails CLI tip: Running “bin/rails" shows available commands and aliases.
Nidhi Sarvaiya explored the new params.expect feature in Rails 8, finding it offers more robust error handling These were only some of the code samples you can discover inside the newsletter and get inspiration for your daily work.
Inside 📐 Thinking about Code Design you will find:
Nate Berkopec highlights a common Cumulative Layout Shift (CLS) problem in Rails apps: missing image dimensions
Jose Farias shared a Ruby coding style tip: indenting private methods makes it easy to quickly see access restrictions when reviewing code, especially in diffs with limited context
Adam McCrea explained how job queues with different Service Level Objectives (SLOs) can dynamically scale worker processes.
Nate Berkopec shared his take on web application performance
Steven R. Baker suggested cleaning up old Rails migrations after they've been applied in production
JP Camara highlighted a performance improvement in Ruby's Ractor JSON parsing: frozen interned strings are now stored in a lock-free hash
Read the replies around these themes to get more context and maybe get
inspiration about how to approach new solutions.
Inside ❤️ Why Choose Ruby and Rails read Irina Nazarova thread that
starts with powerful quote highlighting Rails as a secret superpower,
revealing how successful companies have been consistently building their
products with Ruby on Rails
🇯🇵 RubyKaigi 2025
In this edition, we added a section dedicated to RubyKaigi 2025. There
were a lot of things shared online and until the videos will be
available here is what you can find out:
Stephen Margheim highlighted Matz's RubyKaigi 2025 closing keynote, emphasizing Ruby's strong potential as a central language in the emerging AI era
Maciej Mensfeld shared exciting news from RubyKaigi: He developed a Ractor-based deserialization engine for Karafka, achieving a 30% performance boost
Mish shared a beautiful illustration with explanations about “How Do Computers Understand Ruby?” during RubyKaigi 2025 and also shared some beautiful notes from the Ruby Commiters and The World.
Yusuke Endoh announced the publication of the winning entries for TRICK 2025, expressing gratitude to all participants, viewers, and judges.
Vladimir Dementyev shared a game → RubyKaigi Warrior 2025 - “Game written in Ruby for learning Ruby”.
Sunao Hogelog Komuro posted an IRB Treasure Hunt game
Marco Roth created a new gem → herb - “Powerful and seamless HTML-aware ERB parsing and tooling“.
Stephen Margheim created a new gem → plume - “Ruby library for working with SQLite elegantly“
Takashi Kokubun announced that upstreamed ZJIT to CRuby. And we tried to include all the slides that the speakers published in a special section called RubyKaigi Slides
🧰 Gems, Libraries, Tools and Updates
Socket announced that Rubygems ecosystem support via Github action is now generally available
Stephen shared a new gem of Takumi Shotoku→ rbs-trace - “RBS::Trace automatically collects argument and return types and saves RBS type declarations as RBS files or comments.“
Cédric Delalande created a new gem → zed-test-toggle - “A small gem to toggle between source and test in the Zed editor“
OpenAI released a new gem → openai-ruby - “OpenAI’s official Ruby SDK“
Nagendra Dhanakeerthi released a new gem → mcp_on_ruby - “A Ruby implementation of the Model Context Protocol“
Burhan Gardezi published a new repository rails_interview_questions - A collection of Rails interview questions categorized by topics
As always, we have more links to newsletters, videos, podcasts, and
articles.
An example of an 1B$ exterior renovation business using #Ruby and Ruby on #Rails sharing why they think
Ruby is a good choice for a business.
> “We strongly believe no other language can keep the same quick pace
that Ruby can when it comes to delivering business value" Source:
RubyCentral
article
African Ruby Community shared that Ruby Conf Africa opened its Call for Papers for this year event which will took place on 18-19th July.
Euruko announced their 2025 Call for Papers is open, seeking talks on Ruby 3.x evolution, the Ruby ecosystem, and Ruby in production for their "The Heart of Code" themed conference
Ruby Conf Taiwan announced the date August 9-10 for this year event and more information that will coming soon
👉 All about Code and Ruby
Hiroshi Shibata announced the release of Ruby 3.1.7 (the final version of the 3.1 series) and 3.2.8 (starting the security maintenance phase). He also recommended updating your Ruby to 3.3 or 3.4
Igor Kasyanchuk published a cheatsheet about Hotwire cheatsheet
Oskars Ezerins published LLMs benchmarks - Popular LLM benchmarks for ruby code generation
Russ Olsen shared that he and Brandon Weaver are working on a second edition of Eloquent Ruby, maintaining the original structure while updating it for modern Ruby
Joe Masilotti announced a new library bridge-components that provides ready-to-use UI components for Hotwire Native applications You can find a lot of code samples like Kasper Hansen sharing how to use Module.new to create new namespaces, Hans Schnedlitz sharing you can use emoji routes in Rails while Josh Branchaud noted that \#️⃣ is a valid comment syntax in Ruby, Igor Alexandrov shared a code sample using ActionMailer\#email_address_with_name, Andy Croll shared a beautiful one liners in Ruby used to generate the code used for a T-Shirt and much more Ruby and Rails examples that you can get inspiration from.
Remember to read ️ 📐Thinking about Code where Carmine Paolino shared
that by making the transition from Puma, SolidQueue, SolidCable to
another stack like Falcon, AsyncCable, AsyncJobAdapter dramatically
improved LLM response speeds, Gavin Morrice shared insights on
encapsulation, arguing attr_accessor exposes internals and suggests
custom methods that validate input, protect state, and separate
interface from implementation and much more interesting
discussions.
Inside 💡Around code section read about Ruby Central announcing that the
RubyGems team is strengthening the platform's foundations with new
safety, reliability, and governance policies and Robby Russell
asked his community about the wildest use cases of Ruby on Rails
they've encountered over the years and got some very interesting
and inspiring responses. You should check them out!
🧰 Gems, Libraries, Tools and Updates
Alessandro Rodi released Letter Thief, a gem for logging emails in Rails apps that stores them in your database and can open them in development, similar to letter_opener
Abdelkader Boudih launched a new gem → mcp_rails_template - A minimal Rails API template for creating MCP servers with robust tool execution capabilities and examples
Yorick Jacquin published a new gem fast-mcp → a Ruby Implementation of the Model Context Protocol
Julik Tarkhanov created a new gem serve_byte_range -> Utility module for serving HTTP Range responses without buffering
HCB announced their open source Rails app hackclub/hcb -> The neobank built for nonprofits
Sahil Lavingia announced that flexible is now open source - Payroll & equity for everyone. Look inside app/rails for the Rails app part of flexible
Davide Santangelo published a new gem hyll - Hyll provides a robust implementation of the HyperLogLog algorithm, enabling highly accurate cardinality estimation (counting unique items) with minimal memory footprint
You will also find updates on their projects or libraries like Rubocop,
solargraph and httparty.
As always, we have more links to newsletters, videos, podcasts, and
articles.
I used Claude Code to refactor a series of tests from Minitest::Mock to
the Mocha library this
early morning.
The main reason is that I had certain parts of the tests using Mocha and
others utilizing Minitest::Mock. Since other projects I work on use
RSpec, I find Mocha to be closer toons in RSpec, which minimizes the
context change for me overall.
I started with a simple example and provided this prompt:
Go in the test/services/bluesky/save_thread_test.rb and redo the test 'empty result when client returns empty array' to use mocha instead of simple Minitest mock
Here is what Claude Code proposed as a change. It added the line with
instance_variable_set (it is not marked here as a diff because I chose
'No' when it asked me to apply, and I'm not sure why it isn't marked).
What is true is that the SaveThread object is not handling dependency
injection properly: it instantiates a Bluesky::Client, but it does not
accept it during initialization.
Claude Code proposing to use instance_variable_set
So I followed up with:
Instead of doing instance_variable_set wouldnt it be better to do depedency injection in the SaveThread object?
And I got the following answer:
Claude Code proposing to use class_eval to update the initializer
It’s an interesting solution, but I don't like it for obvious reasons:
the object I want to test is also the object that is altered by the test
(which goes against the fundamental principles of testing).
Thus, I asked:
I prefer to change the SaveThread object itself
Notice that it included the client in the initializer, added an
attr_reader for it, and also kept the previous memoized method.
Claude Code changes keeping the memoized method and the attr_reader
In my opinion, this type of behavior reinforces the notion that you need
to know how you want your code to be structured (which I refer to as
code design).
It also seems more important than ever to be able to read a diff and
understand the proposed changes. LLMs may improve over time, but at
least for now, it appears to me that to ensure good code quality, one
must first have enough experience to recognize what good quality is and
be able to determine which changes to accept or reject.
Adam McCrea launched an exciting new tool for comparing hosting costs of web applications across multiple platforms → PaaS Pricing Calculator
Chetan Mittal launched a new book, Mastering Enums in Rails
📅 Events:
Kasper Timm Hansen announced a new workshop: Action View-Source Deep-Dive.
Ruby Central announced the early bird tickets will go on sale on Wednesday.
Euruko announced the opening of their Call for Proposals for EuRuKo 2025
Irina Nazarova announced the speakers for the SF Ruby Meet-up happening on 20 March
👉 All about Code and Ruby There a lot of code samples included;
here are just some of them:
InfoSec reported critical vulnerabilities in the ruby-saml gem that allow attackers to bypass authentication, currently an update is available for this gem
Ruby on Rails announced a new release 8.0.2
Esparta shared his experience of bundle being interrupted during dependency installation while upgrading to Ruby 3.4.x
Matt Yoder shared a Ruby puzzle about string-freezing behavior.
Vladimir Dementyev showcased how easy it is to run Avo directly in the browser.
Peter Solnica shared his discovery that Ruby's byteslice method creates new string instances when operating on frozen, empty strings.
Graceful.Dev shared a trick about using filters and map together efficiently.
Michael Koper shared a security tip to prevent admin account password resets in Rails. You can discover up to 14 more concrete, ready-to-use code samples the community shares.
Remember to read ️ 📐Thinking about Code, where Nate Berkopec shared
advice on optimizing ActiveRecord database connections by using external
poolers and a large pool setting, and Xavier Noria raised a question
about Ruby's flat_map method, suggesting map_flat as a more intuitive
alternative name. You can also discovere what Errol Schmidt shared their
top 5 good and bad findings from Ruby on Rails app reviews based on
production applications and many other interesting conversations.
Inside 💡Around code section Donn Felker shared an interesting business
opportunity as he is searching for a co-founder for one of his projects,
Remi Mercier asked about questions that people have when starting to
work with Minitest, Sourav shared his experience learning Ruby on Rails
from a React/Next.js background, posting.
🧰 Gems, Libraries, Tools and Updates
Mike Perham released version 8 of Sidekiq gem
Carmine Paolino announced the release of a new gem RubyLLM. You can also follow the link to read the discussion on Hacker News about this gem (650 points and 165 comments)
Sean Gregory published a new gem Hokusai - A Ruby library for authoring GUI applications
Bruno announced a new gem Ruberto - A Ruby API wrapper for Uber
Brad Gessler announced a new gem superlink: A more powerful path and url generator for Rails
Tomasz Kowalewski published a gem memplify - Simplify memory profiling with memplify
Zach Morek published an interesting project DOOM.rb - A Ruby implementation of the classic DOOM game engine, focusing on vanilla accuracy inspired by Chocolate DOOM
You will also find updates on their projects or libraries like Trix,
activeagents.ai, Rubocop, Roda, Sitepress, standard, ruby-openai,
Rubygems.
As always, we have more links to newsletters, videos, podcasts,
and articles.
I am very close to putting this "vibe coding" phrase into
ignore lists. But someone saying that Ruby is not fit for vibe coding
made me look into what this term is.
Andrej Karpathy introduced this in a post on social media:
What is vibe coding - original definition
But it seems to have evolved into something that is now described more
close to the following definition (source: Wikipedia)
> an inexperienced person describes a problem in a few
sentences as a prompt to a large language model (LLM) tuned for coding.
Definition of Vibe coding from Wikipedia
Now let's take a look back at what Andrej wrote and try to add two
contexts to this:
He is an expert in LLMs - notice the term expert here
Let's focus a bit on some things I marked from his post
Annotated screenshot of the definition of Vibe Coding
Here are some questions I would like to ask myself:
Look at 1️⃣ When he says I just work around it, how close is he to an amateur programmer or someone without any experience in coding? Could it be possible for things to look easy to work around because he has so much experience?
Look at 2️⃣ When he says, "or I ask for random things," how random are those things, and how much of this know-how/experience is he asking for random things?
And now let's look at the last part, 3️⃣ - where he says, "I just <...> say stuff," and again, ask yourself when he says stuff to an LLM, how similar are his prompts/queries to a random person without any technical knowledge
This might be an expert blind spot for him and us, as we haven’t
considered how much his expertise makes things seem simple.
I am not saying this cannot happen, but seeing this vibe coding suddenly
everywhere triggered my skepticism inside. It is just a thought; I
am not saying this is not working or is not real. We might be in the
beginning of something great.
I'm aware that as developers—or as tech enthusiasts—we're picky about
subscribing to newsletters.
Here's the harsh reality: 1) Running a newsletter has some costs.
2) Advertisements are the primary means to cover newsletter costs.
3) A key metric for advertisers is the subscriber count.
There are other metrics involved, and also, for example, in the case of
shortruby.com, many who chose to
place an ad within it did so also to support the newsletter. Which is
amazing, and I am so grateful to them.
I encourage you to subscribe to a newsletter if you enjoy it. The
same applies to podcasts YouTube channels, or blogs.
Support the creators when you can. RSS is also a good option; just be
aware that it does not appear in the stats.
One benefit of using Sorbet is that it can make VSCode and Neovim almost
on par with RubyMine's excellent behavior of being able to go to
definitions and references from almost anywhere to anywhere. It helps so
much with debugging and refactoring.
And that is amazing in a dynamically typed language.
This morning I played a bit with Claude Code and tried it out on a piece
of #Ruby that was written in a hurry for a personal project.
I asked the following prompt:
Prompt used for Claude Code
It created a new file that included the previous code and maintained the
previous structure with private attr_reader, even though it wasn’t
necessary here.
New file created by Claude Code
It then replaced the previous code with a call to the new object. At least two notes: - It is not necessary to use require relative
since this is a Rails project - It kept that method with a single
call and here, I would have liked to discuss whether to keep it or not
The changes in the existing file
Then it copied the test from the previous big file to this one and added
an extra test. Notice not only here but in multiple files that it
does not add new line at the end of the file.
The tests moved to the new file
It then executed the tests and wrote a summary. I would have liked
to have executed the test from the file where the code was extracted to
ensure that the tests there still passed. I executed it manually, and it
still passed.
Executing tests
The total cost for this operation 29 cents and it took 3 minutes. Well
the number of minutes is not real because I stopped multiple times
taking screenshots.
We probably all know this, but let me remind you—and mostly myself—that
getting a good night's sleep is one of the simplest ways to
boost productivity.
Add a 30-minute walk in the morning, and you'll likely see a 3.14x or
even 7.5x increase, at least.