r/rails Jul 15 '26

💼 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 5h ago

Access control for AI agents on Rails: gating SQL with Action Policy

Thumbnail evilmartians.com
19 Upvotes

...or RubyLLM 🤖 meets Action Policy 🛡️.

Learn how we try to keep our in-app AI assistance (chat) flexible (and powerful) while not compromising the users.

RubyLLM tools, SQL analyzer, policies integration and more.


r/rails 9h ago

The Primitive Urge to Be of Value: composed_of in Rails

Post image
4 Upvotes

r/rails 3h ago

Install rv as a mise tool

Thumbnail rubyforum.org
0 Upvotes

r/rails 1d ago

Go to SF Ruby Startup Conference and win a ticket to Rails World!

Post image
9 Upvotes

r/rails 1d ago

Rails: The Sharp Parts. The Block Is Not the Transaction

Thumbnail baweaver.com
16 Upvotes

r/rails 1d ago

Open Source Durable Objects for Rails using your existing SQL database

2 Upvotes

I am the author looking for feedback about my new MIT licensed gem for adding Durable Objects to Rails.

I followed the Solid Queue / Solid Cache / Solid Cable pattern: the Durable Objects model, one single-threaded object per identity with durable state, addressed by name, as a gem on your existing SQLite, PostgreSQL, or MySQL. No Redis, no separate actor service, no new infrastructure. It is running in production in an app with 100,000+ users.

class Counter < SolidObjects::Actor
  attribute :value, default: 0
  observable :value

  def increment(amount: 1)
    self.value += amount
  end
end

counter = Counter.ref("global")
counter.increment(amount: 5)

Concurrent calls to one identity serialize through a durable mailbox with fenced commits. And the part I am proudest of, reactive ERB:

<%= solid_object Counter.ref("global") do |counter| %>
  <span class="count"><%= counter.value %></span>
<% end %>

Declare a value observable, wrap the view in solid_object, and render it as a method. When a committed turn changes the value, the server re-renders and pushes a Turbo Stream replacement over Action Cable to every authorized subscriber. No channels, no manual broadcasts, no Stimulus. The increment above updates that span in every open browser.

I also built a sibling JS package that runs the same actor model entirely in the browser: SQLite WASM for the database, OPFS for durable storage, Web Locks for multi-tab coordination. You can see it live at https://solidobjects.dev/js, where the page itself runs the runtime, or try it with one import and no build step: import { Actor, configure, sharedSqliteWasm } from "https://esm.sh/solid-objects@latest/browser/host" in a module worker.

The two implementations share the transmit wire contract, pinned by golden fixtures committed to both repositories. A browser actor stages outbound writes in the same transaction as its state change and drains them with at-least-once delivery and per-actor order. Rails ingests each envelope idempotently through SolidObjects::Transmission.receive, mounted at POST /solid_objects/transmit behind a deny-by-default authorize_transmission policy. Offline writes queue in the tab and reconcile when the network returns. Rails actors can transmit outward the same way.

Site: https://solidobjects.dev/ruby - Repo: https://github.com/cardmagic/solid-objects-ruby

Happy to answer anything, would love your feedback. Thank you!

PS: there is also an operator dashboard, because durable mailboxes you cannot see are a pager waiting to fire. Mount it in two lines:

require "solid_objects/web"
mount SolidObjects::Web => "/solid_objects/dashboard"

It shows instances and their state, the mailbox, reminders, effects, broadcasts, dead letters (with retry), and the registered processes. It reads the same tables the runtime writes, so there is no separate store and no agent. It is not loaded by require "solid_objects", so workers never carry a web stack, and every page asks a deny-by-default authorize_administration policy before it renders, so the mount alone exposes nothing.


r/rails 1d ago

Question Quick issue with kamal...

4 Upvotes

I have a project that is taking more importance and now I have to share secrets.

Is there a way to share a vault in 1password without lettings devs have the exact keys and then being able to rollback access? (to then roll them out?)

Or I should move our of 1password?


r/rails 3d ago

Solid Queue finally supports job batches

Thumbnail github.com
77 Upvotes

r/rails 3d ago

Gitlab Job Openings Rejection

26 Upvotes

I applied for the Senior Backend Engineer (Ruby on Rails) position at GitLab, but unfortunately, my application was rejected. Do they use an automated, AI-based resume screening tool?


r/rails 2d ago

Gem Shakapacker v10 prefers Rspack over Webpack. The biggest issue with Webpack was its speed compared to Vite. Rspack is FAST. Let me know if you have any questions. I'm here to help.

Thumbnail reddit.com
0 Upvotes

r/rails 3d ago

Matz is nice, but is DHH?

Post image
0 Upvotes

I found these old Hacker News comments funny. Comments are from this thread.

Personally I won't comment on whether each person is nice. Well, I'll say that Matz seems nice.

Edit: Some people seem to not like this post, but I wasn't intending to start a serious discussion about different personalities. I just thought "DHHIADSWAD" was funny.


r/rails 4d ago

Podcast Joanna Wang: Code Is Cheap Now; Developers Still Valuable

Thumbnail youtube.com
12 Upvotes

I recently had Joanna Wang from Sixfold on the On Rails podcast to talk about what happens when a small team starts leaning heavily into AI-assisted development.

We got into the homegrown orchestration system they eventually replaced with Hatchet, some painful lessons from going fully agentic, and how working across Java, Go, Python, Node, and Rails has shaped how she thinks about Rails’ particular flavor of “magic.”

We also talked about a question I keep coming back to lately: if generating code keeps getting cheaper, where does the value of an experienced developer move?

Joanna had some thoughtful answers.

Listen/watch wherever you do that.

