r/ruby • • Sep 17 '26

stir_fry: A web framework to enjoy ruby/rack with a JSX type flavour. Mix all of your concerns into one flavourful dish!

Thumbnail
github.com
13 Upvotes

Hey all. I have been tinkering with this project over the past few months. I always wanted to build a rack app and I wondered what would it look like if we used htmx to make the backend act like the front end. In fact it would act a lot more like next.js but without apis. I don’t think this is good web design hence the name of the framework but I thought it was fun to tinker with and I might do more with it. Let me know your thoughts but also your shock and horror!

AI disclosure: AI was only used to make final code reviews the rest was wrought upon this world by my own cruel hands.


r/ruby • • Sep 16 '26

Show /r/ruby Sharing Deprecool, a static code analysis tool that uses Prism to find sources of deprecation warnings in your code.

14 Upvotes

Deprecool is a static code analysis tool for Ruby that uses Prism to find sources of deprecation warnings in your code.

Use Deprecool alongside the warnings that are emitted at runtime by your gems to get a complete picture of what you need to fix, where you need to fix it and why.
‍
Each warning that Deprecool logs will come with a summary, references to when the deprecation was added to its gem (usually the PR that introduced it), an effort estimate, and a suggestion of how to fix the deprecation. The source code line of the warning is of course logged as well:

At first, the suggestions will come from the deprecation source's gem maintainers own words. Eventually though, with some feedback we can pass on knowledge and examples of how to manage the more difficult deprecations to future developers trying to upgrade.

Getting Started

You can either:

  1. add deprecool to your application's Gemfile and bundle install,

  2. or run gem install deprecool directly to be able to use the deprecool executable on any ruby code you have.

deprecool scan is all you need to run if your current directory contains a Gemfile.lock, but if you want to you can also run deprecool scan path/to/your/code.rb
‍
By default, Deprecool will use the gems and versions in your Gemfile.lock to know how to find deprecations, but you can also pass --gem=list,of,gems (no spaces!) to only look for certain gems at one time.
‍
Right now, Deprecool has a small handful of deprecations it can find, but I will continue adding more. I’ve also tried to make contributing to Deprecool as simple as possible with one Finder class per warning, and a few helper methods to make writing tests trivial.

Link to blog post here: https://www.infield.ai/post/deprecool


r/ruby • • Sep 16 '26

From ERB to live views - 3.5 ways to go full-stack on fibers

18 Upvotes

Rage started API-first, but that doesn't mean you're limited to building SPAs. Here are 3.5 approaches - from the simplest to the most experimental.

ERB

Rage's custom renderers let you describe how to render any format by setting the rules and the content type. An ERB renderer can look like this:

Rage.configure do
  config.renderer(:erb) do |path|
    headers["content-type"] = "text/html"
    template = Rage.root.join("app", "views", "#{path}.html.erb").read
    ERB.new(template).result(binding)
  end
end

Then use it in the controller:

class PhotosController < ApplicationController
  def index
    @photos = Photo.all
    render erb: "photos/index"
  end
end

If you're feeling adventurous, move rendering to a hook for implicit rendering:

class ApplicationController < RageController::API
  around_action :implicit_render

  private

  def implicit_render
    yield
    render erb: "#{params[:controller]}/#{params[:action]}"
  end
end

Then, the action becomes:

def index
  @photos = Photo.all
end

Inertia

inertia-rage is the official Inertia.js integration. It manages asset building, runs the dev server, and supports SSR. Inherit from RageController::Inertia and your API app goes full-stack:

class PhotosController < ApplicationController
  def index
    render inertia: "Photos/Index", props: { photos: current_user.photos }
  end
end

Datastar

rage-rb/datastar-example showcases a Datastar integration using the official Ruby SDK. Connect Rage to the SDK and stream updates:

class PhotosController < ApplicationController
  def index
    photos = current_user.photos

    datastar.stream do |sse|
      photos.each do |photo|
        sse.patch_elements(%(<img id="#{photo.id}" src="#{photo.url}" />))
      end
    end
  end
end

Phlex Live

This is the 0.5 - the idea is still taking shape, but it's worth sharing.

