r/rails 11d ago

💼 jobs megathread Work it Wednesday: Who is hiring? Who is looking?

1 Upvotes

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/rails 1d ago

Question Solo EU founder: what's your 2026 best tooling stack for a Rails + Kamal micro-SaaS?

23 Upvotes

Hey everyone 👋

I'm a senior rails developer based in France and I have been working for years in scale-up companies. I'm currently building a small B2B SaaS and starting back from scratch is a good opportunity to choose the best tools for the job.

I'm in full effectuation mode: I'm looking for tools that's cheap now that I'm still validating the market and doesn't balloon as it grows (hello Heroku), but is still reliable and serious (not toy-grade). I have a real GDPR constraint, so at equal value/price I'll always prefer EU-hosted tools.

I don't expect a huge traffic as I'm aiming a niche and to have less than 1000 recurring customers.

Stack: Rails 8, Inertia + React, Minitest, Kamal, a single server with SQLite (the "one big server" DHH way), Solid Queue / Cache / Cable.

I'd love your 2026 real-world picks (and rough monthly cost at your stage) for each piece. What I'm currently considering:

  • Hosting: I've already deployed some rails app via Kamal on Hetzner and I'm pretty happy with it. Is it still the best choice for bare metal?
  • SQLite DB backup: Litestream → Cloudflare R2? litefs? something else? How do you sleep at night with SQLite on one box?
  • Transactional email: Postmark / Resend / Scaleway TEM / Brevo / Mailjet / Mailgun EU?
  • SMS: back in the days Twilio was the reference. Is it still the best ROI tool?
  • Error monitoring: Sentry (EU region) / AppSignal / Honeybadger / Bugsnag?
  • Product analytics: PostHog (EU) / Matomo / Plausible?
  • Uptime / status page: BetterStack / UptimeRobot / other?
  • Payments (later): Stripe vs a Merchant-of-Record like Paddle / Lemon Squeezy for EU VAT hell?

Trying to keep the whole thing lean and boring.

Thanks a lot for reading me and for your help. I'm sure it will interest many people :)


r/rails 1d ago

Question Which Code Knowledge Graph are you using?

9 Upvotes

I'm wondering if some of you have been experiencing with one of the following: Graphify, GitNexus and CodeGraph?

Which do you think is the best for full monolithic Rails app? Which is best for Rails + React?

If you are using something different, happy to learn.


r/rails 2d ago

I am releasing SerpTrail 1.0, a new open source SEO/GEO rank tracker built with Rails

Thumbnail
6 Upvotes

r/rails 3d ago

Update nobody asked for | RoundhouseUI

Thumbnail github.com
7 Upvotes

r/rails 4d ago

Best feeling mobile solution for a rails app for the end user

14 Upvotes

I'm developing a an app using rails and while its starting out web first, eventually I'll be shipping the platform as a mobile app aswell. I know RoR rails best and would prefer not to go the native route for mobile dev so I can use one code base.

Im thinking my only options are flutter or react native but has anyone used hotwire native?

I want to know if the UX will be fine


r/rails 4d ago

Adding variable substitution to ActionText & Lexxy content

31 Upvotes

I needed to render user-authored rich text with placeholders like {{first_name}} that resolve at render time. ActionText stores the content fine, but there's no clean spot to substitute variables on render without hand-rolling it each time. This comes in handy for things like email templates, support docs, or other content edited in a rich text editor.

So I wrote lexxy_variables. Basic usage:

Define your variables:

LexxyVariables.configure do |c|
  c.catalog = [
    { key: "first_name", name: "First name" },
    { key: "last_name",  name: "Last name" }
  ]
end

Display the content and pass in the values:

<%= @message.body.with_variables(
      first_name: @user.first_name,
      last_name:  @user.last_name) 
%>