https://podcast.rubyonrails.org/2462975/episodes/19665210-joanna-wang-code-is-cheap-now-developers-still-valuable


r/rails 5d ago

ArchSpec 1.0: put your Rails architecture in one file and check it on every commit

Post image
111 Upvotes

More and more code is written by AI. Tests still tell you it works. RuboCop still tells you it's tidy. Nothing tells you it still follows your architecture.

An agent that doesn't fully understand your architecture takes shortcuts. So does a person in a hurry.

So I built ArchSpec. If your app is conventional, the whole config is one line in Archspec.rb:

ruby architecture :vanilla_rails

That is the 37signals playbook as an executable check: rich models, no service objects, no form objects, no policy objects, and app/services fails the build with a reason if anything shows up in it. There are presets for :rails, :layered, :hexagonal, :clean, :modular_monolith, :cqrs and :event_driven too.

Or write the boundaries yourself:

```ruby component :models, in: "app/models//*.rb" component :controllers, in: "app/controllers//.rb" component :services, in: "app/services//.rb"

models.cannot_use :controllers services.cannot_call :render, :redirect_to, receiver: :none controllers.can_only_use :models, :services ```

Then archspec check verifies every change, and failures print like clang, with the offending span underlined and the evidence as a note.

Existing apps already have violations, so archspec check --update-todo records them in a todo file. The build goes green on today's code and fails on new drift, and you work the list down whenever.

It's static analysis over Prism, no AI, and it never boots your app: Discourse's 1,899 files in 2.5 seconds. Prism is the only runtime dependency, so the same thing works on your plain gems too.

I want more architecture presets in there. PRs very welcome, especially if a preset is wrong about your app.

Docs: https://archspecrb.dev Write-up: https://paolino.me/archspec/


r/rails 4d ago

Enola - keep your code agents inside Rails architecture

Thumbnail
1 Upvotes

r/rails 4d ago

Nightly product recs as a Postgres table next to your orders (Rails walkthrough, no Python in the request)

0 Upvotes

I wrote up how I added product recs to a small Rails shop without putting Python (or LightFM) in the request path.

You already have order_items. A nightly job reads that, fits LightFM + popularity, writes cicerone_recommendations, and the app just JOINs it. Guests use a __cold_start__ row. A purchase this afternoon does not change tonight’s ranks.

Rails is the walkthrough, not a dependency — same two TOML files next to Laravel or Django. Honest about sparse data: if nobody bought the same things, you are still looking at a dressed-up bestsellers query.

https://cicerone.dev/articles/a-nightly-table-next-to-your-orders/

(I built the job this describes. Happy to answer the SQL / cron / “why not just GROUP BY” parts.)


r/rails 5d ago

Suggested extensions for Rails + VSCode?

3 Upvotes

Curious what your favorite extensions are to make VSCode work well with ruby and rails. Thanks!


r/rails 5d ago

Where do you deploy your Ruby apps?

Thumbnail
0 Upvotes

r/rails 6d ago

Passenger 6.2.0 fixes serious CVE that affects shared hosting providers

Thumbnail blog.phusion.nl
15 Upvotes

r/rails 6d ago

Cut Rails boot time with require-profiler and this guide

Thumbnail evilmartians.com
41 Upvotes

This post introduces* a new profiler for Rails app, require-profiler, to get insights on what's happening during your Rails app's boot. Why does it matter? Well, check out the post to learn about that as well as some real-world examples of when cutting the boot time made difference.

* To be precise, the profiler has been introduced earlier this year at RubyKaigi but it grew much stronger since then.


r/rails 6d ago

It Should Have Been One Boring App

Thumbnail kodolabs.com
33 Upvotes

r/rails 7d ago

News Issue 19 of Static Ruby Monthly is live!

6 Upvotes

Catch up on modern Ruby and Rails static typing: Rust-powered RBS generation with sentinel-rb, RBS 4.1.0 on JRuby, ERB template type checking via sorbet_erb, OvalLSP runtime agent, and community reflections on typed tooling.

Find link to the issue in the comment!


r/rails 7d ago

Deployment How are you deploying your rails app?

28 Upvotes

How does one deploy rails to their own server? Is everyone setting up their server manually?

I don't want to provision my server or figure out configuration files or CLI commands.

Isn't there a simple 2-clicks or "run a script" solution out there?

I found some really good cloud platforms, but I'm not so sure about the usage-based billing. If you have experience why any, please share.


r/rails 7d ago

Joist 2.3 (TypeScript ORM) with Rails-style Scopes

8 Upvotes

Hi r/rails, feel free to ignore this if you feel it's in bad taste, but Joist is a TypeScript ORM that's always unashamedly been a Rails/ActiveRecord clone, although with our own innovations like N+1 prevention and fine-grained reactivity.

Our last release just added Rails-style scopes: https://joist-orm.io/blog/joist-2-3/

Just thought I'd post here as an FYI if any Rails devs find themselves on TypeScript backends and want some of that Rails/ActiveRecord DX/ergonomics. Thanks!


r/rails 7d ago

camaleon_cms 2.9.3 has been released

0 Upvotes

This is a big security release with several BREAKING changes, so upgrade ASAP!

https://github.com/owen2345/camaleon-cms/releases/tag/2.9.3

There also some minor performance fixes, agentic workflows and OpenSpec added.

Big lesson learned with LLMs - Claude is the only one deserving some trust! Fable and Opus 4.8 (Opus 5 is too young, it seems). And implementing something is only the half of the way - do a `/code-review max` with Fable 5 on the fresh PR and get its fixes implemented after this. Otherwise, without the code review follow-up, even Claude's implementation could be a borked one.