jimsynz

jimsynz

Ash Core Team

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

Where Next?

Popular in News & Updates Top

hugobarauna
Explore Livebook 0.9’s new features: deploy notebooks as user-friendly apps, star & access recent notebooks, and collapse sections. ...
New
lawik
It is my pleasure to announce the official release of the new generation of NervesHub with the v2.0.0 release. Containers are tagged. :p...
New
fhunleth
We recently released Nerves 1.4.0 and an update to the Nerves new project generator, nerves_bootstrap. The biggest change is support for ...
New
fhunleth
It looks like it’s finally safe to announce that Nerves supports Erlang/OTP 26 and Elixir 1.15! We’ve updated dozens of Nerves and close...
New
mobileoverlord
New versions of the Kiosk systems are out. These systems update official Nerves systems with a local web browser for rendering user inter...
New
bartblast
Hologram’s journey just took a significant leap forward: Curiosum is coming on board as the Main Sponsor, and I’m joining their team to w...
New
hugobarauna
Thanks to advancements in the overall Numerical Elixir ecosystem, Livebook v0.11 includes a highly improved integration with Whisper. To...
New
jjcarstens
The Raspberry Pi is a very popular hardware platform for Nerves users and the official systems are getting an upgrade! :tada: :beers: Wh...
New
sorentwo
Oban.Web is a view of Oban’s inner workings that you host directly within your Phoenix application. Powered by Oban Metrics and Phoenix L...
New
bartblast
Hey! For those following Hologram’s progress… I’m excited to share that I’ve just published the official roadmap for Hologram. You can ch...
New

Other popular topics Top

Harrisonl
We have an ECS cluster with 4 services, where each task joins a single cluster, via discovery ECS discovery service. Currently when I de...
New
ovidiubadita
Hey all, I discovered Elixir and I love it. I always wanted to learn a functional programming and I intended to go for Haskell, but afte...
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New
AngeloChecked
What learn first? Rust or Elixir Hi Elixir community! I’m here because i want learn a new language. I’m a junior developer and mainly i ...
New
stefanluptak
Hello everybody, usually, I use a 29" ultra-wide monitor for VSCode which can easily accomodate explorer (files panel) + file with code ...
New
gausby
I asked this very same question on twitter and got some interesting feedback, but I thought it would be a good question to ask here as we...
1207 39297 209
New
freewebwithme
Using vs code and installed ElixirLS: support and debugger. And I got an error popped up on start up says Failed to run ‘elixir’ comma...
New
jason.o
In the code below, if the create action is not set to accept “extra_key” as an input, it errors out with a message shown above. Is there ...
New
rms.mrcs
Hi, I need to transform a list of numbers into a map where the keys are the indexes and the values are the original values of the list. ...
New
romenigld
I am trying to run a deploy with docker and I successfully runned with this command: docker build -t romenigld/blog-prod . but when I t...
New

We're in Beta

About us Mission Statement