The Ruby and Rails community linklog
Made a library? Written a blog post? Found a useful tutorial? Share it with the Ruby community here or just enjoy what everyone else has found!
Submit a post
Post Preview
Note: Only the first pargraph is shown on the front page and overly long paragraphs may be broken up.
Today
When broadcasting a refresh is not enough: faster UX with versioned updates
If you’re using Turbo broadcasts to make a page collaborative, you might have noticed that the default refresh approach adds latency: an extra round trip, a debounce delay, and a flood of simultaneous requests when many users are connected. Broadcasting a replace action with the content directly fixes most of that, but it opens up a race condition where updates can arrive out of order. Here’s how to get fast, immediate updates without sacrificing correctness: When broadcasting a Turbo refresh is not enough: faster UX with versioned immediate updates
⚽ The World Cup is reaching its final stages, and Ruby developers have been building
From prediction pools to tournament managers and live leaderboards, here’s a roundup of some of the coolest Ruby & Rails projects. 🇦🇷💎 [more inside]
RubyConf 2026 Is Not a Safe Environment for Everyone
RubyConf 2026 is not a safe environment for everyone. They have an in-group and an out-group. If you’re in the in-group, they will treat you well and accept talk proposals by you even if you don’t have top-level skills in Software Engineering. If you’re in the out-group, it doesn’t matter if you launch rockets to the moon successfully on your own or win the approval of Matz himself, you will be excluded and discriminated against. This is no different from how the MLB (Major League Baseball) used to mistreat Afro Americans and relegate them to playing in the Negro league instead of the Major League. Telling someone who can perform at the major league level they are unaccepted as a player there, but could attend if they want is most definitely discrimination 100%.
Tracking Business Metrics in Rails without a full analytics stack
Rails apps often need metrics that are not quite logs, not quite BI, and not quite infrastructure monitoring: orders per day, revenue, background jobs, imports, feature usage, tenant activity, and other counters that belong close to application code. I wrote about using Trifle::Stats to track those app-level business metrics from Ruby with time rollups, nested breakdowns, and simple retrieval for charts or console answers. [more inside]
data_redactor: stop secrets and personal data leaking into logs and LLM prompts
If your app writes logs or sends text to an LLM, sooner or later a real credit card, email, or API key ends up in there — data_redactor strips that kind of data out of any string before it leaves your app. [more inside]
Refactoring with Convergence Rules
Three rules turn duplication into abstractions through tiny steps, and catch false abstractions before they ever reach the code. [more inside]
Ruby Open-Source Innovation Process Expectation vs Reality
Ruby Open-Source Innovation Process Expectation vs Reality
Ruby Gotcha: Environment Variables Are Always Strings in Ruby
Learn why ENV[‘FLAG’]=’false’ is still truthy and how to safely handle boolean environment variables in Rails applications. [more inside]
Curiosity reduced the heap size by 60%
A stray Ruby warning spotted while running specs: “redefining ‘object_id’ may cause serious problems”, led down a rabbit hole into opentelemetry-instrumentation-aws_sdk and a pinned, ageing aws-sdk v2. The install hook was force-loading all AWS service classes at boot, just to check which ones were actually in use. One small monkey-patch later: 220 fewer services loaded, 60% fewer classes in the VM, heap nearly halved and boot time down 36%. [more inside]
Moving 300GB of Request Details Out of Postgres
Our Postgres table grew 30x in a month (10GB → 300GB). Here’s how we fixed the storage problem behind DeadBro’s request traces
Associations Are Query Interfaces, Not Object Properties
A loaded Active Record association target answers one question, not every future association-shaped call. This RailsRevelry article explains association readers, CollectionProxy, loaded targets, scoped queries, count/existence methods, strict loading, and the debugging question: loaded for which question? [more inside]
Five Rules for Taming RSpec's let Overuse Problem
Concrete, code-backed rules for using let effectively, based on advice from RSpec maintainers and years of consulting. There’s also an agent skill you can use to enforce the rules. [more inside]
PicoPhone: a fast native wrapper around libphonenumber
I just published pico_phone (source), a thin Ruby wrapper around Google’s libphonenumber C++ library via Rice. It’s the same engine Android’s dialer uses, so you get accurate parsing, validation, and formatting for phone numbers from any country: national/international/E.164 formats, area code and local number extraction, type detection (mobile, toll-free, etc.), vanity number conversion, short-number/emergency-number lookups, and more. [more inside]
Reminder that RubyConf 2026 is a Cesspool of Discrimination and Exclusion
Just a reminder that RubyConf has become a Cesspool of Discrimination and Exclusion. In 2026, it doesn’t matter how well accomplished a Ruby Software Engineer is in the Ruby community as even if they win awards by the creator of Ruby himself, if they propose a topic that is taboo with the organizers of RubyConf, they are excluded and discriminated against, without even providing a valid reason for the exclusion. It’s one thing if there was an intelligent rational reason. It’s another when the organizers just run away in cowardice from addressing the discrimination, which is an act of discrimination/exclusion as ignoring someone is a form of exclusion too. [more inside]
Group Policy Allow Remote Desktop Specific Users Windows 10
Group policy allow Remote Desktop specific users Windows 10? If you want to allow only specific users to access Remote Desktop on Windows 10 using Group Policy, you need to add those users to the Remote Desktop Users group or configure the Allow log on through Remote Desktop Services policy in the Local Group Policy Editor or Group Policy Management Console. [more inside]
Think Ruby has a floating-point bug? Think again.
Learn why decimal numbers behave this way, why the Ruby issue tracker links to a classic 1991 paper, and how to choose between Float, BigDecimal, and Rational. [more inside]
Render has the pieces, not the workflow
We migrated our ~2,800 RPS app from Heroku to Render. The migration was seamless, but the overall deployment experience just doesn’t hold up. Here’s what we learned.
Idempotent Background Workers for LLM Calls in Rails
A practical guide to making AI-powered Rails background workers safe to retry. The article covers Sidekiq’s at-least-once execution model, LLM non-determinism, completion gates, structured output validation, and audit trails. [more inside]
Mistri: a zero-dependency agent harness for Ruby
Agent tooling today is either TypeScript or Python, so I wrote an agent harness for Ruby. Mistri has zero dependencies and stays out of your app’s way: resumable sessions stored as append-only entries, steering a run while it is still running, sub-agents, tool approvals, and one interface for Anthropic, OpenAI and Gemini. It runs a production assistant today. Docs and recipes at https://mistri.sh, source at https://github.com/mcheemaa/mistri. Feedback welcome, especially on the session model.
Factory Method Pattern
Creating objects is a responsibility too. What problem a factory actually solves, how the Simple Factory differs from the GoF’s Factory Method, and how Ruby simplifies both because classes are objects. [more inside]
[Screencast] Claude Skills
In this episode, we look at creating Claude slash commands. These can be useful when dealing with a complicated task or trying to extract certain information from the application.
Audit a Rails Project with the Thoughtbot Audit Skill
Ran the Thoughtbot Rails audit skill with Claude Code on a 5-year-old side project: wrote up some findings and the workflow I used to turn the report into a labelled GitHub backlog
An Active Record Object Is a Snapshot, Not the Row
Two Active Record objects can represent the same row, compare as equal, and still carry different attribute values. This RailsRevelry article explains model object snapshots, reload, lifecycle predicates, and the debugging difference between object state and database truth. [more inside]