stepper_motor
is a durable step workflow engine for Rails
class SignupJourney < StepperMotor::Journey
step :after_signup do
WelcomeMailer.welcome_email(hero).deliver_later
end
step :remind_of_tasks, wait: 2.days do
ServiceUpdateMailer.two_days_spent_email(hero).deliver_later
end
step :onboarding_complete_, wait: 15.days do
OnboardingCompleteMailer.onboarding_complete_email(hero).deliver_later
end
end
Think of it at as a minimum viable subset of Temporal, just built using the concepts from Rails you already know and use daily. stepper_motor allows you to create journeys consisting of discrete steps. A step gets performed atomically, with fine-grained locks placed around its execution. A specific step from a specitic Journey will only be performing once and inside one thread. You can have as many Journeys as you need, attached to various models in your application - and run them concurrently.
Journeys are a perfect abstraction when you need to tackle irreversible steps in sequence, such as purchases, refunds, chargebacks... Attrition control (churn emails) and drip email campaigns are another perfect use of StepperMotor.
And best of all: the tech required to use it is alreay inside your majestic monolith. There is no network, gRPC, special daemon processes or extra Docker containers – just standard ActiveJobs and ActiveRecords.
Give it a spin
stepper_motor is a Rails engine. Install it like you would any other engine:
$ bundle add stepper_motor
$ bundle install
$ bin/rails g stepper_motor:install
$ bin/rails db:migrate
...and start defining your journeys.
Editions
Basic | Pro (coming 2025) | Super (coming 2025) | |
---|---|---|---|
Price | Free | 200$/y | 1000$/y |
License | LGPL | Commercial | Commercial |
Durable execution with partial locking | Yes | Yes | Yes |
No wrapping DB transaction | Yes | Yes | Yes |
ActiveJob integration | Yes | Yes | Yes |
Step execution records | - | Yes | Yes |
Concurrently running journeys | Unlimited | Unlimited | Unlimited |
Access to private repositories | - | - | Yes |
Assistance from founder | Paid | Paid | 16 hours yearly |
Admin UI | - | Yes | Yes |
UI: Step validation | - | Yes | Yes |
UI: Canceling a journey. | - | Yes | Yes |
UI: Rescheduling a step | - | Yes | Yes |