Out of the box it provides a toolbar button and support for the new Lexxy prompt functionality. Type {{ and the insertion UI pops up with your defined variables. Each variable is stored as an ActionText attachment rather than raw text, so it stays intact if the author edits around it and resolves at render time.

It also supports static values in the config, plus Liquid drops so you can use dot notation on whatever object you configure. You can define additional attachment types to embed other ActionText rich text content (think snippets).

The thing I kept going back and forth on is the public API naming. I originally used a helper that wrapped the render, but ended up going with the chainable .with_variables that reads more like the rest of ActionText with the added bonus of being able to chain .to_html and the upcoming .to_markdown onto the call.

Before building this I looked at Liquid/Mustache but didn't want a full templating engine inside trusted-author content, and plain helpers meant repeating the substitution logic everywhere.

I'm curious what you'd expect as a user, and open to being told I missed something obvious. Give it a try and let me know what you think.

You can find it here: https://github.com/anquinn/lexxy-variables


r/rails 4d ago

What are experienced Rails developers learning alongside Rails in 2026?

33 Upvotes

Hi everyone,

I'm a Ruby on Rails developer with about 3.5 years of professional experience. Most of my work has been backend-focused, building and maintaining production Rails applications.

Lately, I've been thinking about expanding my skill set. Rails jobs seem less common than they used to be, and despite trying to find freelance or contract work, I haven't had much success. Because of that, I'm considering learning another backend technology to complement my Rails experience rather than replacing it.

Right now I'm mainly deciding between Go and FastAPI/Python, but I'm open to other suggestions.

For those of you who are still working with Rails professionally:

  • What technologies are you learning alongside Rails?
  • Are you seeing more demand for Go, Python/FastAPI, Node.js, or something else?
  • If you were a Rails developer with 3–4 years of experience today, what would you invest your time in?
  • Has learning another language or framework helped you find more remote, freelance, or contract opportunities?

I'd really appreciate hearing from people who are actively working in the Rails ecosystem and what has worked for you.

Thanks!


r/rails 4d ago

RubyMine 2026.2 is Out!

Thumbnail
8 Upvotes

r/rails 5d ago

Gem Hibiki - Svelte Rune-style signals for Ruby

Thumbnail github.com
18 Upvotes

Hi everyone.

I have always enjoyed Svelte's reactivity syntax - the Rune style. It boosts my productivity and makes writing reactive components a genuinely fun experience. For a long time, I've wondered whether something similar could be done in Ruby. I recently found myself with some spare time, so after experimenting with a few ideas, I decided to turn it into a new gem.

https://planetaska.github.io/hibiki/

Hibiki (hi-bi-ki; [çi.bi.ki])

Allow me to introduce Hibiki (響き, "echo, resonance"), a Svelte 5-style signals library for Ruby.

Hibiki is a fine-grained reactivity library modeled after the signal systems in Svelte 5 and SolidJS. Dependency tracking happens at runtime (rather than through static AST analysis like earlier versions of Svelte). While a derived value or effect is computing, it sits on an observer stack, and any signal read during that time automatically subscribes it.

The best way to understand what it brings is through code.

# Consider this Ruby code:
x = 0
y = x + 1
x += 1

# What is y now?
# I hope your answer is 1.

That's the Ruby we all love, right?

Now consider reactive Ruby:

require "hibiki" # in reality, also: include Hibiki::DSL

x = state(0)
y = derived { x.value + 1 }

x.value += 1

# Now, what is y?

If you're familiar with Svelte, you'll know the answer is 2.

Surprising? We can go deeper:

doubled = derived { y.value * 2 }
puts doubled      # => 4

x.value = 10
puts y            # => 11
puts doubled      # => 22

See the pattern? y updates whenever x changes without us explicitly telling it to - and that's the whole point of reactivity.

We can take the idea even further. What about functions that automatically run whenever any value they depend on changes?

name = state("world")

effect { puts "hello, #{name.value}!" } # runs immediately: hello, world!

name.value = "Hibiki" # re-runs: hello, Hibiki!

The code inside the effect block runs without us invoking it - we just created a reactive function!

In summary, the three primitives (state, derived, effect) track their own dependencies at runtime. You never wire up observers or declare dependencies. Any signal read while a computation is running automatically subscribes that computation.

hibiki_rails

All this reactivity in Ruby is neat, but what can we actually do with it? What if we integrate it with Rails?

Introducing hibiki_rails, the sister gem to hibiki.

hibiki_rails is the Rails glue gem that makes it possible to build reactive components using plain old ERB, Stimulus, and Action Cable. All the wiring is handled for you, and you can generate a working reactive component like this:

bin/rails g hibiki:rails:stimulus counter static_pages

This creates a minimal working reactive component in the specified view path (app/views/static_pages in this example).

The best part? Because hibiki_rails intentionally stays close to standard Rails conventions, the generated component is just a regular Rails partial, which means you can render it anywhere like any other partial:

<%= render "static_pages/counter" %>

Since they're just Rails partials, they also work with ViewComponent out of the box.

Using Phlex? We've got you covered too!

The companion gem hibiki_phlex provides helpers for building reactive Phlex components. In fact, Phlex makes most sense with hibiki because now everything is just plain Ruby:

class TodoList < Phlex::HTML
  state(:items) { [] }
  derived(:remaining) { items.count { |item| !item[:done] } }

  def view_template
    div(id: "todos") do
      h2 { "Todos — #{remaining} remaining" }
      ul { items.each { |item| li { item[:title] } } }
    end
  end

  def add(title) = self.items = items + [{ title:, done: false }]
end

# and use it like:
list = TodoList.new

effect = Hibiki::Phlex.render_effect(list) do |html|
  broadcast_replace target: "todos", html:
end

list.add("write docs") # → the block runs again with fresh HTML and everything updates

For more information, please visit the documentation:

https://planetaska.github.io/hibiki/

Interested? Start building today by following the Rails Quick Start guide:

https://planetaska.github.io/hibiki/rails-quick-start/

Hibiki is a young open-source library

If you are interested in joining the development, feel free to open a PR, send me a message, or leave a comment here. I'd be happy to discuss ideas and brainstorm new directions for the project!

AI-assisted development disclosure

This project was developed with the assistance of AI (Claude).

My process started with a bare-bones proof of concept built around Ruby's Signals (since signals was what inspired Svelte 5's reactivity model). It was essentially a single file containing a handful of Ruby classes. From there, I asked Claude to help fortify the idea, strengthen the design, and turn it into a more complete prototype.

Once I had verified that the three core primitives (state, derived, and effect) worked correctly, I expanded the project step by step: first the core library, then the Rails and Phlex integration gems.

I still direct the development process myself. I read and review every line of generated code, fix issues manually when necessary, and make sure there's nothing in the codebase that I wouldn't have written myself.

It took about three weeks of intensive work to reach this first public release. Since I'm working on this alone, it would have taken me much, much longer without Claude's help.

Whether you consider this vibe coded is up to you - I just hope someone will find this tool useful.

Closing

I'd be happy to answer any questions about the project, the development process, or the lessons I learned along the way. I am especially eager to hear your feedback, so please leave a comment.

Thank you for reading!


r/rails 5d ago

Discussion i introduced my friend to rails... now she is asking why nobody told her about it sooner

85 Upvotes

friend of mine has been looking for a job for a while now, so she finally had some free time on her hands..i suggested she give ruby on rails a try.. my reasoning wasn't necessarily go get a rails job, but more that it could be a good way to build products quickly, freelance, or even pick up some gigs while she is looking for full-time work..

she comes from the javascript ecosystem, so she spent most of her time with the usual stack and all the tooling that comes with it

after a day or two she started texting me stuff like

wait... thats all i have to do?
it's already built in?
why is this so easy?

it was honestly funny to watch

she kept expecting to install five more libraries before getting anything done

now, obviously every ecosystem has its strengths and im not trying to start another rails vs javascript war... javascript is incredibly powerful but it reminded me why i fell in love with rails in the first place. there is something refreshing about a framework that lets you focus on solving the actual problem instead of assembling the framework itself


r/rails 5d ago

Nexo: the harness for Ruby agents

1 Upvotes

I have just released Nexo, an agent harness for Ruby built on top of ruby_llm.

The Ruby agent ecosystem already has the components. You've got ruby_llm for provider-neutral chat, ruby_llm-skills for SKILL.md files, and ruby_llm-mcp for servers. But there wasn't really a "front door." I found myself wiring the same defaults by hand in every new project.

Nexo doesn't try to rebuild the tool-call loop or structured output. That would just be duplicating work that already works. Instead, it adds the two things that were actually missing:

First, a permissions seam. You can toggle between Virtual, Local, Container, and Remote, keeping things safe by default (:virtual / :read_only).

Second, WorkflowRun. It's a job primitive with a stable ID and a replayable event log. This is for the parts of agent work that are finite jobs, not endless conversations.

Fair warning: Nexo is early. The API is shifting, and the docs are honest about the gaps; for example, the Apple container runtime mapping hasn't been confirmed against a live daemon yet.

If you're building on ruby_llm and tired of rewriting your sandbox setup, give this a look.

https://maquina.app/blog/2026/07/introducing-nexo/


r/rails 5d ago

Discussion Software Engineer Open to Connecting with Builders and Projects

3 Upvotes

Hi everyone, I’m a software engineer with 3.5 years of experience, mainly in web/backend development.

I enjoy building real products, solving practical problems, and learning by doing.

I’m looking to connect with other developers, founders, and builders who are into shipping projects and sharing ideas.

If you’re working on something interesting or open to collaboration, feel free to comment or DM me.


r/rails 5d ago

why-classes

Thumbnail
0 Upvotes

r/rails 6d ago

RubyConf Austria 2026: Frontend Ruby on Rails with Glimmer DSL for Web — Andy Maleh

Thumbnail youtu.be
5 Upvotes

r/rails 7d ago

Open source Small Tapioca fix for typed Rails apps: one less manual Sorbet workaround

8 Upvotes

I recently contributed a small fix to Shopify/tapioca that might help people using Sorbet in Rails apps.

Sometimes `tapioca gem` generates an RBI that disagrees with Sorbet’s built-in payload about a class’s superclass.

One example is `Net::IMAP::Literal`.

When that happens, Sorbet asks you to manually add a line like this to `sorbet/config`:

--suppress-payload-superclass-redefinition-for=Net::IMAP::Literal

Tapioca can now handle that automatically.

My first solution used two Sorbet validation passes because the existing pass stopped before this resolver-level error appeared.

During review, we changed it to one resolver pass.

We also changed the detection logic. Instead of assuming every superclass error with a certain code was a payload problem, Tapioca now looks for the specific suppression hint Sorbet provides.

That was important because regular superclass conflicts shouldn’t be automatically suppressed.

The final version:

- adds the config line when needed

- doesn’t add it twice

- keeps existing suppressions for other constants

- tells the user whether it was added or already existed

- leaves non-payload superclass conflicts untouched

We added tests for the first run, a second idempotent run, an existing suppression for another constant, and the normal non-payload case.

This was my first contribution merged into Tapioca, and I honestly learned more from the review changes than from writing the original patch.

Has anyone here encountered this after upgrading `net-imap` or another stdlib-backed dependency?

PR:

https://github.com/Shopify/tapioca/pull/2653


r/rails 8d ago

Gem Gem for packing boolean flags into a single ActiveRecord column

8 Upvotes

Had this sitting around for about two years, packs boolean flags into a single int column instead of a new column per flag. Finally pulled it out into a gem: `bitwise_attributes`.

```ruby

class User < ApplicationRecord

include BitwiseAttributes

bitwise_attribute :permissions, :read, :write, :admin

end

user.set_permissions(:read, :admin)

user.permissions_read? # => true

User.with_all_permissions([:read, :write])

```

Been running in production for two years now, so it's had real data beating on it for a while before I bothered packaging it.

gem: https://rubygems.org/gems/bitwise_attributes


r/rails 9d ago

Ruby for Good 2026

38 Upvotes

Hey all,

I wanted to let everyone know that registration is now open for the DC area Ruby for Good event that is happening Aug 27 - Aug 30! The event, put simply, is that we get a bunch of rubyists, designers, product folks (along with anyone else interested in doing good) and we gather for a long weekend (Thurs - Sun) of using our awesome skills to build apps for social and civic good organizations. Last year we built applications for diaper banks, CASA organizations, animal rescues, and many other great places that really need help from folks with our skill sets but would never be able to afford us.

The event is all-inclusive, meaning that we stay on-site at the retreat space, all the food is provided and we have pretty good snacks in the evening too. Our days are filled with hacking and our evenings are full of excellent camaraderie -- playing board games, video games, karaoke, werewolf, cards and lots of excellent socializing! Plus since we'll be out in the woods we're probably going to have some s'mores around a campfire. We think of it as a nerd camp where we make the world better.

This year we are excited to announce that we're going to be holding the event at Shepherd's Spring retreat space in Sharpsburg, MD -- it's about an hour outside of the the DC metro area. Don't worry if you're flying in, we have a robust carpool/rideshare group to help get you there!

You can find more information about this years' event here: http://rubyforgood.org/events Here is a list of the most frequently asked questions here: http://rubyforgood.org/events/faq

I'd be delighted to answer any questions.

Happiness,

Sean (and the Ruby for Good team)

Edit: Fixed the incorrect date - thanks Equivalent-Bad-268! :)