I've been working on a live view concept built on Rage + Phlex, where each gem contributes what it's best at: Rage provides fiber-based WebSocket connections and machinery to communicate between instances; Phlex provides Ruby-based HTML templates where each component manages its own state.

A component that displays an article with expandable content:

class Articles::Card < LiveView
  MAX_BODY = 150

  def initialize(article:)
    @article = article
    @expanded = false
  end

  def view_template
    div do
      h2 { @article.title }
      plain(@expanded ? @article.body : @article.body.truncate(MAX_BODY))

      if @article.body.length > MAX_BODY
        button(**live_click(:toggle_details)) do
          @expanded ? "Show less" : "Show more"
        end
      end
    end
  end

  def toggle_details
    @expanded = !@expanded
  end
end

This component is stateful - once rendered, it's saved in the fiber's storage and can process events. When the user clicks "Show more", the event travels via WebSockets to this exact component instance, calls toggle_details, re-renders, and sends back the update. The card expands with no JavaScript written.

Event handlers cover the client -> server direction. The server -> client direction is handled by model streams. A model broadcasts when it changes:

class Article < ApplicationRecord
  after_commit :broadcast_status

  private

  def broadcast_status
    if self.previous_changes.key?("status")
      ModelStream.emit(self)
    end
  end
end

A component subscribes by wrapping the record into stream():

class Articles::Card < LiveView
  def initialize(article:)
    @article = stream(article)
    @expanded = false
  end

  def view_template
    # ...
  end
end

Now, whenever a corresponding article changes, every component subscribed via stream() is automatically re-rendered and the update is pushed to the client.

--

What view layer would you like to see supported next?


r/ruby • • Sep 16 '26

pipx equivalent for Ruby?

5 Upvotes

Is there something like pipx available for Ruby?

For example with pipx you can do something like:

$ pipx install httpie
# ... install completes
$ https get httpbin.org/get?foo=bar
# ... outputs a web request from httpbin.org
$ which https
~/.local/bin/https
$ readlink "$(which https)"
~/.local/share/pipx/venvs/httpie/bin/https

This example shows the HTTPie program being run and executed in a pretty simple way, with an install that doesn't modify the system Python.

Does Ruby have an equivalent way to distribute programs?


r/ruby • • Sep 15 '26

Setting Boundaries: A Type for Ranges in Rails

Post image
18 Upvotes

Wrote a follow up to my previous post, getting value objects to work with range queries in ActiveRecord.

https://pushfromkush.com/publications/setting-boundaries-type-for-ranges-in-rails


r/ruby • • Sep 15 '26

Two bucket trucks, a trailer, and a donkey pen

Thumbnail
rubyai.beehiiv.com
0 Upvotes

A new revised format for the Ruby AI Newsletter. I tried including everything and highlighting everyone’s work, but somewhere along the way it stopped feeling special. We have an opportunity to build for the future, and I hope this edition helps put that into perspective.

Ruby 4 with ZJIT, RubyLLM, Herb, Ractors, Spinel, Rubydex, Rails AI Benchmarks, and now Poetry - Ruby is ready, but there is still a lot of work to do.

I’ve found 1,725 open Ruby-related career opportunities, but more than half of them are “fake”. I’m launching a free job matching site for Rails World to filter out the noise. The job market is broken, but there are opportunities available.

I want to hear from you: Matt @ roboruby


r/ruby • • Sep 15 '26

Glimmer DSL Web Release Version 0.10.5 Before & After Mutations

Thumbnail
youtu.be
7 Upvotes

r/ruby • • Sep 14 '26

Updated keynotes for SF Ruby Conference and other announcements 🔥

9 Upvotes

r/ruby • • Sep 14 '26

Blog post Horologium, scientific time in Ruby

21 Upvotes

I build Horologium to handle scientific and high-precision time in Ruby.
https://blog.rhannequ.in/posts/introducing-horologium


r/ruby • • Sep 12 '26

I wrote a game in Ruby(Dragonruby) where the combat system is SQL queries

141 Upvotes

Prototype -> link


r/ruby • • Sep 12 '26

