geneva_drive
Buy a license

Your Rails app does not need Temporal, just a great workflow engine.

And geneva_drive is the one you want.

Durable execution has become a reason to bolt a second runtime onto a perfectly good Rails app: another service to run, another language to hire for, another dashboard nobody checks — all to track state your database was already built to hold. geneva_drive paves you a shorter road. Just use Rails. geneva_drive uses your database, models and the ActiveJob queue you already have, and ships the moment you bundle.

You declare a workflow as a sequence of discrete steps. Each one begins and ends at rest — committed, resumable, safe to retry. A failure stops the mechanism where it stands instead of unwinding it, and when the pin comes around again the work resumes from exactly that frame. No double sends, no orphaned state, no duplicate jobs.

Buy a license Read the manual

THE ENTIRE INTEGRATION

A class, some steps, and the queue you already run.

No sidecar process. No gRPC. No workflow SDK with its own opinion about what a function is. You write Ruby, the steps commit to your database, and ActiveJob does the rest.

class SignupWorkflow < GenevaDrive::Workflow
  step :send_welcome_email do
    WelcomeMailer.welcome(hero).deliver_later
  end

  step :send_reminder, wait: 2.days do
    ReminderMailer.remind(hero).deliver_later
  end

  step :complete_onboarding, wait: 7.days do
    hero.update!(onboarding_completed: true)
  end
end

What you do not have to run

No gRPC

No protobufs. No codegen step. No half-abandoned gem segfaulting you because it spun up a thread you never asked for. And your app already runs an HTTP server, thank you.

No extra database

You already run one. You already back it up. You already know how to query it. SQLite? Fine. MySQL? Perfect. Postgres? Sublime. SELECT is the debugger.

No extra services

You never asked for a zoo, so why would you need a ZooKeeper? Do you really need sidecars, replicas, quorums, and a few ops people just for your durable execution? The infra you already run is fine!

Get started (LGPL)

$ bundle add geneva_drive
$ bin/rails generate geneva_drive:install
$ bin/rails db:migrate

The generator adds two tables and a mountable engine. Your first workflow can ship in the same pull request.

COMMERCIAL LICENSE

The Admin makes it better

Live workflow views, a timeline inspector for every step, per-execution backtraces and job details — a Rails engine you mount, with no dependencies beyond Rails and geneva_drive itself.

Buy a license