README
View Source

Reactor
Reactor is a dynamic, concurrent, dependency resolving saga orchestrator.
Woah. That's a lot. Let's break it down:
- Saga orchestrator A saga is a way of providing transaction-like semantics across multiple distinct resources.
- Dependency resolving reactor allows you to describe the dependencies between your saga steps using arguments which are converted into a DAG and used to compute execution order.
- Concurrent unless otherwise specified reactor will run as many steps as possible concurrently whilst taking into account the results of the dependency resolution.
- Dynamic whilst you can define a reactor statically using our awesome DSL, you can also build workflows dynamically - and even add steps while the reactor is running.
Sponsors
Thanks to Alembic Pty Ltd for sponsoring a portion of this project's development.
Installation
The package can be installed by adding reactor
to your list of dependencies in mix.exs
:
def deps do
[
{:reactor, "~> 0.15.6"}
]
end
Documentation
Our documentation is organized to help you find exactly what you need:
🎓 Learning Reactor - Tutorials
Step-by-step guides that teach Reactor through hands-on practice:
- Getting Started - Build your first Reactor
- Recursive Execution - Advanced iterative patterns
🔧 Solving Problems - How-to Guides
Practical solutions for real-world scenarios:
- Payment Processing - E-commerce workflows
- Data Pipelines - ETL orchestration
- Testing Strategies - Testing approaches
📚 API Reference
Complete technical reference:
- DSL Documentation - Complete DSL syntax (auto-generated)
- HexDocs - Generated API documentation
- Latest (main branch) - Development docs
💡 Understanding Reactor - Explanations
Conceptual guides about how and why Reactor works:
- Core Concepts - Sagas, DAGs, compensation
- Architecture - Internal design
- Ecosystem - Integration patterns
Quick Start: New to Reactor? Start with the Getting Started tutorial!
Contributing
- To contribute updates, fixes or new features please fork and open a
pull-request against
main
. - Please use conventional commits - this allows us to dynamically generate the changelog.
- Feel free to ask any questions on the
#reactor
channel on the Ash Discord.
Licence
reactor
is licensed under the terms of the MIT
license. See the LICENSE
file in this
repository
for details.