Skip to content
railsengines.com

The argument

A feature is not a product.

There is a pattern going around: someone rebuilds a SaaS product over a weekend, ships it as its own Rails app, and puts it behind its own domain. Now they have a second deployment, a second database, a second auth system, and a second thing to patch when a CVE lands.

The rebuild was the easy part. The operational surface is what costs you, and it costs you every week from then on. Testimonials, a live chat widget, a feedback board — none of these are products. They are features of the product you already run, and they want to live next to your users, your accounts, and your data.

Mount them instead

A Rails engine is a miniature application that plugs into a host app. It brings its own models, controllers, views, migrations and routes, and it mounts at a path you choose. Your app keeps one deploy, one database, one session, one set of credentials.

# Gemfile
gem "testimonials", github: "yshmarov/testimonials"

# config/routes.rb
mount Testimonials::Engine, at: "/testimonials"

That is the whole integration. The engine's tables land in your schema when you run its migrations. Its controllers inherit from your ApplicationController if you configure it to, so current_user just works. The widget renders with your layout.

What this directory is for

Finding these engines is the hard part. They are scattered across GitHub, often unreleased as gems, usually undocumented beyond a README. This directory collects them, shows you what each one looks like before you install it, and — most usefully — maps each one to the SaaS product it stands in for.

Start from the invoice. Find the line item you want gone, see what covers it, look at the screenshots, and mount it.

How submissions work

Anyone with an account can submit an engine: a repo link, a description, screenshots, and which product it replaces. Submissions are not public immediately. An admin reads each one, checks the links resolve and that it is genuinely a mountable engine, then approves it or sends it back with a note about what to fix.

Members can rate engines out of five, discuss them, and collect them into playlists — a starter stack, an internal-tools set, a list of things to evaluate next sprint.

What counts as an engine here

  • It is a Rails engine, mountable into a host application.
  • The source is public and the repository link resolves.
  • It does something you would otherwise pay a third party for, or it is close enough that the comparison is useful.

Standalone Rails apps that happen to be open source do not belong here, however good they are. If it cannot be mounted, it is not solving the problem this directory exists to solve.

Questions

What counts as a Rails engine for this directory?
It must be mountable into a host Rails application, have a public repository whose link resolves, and do something you would otherwise pay a third party for. Standalone Rails apps do not qualify, however good they are.
Does mounting an engine slow my app down?
An engine runs in the same process as the rest of your app, so a call into it is a method call rather than a network request. In practice mounting is usually faster than the hosted product it replaces, because there is no round trip.
How do submissions get approved?
An admin reads every submission, checks the links resolve and that it is genuinely a mountable engine, then approves it or sends it back with a note about what to fix.