{"id":29629264,"url":"https://github.com/ash-project/reactor","last_synced_at":"2025-07-21T09:36:04.327Z","repository":{"id":153522716,"uuid":"629719410","full_name":"ash-project/reactor","owner":"ash-project","description":"Reactor is a dynamic, concurrent, dependency resolving saga orchestrator.","archived":false,"fork":false,"pushed_at":"2025-07-18T20:36:24.000Z","size":1230,"stargazers_count":107,"open_issues_count":7,"forks_count":17,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-07-20T16:29:22.331Z","etag":null,"topics":["concurrency","elixir","graph","saga"],"latest_commit_sha":null,"homepage":"https://ash-hq.org/","language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ash-project.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":["zachdaniel","jimsynz"]}},"created_at":"2023-04-18T22:23:45.000Z","updated_at":"2025-07-17T23:01:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"70c1e807-aecb-4602-8803-19545b3f71e0","html_url":"https://github.com/ash-project/reactor","commit_stats":{"total_commits":159,"total_committers":6,"mean_commits":26.5,"dds":0.5786163522012578,"last_synced_commit":"cd41d3834ba9d8c487d22eeb3bfc1acfb9ef9310"},"previous_names":[],"tags_count":46,"template":false,"template_full_name":null,"purl":"pkg:github/ash-project/reactor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ash-project%2Freactor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ash-project%2Freactor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ash-project%2Freactor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ash-project%2Freactor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ash-project","download_url":"https://codeload.github.com/ash-project/reactor/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ash-project%2Freactor/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266276329,"owners_count":23903987,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["concurrency","elixir","graph","saga"],"created_at":"2025-07-21T09:36:01.490Z","updated_at":"2025-07-21T09:36:04.318Z","avatar_url":"https://github.com/ash-project.png","language":"Elixir","funding_links":["https://github.com/sponsors/zachdaniel","https://github.com/sponsors/jimsynz"],"categories":[],"sub_categories":[],"readme":"\u003cimg 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\"\u003e\n\u003cimg 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\"\u003e\n\n# Reactor\n\n![Elixir CI](https://github.com/ash-project/reactor/actions/workflows/elixir.yml/badge.svg)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Hex version badge](https://img.shields.io/hexpm/v/reactor.svg)](https://hex.pm/packages/reactor)\n\nReactor is a dynamic, concurrent, dependency resolving saga orchestrator.\n\nWoah. That's a lot. Let's break it down:\n\n- **Saga orchestrator** A [saga][saga pattern] is a way of providing\n  transaction-like semantics across multiple distinct resources.\n- **Dependency resolving** reactor allows you to describe the dependencies\n  between your saga steps using _arguments_ which are converted into a\n  [DAG][dag] and used to compute execution order.\n- **Concurrent** unless otherwise specified reactor will run as many steps as\n  possible concurrently whilst taking into account the results of the dependency\n  resolution.\n- **Dynamic** whilst you can define a reactor statically using our awesome DSL,\n  you can also build workflows dynamically - and even add steps while the\n  reactor is running.\n\n[saga pattern](https://learn.microsoft.com/en-us/azure/architecture/reference-architectures/saga/saga)\n\n## Sponsors\n\nThanks to [Alembic Pty Ltd](https://alembic.com.au/) for sponsoring a portion of\nthis project's development.\n\n## Installation\n\nThe package can be installed by adding `reactor` to your list of dependencies in `mix.exs`:\n\n```elixir\ndef deps do\n  [\n    {:reactor, \"~\u003e 0.15.6\"}\n  ]\nend\n```\n\n## Documentation\n\nOur documentation is organized to help you find exactly what you need:\n\n### 🎓 **Learning Reactor** - Tutorials\nStep-by-step guides that teach Reactor through hands-on practice:\n- **[Getting Started](documentation/tutorials/01-getting-started.md)** - Build your first Reactor\n- **[Recursive Execution](documentation/tutorials/05-recursive-execution.md)** - Advanced iterative patterns\n\n### 🔧 **Solving Problems** - How-to Guides\nPractical solutions for real-world scenarios:\n- **[Payment Processing](documentation/how-to/payment-processing.md)** - E-commerce workflows\n- **[Data Pipelines](documentation/how-to/data-pipelines.md)** - ETL orchestration\n- **[Testing Strategies](documentation/how-to/testing-strategies.md)** - Testing approaches\n\n### 📚 **API Reference**\nComplete technical reference:\n- **[DSL Documentation](documentation/dsls/DSL-Reactor.md)** - Complete DSL syntax (auto-generated)\n- **[HexDocs](https://hexdocs.pm/reactor)** - Generated API documentation\n- **[Latest (main branch)](https://ash-project.github.io/reactor)** - Development docs\n\n### 💡 **Understanding Reactor** - Explanations\nConceptual guides about how and why Reactor works:\n- **[Core Concepts](documentation/explanation/concepts.md)** - Sagas, DAGs, compensation\n- **[Architecture](documentation/explanation/architecture.md)** - Internal design\n- **[Ecosystem](documentation/explanation/ecosystem.md)** - Integration patterns\n\n**Quick Start:** New to Reactor? Start with the [Getting Started tutorial](documentation/tutorials/01-getting-started.md)!\n\n## Contributing\n\n- To contribute updates, fixes or new features please fork and open a\n  pull-request against `main`.\n- Please use [conventional\n  commits](https://www.conventionalcommits.org/en/v1.0.0/) - this allows us to\n  dynamically generate the changelog.\n- Feel free to ask any questions on the `#reactor` channel on the [Ash\n  Discord](https://discord.gg/D7FNG2q).\n\n## Licence\n\n`reactor` is licensed under the terms of the [MIT\nlicense](https://opensource.org/licenses/MIT). See the [`LICENSE` file in this\nrepository](https://github.com/ash-project/reactor/blob/main/LICENSE)\nfor details.\n\n[saga pattern]: https://learn.microsoft.com/en-us/azure/architecture/reference-architectures/saga/saga\n[dag]: https://en.wikipedia.org/wiki/Directed_acyclic_graph\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fash-project%2Freactor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fash-project%2Freactor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fash-project%2Freactor/lists"}