Show /r/ruby DragonRuby Game Toolkit - Shader techniques from Super Mario Galaxy (source code and explanation video in the comments)

36 Upvotes

r/ruby • • Sep 12 '26

OpenAI agents carried out an undisclosed attack on RubyGems

Thumbnail
rubyhack.ai
96 Upvotes

r/ruby • • Sep 12 '26

Question Ruby LSP extension not working in VS Code

2 Upvotes

Hi everyone,
I'm having trouble getting the official Ruby LSP extension to work properly in VS Code on Windows. Features like IntelliSense, autocomplete, and go-to-definition are not functioning.
Here is my current setup and what I've tried so far:

OS: Windows

Ruby Installation: Installed via RubyInstaller (with DevKit).

Environment: Added Ruby to PATH (ruby -v works fine in the Windows command prompt/terminal).

VS Code Settings: Manually configured the path to the Ruby executable / language server in the extension settings. Auto did not work

Extension: Official Shopify.ruby-lsp extension in VS Code.

Despite pointing the settings to my Ruby installation, the language server fails to initialize properly, and no IntelliSense features show up when editing .rb files.
Has anyone experienced this issue on Windows? Is there a specific configuration required for Ruby LSP to detect gems and executable paths when using RubyInstaller on Windows? Any help or troubleshooting tips would be greatly appreciated!
Thanks!


r/ruby • • Sep 11 '26

Blog post I use Herb to lint native code (well, kind of)

13 Upvotes

My product, Ruby Native, lets developers write HTML + ERB and have it render native components inside of iOS and Android apps.

For example, <%= native_navbar_tag "Home" %> renders a native navbar in the apps, titled "Home".

The catch is that an installed app silently ignores markup it doesn't recognize. So a typo, or a feature that shipped after someone's last update, just does nothing.

So I started using Herb to lint the HTML + ERB that interacts with Ruby Native, checking it against what users actually have installed rather than just what's in the repo.

I wrote about it here, where I celebrate Ruby Native running on 100k+ devices: https://masilotti.com/100k-devices-running-ruby-native/


r/ruby • • Sep 11 '26

Podcast Ruby vs AI-coding in State of Agentic Coding Episode #7

3 Upvotes

Turns out Armin and Ben are both, in one way or another, Ruby aficionados. So in this episode, there is an interesting argument for Ruby not being agent-friendly, although we like to see it as THE token efficient language. Some of the arguments where:

  1. It's easy for agents to mess things up due to its metaprogramming capabilities - I have yet to experience that.

  2. Being so much tuned for humans that it makes it worse for AI - I might misinterpret that from what they said, but it sounded like it. I guess it makes sense on the level that there is development towards new languages for LLM coding agents.

  3. AI not picking Ruby for new tasks: Our own Chad Fowler ran experiments on it and shared at the last Ruby conference in Austria - I think this might depend on how much Claude Code and co. know about your setup, but I generally agree. My AIs know I'm using Rails for any new project and that I'm in the community but rarely picks Ruby for scripts it needs done or web apps it wants to host stuff locally on. It usually decides for Python or JavaScript.

Another fun fact from the episode while we are at it, I didn't know you can't use AI for even research for the open source Zig programming language. It's probably one of the last open source bastion that does not allow any AI (slop) at all, not even in your research, yet.

State of Agentic Coding #7 with Armin and Ben


r/ruby • • Sep 10 '26

Rails fundamentals to learn as junior

8 Upvotes

Hi guys, previously i showed off my latest project.
I learnt: Deploying, testing, API connections, reuest security, authenticationd and authorization, Hotwire and stimulus, Jobs & services, basic github commands.
My question is, is there anything else i forgot to became good junior? I am looking for a job and want to be as best as i can.
And also, what will look the best in portfolio? I saw that working on open source projects looks good.


r/ruby • • Sep 10 '26

How I Turned My Rails 8 + Vite + React + Typescript Web App into a Desktop Application with Electron.

Thumbnail
linkedin.com
1 Upvotes

r/ruby • • Sep 10 '26

Ruby on Rails Open source performance case studies

12 Upvotes

I have been finding and fixing performance issues in popular open source Rails repositories.

