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