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
Gemini API in Ruby: Building AI Agents Without an SDK
Build Gemini AI agents in Ruby or Rails without an official SDK: Interactions API, Faraday, function calling, server-side state, and production guardrails. [more inside]
Ozymandias on Rails: The Pedestal Inscription
Shelley wrote about a king whose monument outlived everything it was built on. I’ve spent 15 years inside Rails monoliths that did the same thing. This is the first post about what to do when you’re standing in the ruins. [more inside]
Classic design patterns don't disappear in Ruby they become simpler.
Discover how Factory, Builder, Adapter, Decorator, Proxy, and Facade are implemented the Ruby way in Part 2 of our series. [more inside]
When Does an Active Record Query Actually Run?
An ActiveRecord::Relation is deferred query intent, not loaded data. This article traces when Rails query methods build relations, when methods like present?, count, size, length, and exists? execute SQL, and how to debug the line that turns query intent into database work. [more inside]
Ruby Memes 2026-06-26: The Ruby Clown
Ruby Memes 2026-06-26: The Ruby Clown
llm_cost_tracker 0.13.0 — self-hosted LLM cost tracking for Rails
0.13.0 leans on accounting-grade accuracy: track now rejects unrecognized token keys instead of silently undercounting (breaking — see changelog), async ingestion no longer loses cost data on transient DB errors, OpenAI tool calls are priced correctly, and non-USD costs render in their own currency. [more inside]
Design patterns aren't about copying code they're about solving recurring design prob
In Part 1 of our new series, discover how Ruby simplifies (and sometimes eliminates) classic GoF patterns. [more inside]
The Ruby Community in 2026
The Ruby Community in 2026:
Alchemy 8.3
A brand new dashboard, Wildcard-URLs and a bunch of improvements have been released 23th of June. Read more about the latest release of the most versatile Rails CMS at [more inside]
Ever wondered how Ruby keeps local variables alive after a method returns?
Dive into the internals of closures, lambda, and Proc to see how YARV moves execution environments from the stack to the heap—and why it matters.👇 [more inside]
The Modular Monolith in Rails: Engines, Packwerk & Boundaries
A current (Rails 8, Zeitwerk) walk-through of enforcing boundaries inside a Rails monolith before reaching for microservices. It compares Engines vs Packwerk vs extracted gems vs services in a single matrix, covers what Zeitwerk does and doesn’t give you, sets out a safe incremental migration loop, and is honest about when not to bother. First-party runnable examples throughout. Written from the experience of decomposing a large production monolith into engines — feedback from people running this in anger is welcome. Disclosure: I wrote this and the free companion book it links to. [more inside]
Painfully Simple Test Case Mistakes That Are Easy to Fix
Writing effective test cases is as important as writing the business logic in your application. In this article Rishi dives into the simple yet effective ways developers can use when crafting test cases. [more inside]
Ruby itself uses Dependabot and its configuration reveals how the Ruby core team mana
A small YAML file with some interesting engineering decisions. 👇 [more inside]
Real-Time Engagement: Web Push Notifications in Rails 8
For a long time, if you wanted to send a “Push Notification” to a user’s phone or laptop, you needed… [more inside]
JRuby & Rails Compatibility Table
Here is a complete table showing the compatibility between JRuby and Rails across each version, including the Ruby language level and the Java version that each JRuby line requires. [more inside]
Applying some Rage to Discourse, Mastodon, and GitLab
A look at real-world patterns from Discourse, Mastodon, and GitLab and how they could be rewritten using Rage, the Rails-compatible fiber-based framework. The three examples cover concurrent request fan-out, streaming, and domain events. [more inside]
Skrift: Pure-Ruby TrueType / OpenType glyph rendering
Skrift and its accompanying plugins skrift-color (Emoji rendering), skrift-boxdrawing (“perfect” scaling boxdrawing characters) and skrift-x11 provides a whole eco-system of TrueType / OpenType text rendering to bitmaps or X11 drawables with no external dependencies (no FreeType etc.). [more inside]
🚀 Modernize your Ruby code without rushing your runtime upgrade.
Ruby Next lets you adopt newer Ruby syntax and APIs while keeping compatibility with older versions—making large upgrades far more manageable. Read more 👇 [more inside]
New book: Testing Rails from Scratch
I’ve been working on a thought experiment, using my time-tested approach to TDD with a (mostly) default Rails testing stack. I decided to make a book out of it: Testing Rails from Scratch: A (mostly) out-of-the-box approach to testing Ruby on Rails. First three chapters are available now from Leanpub. [more inside]
The Budget-Friendly Monolith: Rails File Uploads with Cloudflare R2
If you have been using AWS S3 for your Rails file uploads, you know the pain of the monthly bill…. [more inside]
Where Does current_user Actually Live?
𝚌𝚞𝚛𝚛𝚎𝚗𝚝_𝚞𝚜𝚎𝚛 reads like global state, but Rails request identity moves through the session, Warden, Devise helpers, optional 𝙲𝚞𝚛𝚛𝚎𝚗𝚝𝙰𝚝𝚝𝚛𝚒𝚋𝚞𝚝𝚎𝚜, and executor cleanup. This article traces that lifecycle and the production bugs that appear when those boundaries are confused. [more inside]
gem-skill version 0.2.0 adds optional source code verification
The new –verify flag and verify sub-command implement an option pass of the generated SKILL.md file for a Ruby gem against its source code toe detect when the gem’s documentation may be a little outdated. If any issues are found, the SKILL.md file is updated. This version also adds a new global skill “ruby-gem-skills” that is inserted by the command gem skill setup into the claude code, codex and generic agents global skills directories to route requests to the local ~/.gem/skills directory.
Pro File Uploads in Rails 8: Speed and Scalability with Direct Uploads
Imagine a user trying to upload a 100MB video or a high-resolution photo to your app. If you use the… [more inside]