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
- reactor v1.0.0 — Documentation
- GitHub - ash-project/reactor: Reactor is a dynamic, concurrent, dependency resolving saga orchestrator.
- Your First Reactor — reactor v1.0.0
Questions and feedback welcome here or in the reactor channel on the Ash discord Ash Framework






