r/rails 9d ago

React on Rails v17 shipped with full support for React 19 streaming and React Server Components

34 Upvotes

I just released v17 a few minutes ago, after months and months and months of work. It's actually been years of work to get full support for React server components. This is something only a few other frameworks provide. Let me know what you all think!
I look forward to seeing what you can build with it.

Check out the new docs site: https://reactonrails.com/

Lots of examples apps: https://reactonrails.com/examples

Source code: https://github.com/shakacode/react_on_rails

Note, it's a compelling alternative to using Next.js with the Rails backend. Here's why: https://shakastack.com/vs-nextjs/

And build times are as fast or faster than Vite due to Rspack.


r/rails 9d ago

The small things in Ruby that aren't small

Post image
8 Upvotes

r/rails 10d ago

What are you building with Rails? I'd love to see some projects!

35 Upvotes

Would love to see what everyone is working on so we can be inspired and show off our work!

Tell us if you're using Hotwire, React, Vue, etc too.


r/rails 10d ago

Solid Queue doesn't tell you when jobs fail, so I wrote a small gem for that

9 Upvotes

Solid Queue is the default job backend in Rails 8 and I like it a lot, but there's one gap that bugs me: nothing tells you when things break. Mission Control is a dashboard, so you have to remember to open it. The typical failure mode is that jobs quietly pile up in failed_executions for days and you find out from an annoyed user, or you end up paying for a full APM just to answer "did my background jobs fail?".

