Reactor 1.0 Released - Saga Orchestration for Elixir

It’s been a long time coming, but Reactor has finally reached 1.0.

For those unfamiliar, Reactor is a dynamic, concurrent, dependency-resolving saga orchestrator. In practical terms: it lets you define complex workflows as a series of steps with automatic dependency
resolution, concurrent execution, and built-in compensation/rollback when things go wrong.

defmodule CreateOrder do
  use Reactor

  input :customer_id
  input :items

  step :validate_inventory do
    argument :items, input(:items)
    run fn %{items: items} -> InventoryService.check(items) end
  end

  step :charge_payment do
    argument :customer_id, input(:customer_id)
    argument :items, result(:validate_inventory)
    run fn args -> PaymentService.charge(args.customer_id, args.items) end
    undo fn args, _result -> PaymentService.refund(args.customer_id) end
  end

  step :create_shipment do
    argument :payment, result(:charge_payment)
    argument :items, result(:validate_inventory)
    run fn args -> ShippingService.create(args) end
  end

  return :create_shipment
end

Why 1.0 now?

Honestly, Reactor has been production-ready for quite some time. The 1.0 version was prompted by a couple of small breaking changes that needed a major version bump anyway, so it felt like the right moment
to make the stability commitment official.

Highlights since the early days

  • Concurrent execution - Steps run in parallel where dependencies allow, with configurable concurrency limits
  • Composition - Embed sub-reactors within reactors
  • Control flow - switch, map, group, and around steps for complex workflows
  • Middleware - Hook into the execution lifecycle (including telemetry out of the box)
  • Guards and conditions - Conditional step execution with where and guard
  • Mermaid diagrams - Visualise your workflows
  • Backoff support - Configurable retry strategies
  • Full undo support - Including after successful completion

Links

Questions and feedback welcome here or in the reactor channel on the Ash discord Ash Framework

23 Likes