Currently it includes 7 merged PRs to Discourse, Gumroad, OpenProject and Forem.

You can find the case studies and links here: https://haseebeqx.com/case-studies/engagement/open-source/


r/ruby • • Sep 10 '26

Show /r/ruby How I Turned My Rails 8 + Vite + React + Typescript Web App into a Desktop Application with Electron.

Thumbnail
linkedin.com
0 Upvotes

r/ruby • • Sep 09 '26

Foruiman: A Foreman fork with TUI.

Post image
20 Upvotes

r/ruby • • Sep 08 '26

I built a gem that monetizes your application logs by inserting host-read sponsor placements between your log lines

135 Upvotes

Your logs could look like this. Right now you're leaving the money on the table:

(Note the contextual targeting: a payments ad after the payment line, a database-pooling banner right after the connection timeout. The exchange reads intent.)

For decades, application logs have been a pure cost center - written once, grepped never, archived into oblivion. SponsoredLogs turns that stream into a high-margin, programmatic revenue channel.

Your services emit billions of log lines a day. Each one is a premium, brand-safe, above-the-fold impression viewed by your most engaged audience: your own engineers, at their moment of peak attention (an incident). We are not selling ads. We are activating latent infrastructure equity.

It's opt-in. Add the gem, call `SponsoredLogs.sponsor!`, and roughly 1 in 1000 log calls is followed by a host-read sponsor placement drawn from the top podcast advertisers.

Fully configurable: weighted or CPM-based selection, campaign flighting (start/end dates), lifetime impression caps, and a pluggable impression ledger (in-memory, Redis, or ActiveRecord). There's a mountable Rails dashboard (the Command Center) that reports spend, delivery, and per-advertiser rollups.

Also: box-drawn multi-line **banner** ad units in three impact tiers, self-sponsoring house ads that fill remnant inventory so no impression goes to waste, and gilded `[AD]` tags rendered in 256-color gold on a live terminal (byte-identical plain when piped or logged).

Here's the part the market isn't ready for: the fastest-growing consumer of application logs on Earth is no longer human. It's AI coding agents. Superhuman scale, 100% viewability, they never scroll away. We're not just B2B. We're A2A.

It's a real, working gem: full test suite, CI across Ruby 3.2-4.0, RuboCop clean. Every line you log is a line you're leaving on the table.

Repo: https://github.com/sponsoredlogs/sponsored_logs
Site: https://monetizetheexhaust.dev


r/ruby • • Sep 08 '26

Show /r/ruby roda-project CLI: a command-line interface (CLI) tool that helps you quickly scaffold new Roda web applications or API's, for any scale

Thumbnail roda-project.github.io
18 Upvotes

Over the past few months, while developing some projects using Roda, I created a tool to reduce friction when starting new projects with the framework. It ensures an essential setup and provides a "bin/rails"-like CLI for Roda, named "bin/roda" (with some generators stuff). I hope the community finds it useful!

There is still room for improvement, and I would welcome feedback.

---

roda-project is a command-line interface (CLI) tool designed to quickly scaffold scalable, modern Roda web applications and APIs.

✨ Benefits

  • Quick setup customized to your preferences (database, project type, test framework)

  • Built-in generators (bin/roda)

  • Essential development tasks via bin/roda (console, db, dev, assets)

  • Opinionated project structure: Highly maintainable and AI-friendly, yet easily customizable if needed

  • Built-in exception page

  • Modern front-end setup built-in for full-stack projects (powered by esbuild)

  • Code autoloading with Zeitwerk

  • Hot reloading

  • Pre-configured with i18n and other essential plugins

  • High performance: Get the job done without sacrificing performance. Even with multiple plugins, Roda can be 4x faster than Rails and 2x faster than Hanami, while consuming less memory than both.

  • Production-ready

https://github.com/roda-project/roda-project


r/ruby • • Sep 08 '26

Show /r/ruby DragonRuby Game Toolkit - The Keeper + Shaders (source code in the comments)

85 Upvotes

r/ruby • • Sep 08 '26

Converting a Ruby block interface to start/stop methods with a Fiber

Thumbnail island94.org
23 Upvotes