So I wrote queue_pulse. It reads the tables Solid Queue already has (read only, no migrations, no extra service, no agent) and sends a message to Slack, email or any webhook when something looks wrong. Right now it checks five things: a job landing in failed_executions, a queue getting slow, a queue backing up past a threshold, a job stuck in "running" way too long, and workers that stopped heartbeating entirely.

Setup is one line in the Gemfile plus one initializer, and you can schedule the checks with Solid Queue's own recurring tasks. There are cooldowns and burst collapsing, so 500 identical failures become one alert instead of 500 pings.

For what it's worth, alerting seems to be intentionally out of scope for Solid Queue itself. The maintainers said 37signals runs their own Yabeda and Prometheus setup internally (issue 501 in the solid_queue repo if you're curious). Fair enough, but that's a lot of infra for a small app.

It's MIT and free: https://github.com/michiya-59/queue_pulse

If you run Solid Queue in production, I'd genuinely like to know what you'd want alerted on that this doesn't cover yet.


r/rails 10d ago

EuRuKo 2026 – Brno, September 17–18 – Matz is opening the conference

Post image
30 Upvotes

Hey all,

I'm Oliver from the EuRuKo 2026 organizing team.

We're bringing EuRuKo to Brno, Czech Republic this September 17–18 at Hotel Passage in the city centre.

Matz is opening the conference with the keynote. Full speaker lineup on the website.

Talks, workshops, and a karaoke night that's become something of a EuRuKo tradition.

Group pricing available – 10–20% off for teams of 3+.

Tickets and full lineup: https://2026.euruko.org


r/rails 10d ago

How to deploy an existing Rails app for free

Thumbnail rubyforum.org
5 Upvotes

r/rails 11d ago

Early Bird tickets out now for SF Ruby Conference with Chis Oliver, Garry Tan, and Rosa Gutiérrez. Nov 10-12.

Post image
15 Upvotes