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
Hanami 3.0: In full bloom
Hanami 3.0 is here and in full bloom 🌸 — this is our most complete release yet: mailers, i18n, and Minitest now built in, your apps faster by default, and plenty more! [more inside]
llm.rb v12.0.0 released
llm.rb is an advanced runtime for building highly capable AI applications on CRuby. This release is packed with new features, bug fixes, & other improvements.
Start With Ugly Code
Faced with a new problem, the elegant solution is almost always premature. Why simple code that passes the tests is the best starting point, and how to get there with TDD. [more inside]
Deploying Rails 8 with Kamal on a Single Server
A single server will take a Rails 8 app a long way. One reasonably-sized VPS, a few dedicated vCPUs and 8–16 GB of RAM from any commodity host, comfortably runs the web app, a background worker, Postgres, and Redis for a product doing real revenue. [more inside]
Can a coding agent navigate Chatwoot, or just write Ruby?
A real chore on Chatwoot: find every dependent of the Inbox model before changing how it’s torn down. Cold, the agent found 2 of 11 and called it done. With a map of the repo, all 11. The map’s from Sense, a tool I build, so don’t take my word for it, it’s all public. [more inside]
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]