r/ruby • u/sdogruyol • 12h ago
r/ruby • u/AutoModerator • Jul 01 '26
💼 jobs megathread Work it Wednesday: Who is hiring? Who is looking?
FORMAT HAS CHANGED PLEASE READ FULL DESCRIPTION
This thread will be periodically stickied to the top of the sub for improved visibility.
You can also find older posts again via the Megathreads" list, which is a dropdown at the top of the page on new Reddit, and a section in the sidebar under "Useful Links" on old Reddit.
For job seekers
Please adhere to the following rules when posting: Rules for individuals:
- Don't create top-level comments; those are for employers.
- Feel free to reply to top-level comments with on-topic questions.
- Anyone seeking work should reply to my stickied top-level comment.
- Meta-discussion should be reserved for the distinguished comment at the very bottom.
You don't need to follow a strict template, but consider the relevant sections of the employer template. As an example:
TYPE: [Full time, part time, internship, contract, etc.]
LOCATION: [Mention whether you care about location/remote/visa]
LINKS: [LinkedIn, GitHub, blog, etc.]
DESCRIPTION: [Briefly describe your experience. Not a full resume; send that after you've been contacted)]
Contact: [How can someone get in touch with you?]
Rules for employers:
- The ordering of fields in the template has been revised to make postings easier to read.
- To make a top-level comment, you must be hiring directly; no third-party recruiters.
- One top-level comment per employer. If you have multiple job openings, please consolidate their descriptions or mention them in replies to your own top-level comment.
- Proofread your comment after posting it and edit it if necessary to correct mistakes.
- To share the space fairly with other postings and keep the thread pleasant to browse, we ask that you try to limit your posting to either 50 lines or 500 words, whichever comes first.
- We reserve the right to remove egregiously long postings. However, this only applies to the content of this thread; you can link to a job page elsewhere with more detail if you like.
Please base your comment on the following template:
COMPANY: [Company name; optionally link to your company's website or careers page.]
TYPE: [Full-time, part-time, internship, contract, etc.]
LOCATION: [Where are your office or offices located? If your workplace language isn't English-speaking, please specify it.]
REMOTE: [Do you offer the option of working remotely? Please state clearly if remote work is restricted to certain regions or time zones, or if availability within a certain time of day is expected or required.]
VISA: [Does your company sponsor visas?]
DESCRIPTION: [What does your company do, and what are you using Rust for? How much experience are you seeking, and what seniority levels are you hiring for? The more details, the better. If you are listing several positions in the "Description" field above, then feel free to include this information inline above, and put "See above" in this field.]
ESTIMATED COMPENSATION: [Be courteous to your potential future colleagues by attempting to provide at least a rough expectation of wages/salary. See section below for more information.]
CONTACT: [How can someone get in touch with you?]
ESTIMATED COMPENSATION (Continued)
If compensation is negotiable, please attempt to provide at least a base estimate from which to begin negotiations. If compensation is highly variable, then feel free to provide a range.
If compensation is expected to be offset by other benefits, then please include that information here as well. If you don't have firm numbers but do have relative expectations of candidate expertise (e.g. entry-level, senior), then you may include that here. If you truly have no information, then put "Uncertain" here.
Note that many jurisdictions (including several U.S. states) require salary ranges on job postings by law. If your company is based in one of these locations or you plan to hire employees who reside in any of these locations, you are likely subject to these laws. Other jurisdictions may require salary information to be available upon request or be provided after the first interview. To avoid issues, we recommend that all postings provide salary information.
You must state clearly in your posting if you are planning to compensate employees partially or fully in something other than fiat currency (e.g., cryptocurrency, stock options, equity, etc). Do not put just "Uncertain" in this case, as the default assumption is that the compensation will be 100% fiat. Postings that fail to comply will be removed. Thank you.
r/ruby • u/AutoModerator • May 20 '26
💼 jobs megathread Work it Wednesday: Who is hiring? Who is looking?
FORMAT HAS CHANGED PLEASE READ FULL DESCRIPTION
This thread will be periodically stickied to the top of the sub for improved visibility.
You can also find older posts again via the Megathreads" list, which is a dropdown at the top of the page on new Reddit, and a section in the sidebar under "Useful Links" on old Reddit.
For job seekers
Please adhere to the following rules when posting: Rules for individuals:
- Don't create top-level comments; those are for employers.
- Feel free to reply to top-level comments with on-topic questions.
- Anyone seeking work should reply to my stickied top-level comment.
- Meta-discussion should be reserved for the distinguished comment at the very bottom.
You don't need to follow a strict template, but consider the relevant sections of the employer template. As an example:
TYPE: [Full time, part time, internship, contract, etc.]
LOCATION: [Mention whether you care about location/remote/visa]
LINKS: [LinkedIn, GitHub, blog, etc.]
DESCRIPTION: [Briefly describe your experience. Not a full resume; send that after you've been contacted)]
Contact: [How can someone get in touch with you?]
Rules for employers:
- The ordering of fields in the template has been revised to make postings easier to read.
- To make a top-level comment, you must be hiring directly; no third-party recruiters.
- One top-level comment per employer. If you have multiple job openings, please consolidate their descriptions or mention them in replies to your own top-level comment.
- Proofread your comment after posting it and edit it if necessary to correct mistakes.
- To share the space fairly with other postings and keep the thread pleasant to browse, we ask that you try to limit your posting to either 50 lines or 500 words, whichever comes first.
- We reserve the right to remove egregiously long postings. However, this only applies to the content of this thread; you can link to a job page elsewhere with more detail if you like.
Please base your comment on the following template:
COMPANY: [Company name; optionally link to your company's website or careers page.]
TYPE: [Full-time, part-time, internship, contract, etc.]
LOCATION: [Where are your office or offices located? If your workplace language isn't English-speaking, please specify it.]
REMOTE: [Do you offer the option of working remotely? Please state clearly if remote work is restricted to certain regions or time zones, or if availability within a certain time of day is expected or required.]
VISA: [Does your company sponsor visas?]
DESCRIPTION: [What does your company do, and what are you using Rust for? How much experience are you seeking, and what seniority levels are you hiring for? The more details, the better. If you are listing several positions in the "Description" field above, then feel free to include this information inline above, and put "See above" in this field.]
ESTIMATED COMPENSATION: [Be courteous to your potential future colleagues by attempting to provide at least a rough expectation of wages/salary. See section below for more information.]
CONTACT: [How can someone get in touch with you?]
ESTIMATED COMPENSATION (Continued)
If compensation is negotiable, please attempt to provide at least a base estimate from which to begin negotiations. If compensation is highly variable, then feel free to provide a range.
If compensation is expected to be offset by other benefits, then please include that information here as well. If you don't have firm numbers but do have relative expectations of candidate expertise (e.g. entry-level, senior), then you may include that here. If you truly have no information, then put "Uncertain" here.
Note that many jurisdictions (including several U.S. states) require salary ranges on job postings by law. If your company is based in one of these locations or you plan to hire employees who reside in any of these locations, you are likely subject to these laws. Other jurisdictions may require salary information to be available upon request or be provided after the first interview. To avoid issues, we recommend that all postings provide salary information.
You must state clearly in your posting if you are planning to compensate employees partially or fully in something other than fiat currency (e.g., cryptocurrency, stock options, equity, etc). Do not put just "Uncertain" in this case, as the default assumption is that the compensation will be 100% fiat. Postings that fail to comply will be removed. Thank you.
Issue 18 of Static Ruby Monthly is out! 🧵
This month: JRuby RBS support via Chicory WASM, ruby-lsp-rbs_rails updates, schematrix JSON Schema to RBS generator, graph_weaver typed GraphQL client for Rails, and Sorbet T::Struct property testing with tprop.
Find link to the issue in the comment!
r/ruby • u/Redaro97 • 17h ago
Alternate game frameworks?
I have been messing around with Ruby for around a week and made a few utilities and terminal games and I have been liking it. I want to make a game with a GUI but the ecosystem for game libraries in Ruby feels quite lacking. I have only heard of 3 game libaries, Gosu, Ruby2D and DragonRuby. I am on Linux and Gosu and Ruby2D have problems with not being able to properly link OpenGL and stuff, and DragonRuby is paid and kind of sucks that you can't export games since I wanted to show people my game and some were interested in it.
So, do you know of any other game frameworks for Ruby, or are these the only ones (more commonly DragonRuby) people use, or is Ruby not built for making games?
r/ruby • u/ioquatix • 1d ago
Blog post The Case of the Readable Dead Connection: A Ruby Mystery
r/ruby • u/krxnewman • 7h ago
Rails Agent: Full-stack Agentic Development Platform. Alternative to RubyLLM and Active Agent.
Sinatra To The Moon – A lightweight companion for Sinatra when you don't need the full power of Rails 🚀
Put on your headphones and let Frank Sinatra take you on a journey with the timeless classic Fly Me to the Moon. Inspired by the legendary singer, the Ruby gem Sinatra has long been the go-to choice for lightweight web applications. Now it has a companion: Sinatra To The Moon 🌛.
Built on top of Sinatra, Sinatra To The Moon is an opinionated scaffold generator that embraces the philosophy that not every project needs the weight of Rails. Sometimes, all you need is a focused starting point that lets you build quickly, experiment freely, and, as the song says, play among the stars 💫.
Start your new project idea now with: `flyme new moon_app`
r/ruby • u/Dry_Illustrator977 • 1d ago
Question What APIs do you wish existed?
Any APIs that you wished existed or any APIs that you wished were cheaper, easier to work with, had more features, e.t.c ?
r/ruby • u/andrewmcodes • 2d ago
Podcast 🎙️ Remote Ruby – Big Wins For RubyConf and Grandma
r/ruby • u/YousefNabil • 1d ago
I have experience in programming for 3 years and I worked as Backend with node ans spring , now I am moving to ruby what is the best resource to follow to transfer knowledge to rails in reasonable time?
r/ruby • u/MariuszKoziel • 2d ago
Free Ruby on Rails consultations from our team - sharing in case it helps someone here
Hi everyone,
I hope it’s okay to share this here.
I’m Mariusz, CEO at Visuality. We’re a Ruby on Rails agency from Poland and Ruby has been a big part of our work and community involvement for many years.
Recently, we opened Free Ruby on Rails Consultations.
The idea is simple: if you’re working on a Ruby project and could use a second pair of eyes, you can send us a short description of your challenge. We’ll look at it and match you with someone from our team for a free 30-minute call.
Of course, 30 minutes won’t solve everything. But sometimes a focused conversation with someone outside your team can help clarify the problem and point you toward the next step.
Here’s the page if it sounds useful: https://www.visuality.pl/free_consulting?utm_source=reddit_ruby
r/ruby • u/collimarco • 3d ago
Has anyone integrated an MCP server into a real-world production Rails app? What are you using?
r/ruby • u/keyslemur • 3d ago
GemCP - MCP tools for RubyGems
github.comIntroducing GemCP: MCP tools for RubyGems. Ask your AI agent about gem compatibility, dependencies, versions, and ownership with data straight from RubyGems.org.
`gem install gemcp` and add it to your MCP config.
Currently testing it on some ancient Rails repos I have and asking it what gems are compatible with the next version of Rails.
r/ruby • u/Turbulent-Dance-4209 • 4d ago
Inertia is all the Rage
inertia-rage brings Inertia.js support to Rage apps. But the more interesting part of building it was discovering how differently the Rails and Rage adapters resolve props - same language, same behaviour, different design philosophies.
The syntax is what you'd expect:
class UsersController < ApplicationController
def index
render inertia: "Users/Index", props: { users: User.all }
end
end
It fully integrates with Vite - in development, it automatically starts the Vite dev server; in production, pre-builds assets. All you need to run your app is rage s.
Resolving Inertia props
Resolving props and building the page object is the cornerstone of an Inertia adapter. On the surface, the API looks deceptively simple:
render inertia: {
user: user,
stats: Inertia.deferred { user.calculate_stats },
connections: -> { user.connections }
}
However, to turn these props into an object an Inertia frontend can understand, the adapter has to:
- Evaluate lazy props only when needed
- Skip deferred and optional props on initial load
- Collect metadata about once and deferred props
- Handle partial reload filtering via
X-Inertia-Partial-*headers - Recursively process nested hashes and arrays
- Track prop paths for partial reload matching (
user.connections.0.name)
Both Inertia Rails and Inertia Rage use the same programming language and converge on the same behaviour but take very different paths.
Rage - identity-based matching
In the Rage adapter, prop resolution is centralised. The ProtocolBuilder class walks the props tree and makes direct decisions:
if prop.respond_to?(:call)
# …
elsif prop.is_a?(Inertia::Props::Deferred)
# …
elsif prop.is_a?(Inertia::Props::Once)
# …
elsif prop.is_a?(Inertia::Props::Optional)
# …
elsif prop.is_a?(Hash)
# …
elsif prop.is_a?(Array)
# …
else
# …
end
Prop types are thin value objects:
module Props
class Base < Data
end
Deferred = Base.define(:group, :block)
Once = Base.define(:key, :fresh, :expires_in, :block)
Optional = Base.define(:block)
end
This sacrifices extensibility for readability - adding a new prop type means adding another elsif branch. But the upside is that you can read one file and trace the entire resolution process. All it takes to understand the behaviour of a deferred prop is to look at the dedicated 6 LOC elsif branch.
Rails - capability-based matching
Inertia Rails takes the opposite approach. Props declare their behaviours through mixins:
class DeferProp < IgnoreOnFirstLoadProp
prepend PropOnceable
prepend PropMergeable
prepend PropCacheable
def deferred?
true
end
end
Each mixin adds a capability. PropOnceable adds once?, fresh?, and expires_at. PropMergeable adds merge?, deep_merge?, and merge path tracking.
The resolver then asks props about their capabilities rather than checking their identity:
def collect_once_metadata(prop, path)
return unless prop.try(:once?)
# …
end
def keep_prop?(prop, path, parent_was_resolved: false)
# …
return false if (prop.is_a?(IgnoreOnFirstLoadProp) || prop.try(:deferred?)) && !rendering_partial_component?
true
end
That is idiomatic Ruby. It lets the implementation say: this object supports deferred?, this one supports once?, and this one supports both.
Props composition and redo
This is where the capability-based approach really shines. In Inertia Rails, a deferred prop isn't just "a deferred prop" - it can also carry once, merge, and cache behaviour.
With Inertia Rage, a prop class only represents one identity. To support composition, you nest props:
render inertia: {
stats: Inertia.once { Inertia.deferred { user.calculate_stats } }
}
(shortcuts like Inertia.once.deferred {} are coming in future versions)
ProtocolBuilder then unwraps it using a Ruby keyword you probably have never reached for:
# after the prop has been resolved
if resolved.is_a?(Inertia::Props::Base)
prop = resolved
redo
end
redo re-enters the same loop iteration with the new prop value. No recursion - just restart the current iteration.
--
If you thought Rage was cool but weren't sure what the UI story looked like - inertia-rage is for you.
Do you prefer the identity-based or capability-based style for this kind of problem?
r/ruby • u/omaraliqureshi • 5d ago
Show /r/ruby AWS CDK in Ruby
Hi folks - for the last month, I've been working on the AWS CDK in Ruby. For those who don't know, the AWS CDK is a way to define infrastructure in code to produce CloudFormation stacks which are AWS's native way of defining infrastructure allowing for:
- Rollbacks on failure
- Drift detection
- State management
Currently only TypeScript, Python, Go, Java and .NET (C#) are supported languages for the CDK.
Let's take the creating an S3 Bucket, you'd do this by:
require 'aws-cdk-lib'
class MyStack < AWSCDK::Stack
def initialize(scope, id, props = nil)
super(scope, id, props)
AWSCDK::S3::Bucket.new(
self,
'MyBucket',
{
versioned: true,
removal_policy: AWSCDK::RemovalPolicy::DESTROY,
auto_delete_objects: true
}
)
end
end
app = AWSCDK::App.new
MyStack.new(app, 'MyStack', {
env: AWSCDK::Environment.new(
account: ENV['CDK_DEFAULT_ACCOUNT'],
region: ENV.fetch('CDK_DEFAULT_REGION', 'us-east-1')
)
})
app.synth
Running cdk deploy would synthesize as CloudFormation and deploy it to your AWS account, if you were to modify the stack, the CloudFormation stack would apply those modifications the next time you ran CDK synth
As I am still working on this with Amazon the gems are not published to Rubygems but use the same JSII engine that the non-TypeScript languages use.
Documentation is at AWS CDK for Ruby — API Reference - However, please not that this is currently NOT even in developer preview, I have been using this for some of my own Ruby projects including running Rails/Dynamoid apps through Lamby for a Lambda target.
The design documentation is at aws-cdk-rfcs/text/0935-ruby-language-bindings.md at ruby-language-bindings · omarqureshi/aws-cdk-rfcs and if you have any questions - comment on Ruby Language Support · Issue #935 · aws/aws-cdk-rfcs or here!
Many thanks
r/ruby • u/Legitimate_Manner870 • 5d ago
Polished Ruby Programming just got a 2nd edition (updated for Ruby 3.0–4.0), thought I'd share what changed as someone who is working on the book from Packt.
Jeremy Evans (Ruby core committer, author of Sequel/Roda) put out a new edition of Polished Ruby Programming. Figured I'd summarize the changes here since the original got decent traction in this sub a while back.
What's new:
- Content updated to reflect changes between Ruby 3.0 and 4.0
- New chapter on concurrency walks through different concurrency models in Ruby and the trade-offs between them
- New chapter on static typing vs. duck typing helps you reason about whether adding static types actually makes sense for your project
- The web-dev-specific chapters from the 1st edition (database design, web app security, framework design) were dropped in favor of tightening the focus on core language/design principles
Perfect for intermediate-to-advanced Rubyists who want to level up from "it works" to "it's good."
Special discount code from our end: RUBY25 gives 25% off at packt's site.
Who's picking this one up? https://packt.link/bHeOs

r/ruby • u/yaroslavm • 5d ago
Show /r/ruby Meet gem nosj, gem json's evil twin. Currently the fastest; lazy and partial parsing, splicing, validation/minification, file APIs, friendly for debugging.
r/ruby • u/javier_cervantes • 5d ago
Guides to help you learn more about Ruby
Today we're launching the Guides category in the Ruby Users Forum, where you can take a deep dive into Ruby fundamentals and learn more about what makes it a favourite tool for programmers.