README.md

<img src="https://github.com/ash-project/reactor/blob/main/logos/reactor-logo-light-small.png?raw=true#gh-light-mode-only" alt="Logo Light" width="250">
<img src="https://github.com/ash-project/reactor/blob/main/logos/reactor-logo-dark-small.png?raw=true#gh-dark-mode-only" alt="Logo Dark" width="250">

# Reactor

![Elixir CI](https://github.com/ash-project/reactor/actions/workflows/elixir.yml/badge.svg)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Hex version badge](https://img.shields.io/hexpm/v/reactor.svg)](https://hex.pm/packages/reactor)

Reactor is a dynamic, concurrent, dependency resolving saga orchestrator.

Woah. That's a lot. Let's break it down:

- **Saga orchestrator** A [saga][saga pattern] 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][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.

[saga pattern](https://learn.microsoft.com/en-us/azure/architecture/reference-architectures/saga/saga)

## Sponsors

Thanks to [Alembic Pty Ltd](https://alembic.com.au/) 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`:

```elixir
def deps do
  [
    {:reactor, "~> 0.9.0"}
  ]
end
```

## Documentation

Documentation for the latest release will be [available on
hexdocs](https://hexdocs.pm/reactor) and for the [`main`
branch](https://ash-project.github.io/reactor).

## Contributing

- To contribute updates, fixes or new features please fork and open a
  pull-request against `main`.
- Please use [conventional
  commits](https://www.conventionalcommits.org/en/v1.0.0/) - this allows us to
  dynamically generate the changelog.
- Feel free to ask any questions on the `#reactor` channel on the [Ash
  Discord](https://discord.gg/D7FNG2q).

## Licence

`reactor` is licensed under the terms of the [MIT
license](https://opensource.org/licenses/MIT). See the [`LICENSE` file in this
repository](https://github.com/ash-project/reactor/blob/main/LICENSE)
for details.

[saga pattern]: https://learn.microsoft.com/en-us/azure/architecture/reference-architectures/saga/saga
[dag]: https://en.wikipedia.org/wiki/Directed_acyclic_graph