Skip to main content

README.md

# skuld_process

<!-- nav:header:start -->
[Parallel >](docs/effects/parallel.md) | [Umbrella →](https://hexdocs.pm/skuld/architecture.html)
<!-- nav:header:end -->

Multi-process execution for Skuld: parallel fan-out and process-level mutable state.

## What's included

- **`Skuld.Effects.Parallel`** — fork-join concurrency with `all`, `race`, and `map`
- **`Skuld.Effects.AtomicState`** — thread-safe state via Agent (production) or env.state (testing)

## Installation

```elixir
def deps do
  [
    {:skuld_process, "~> 0.32"}
  ]
end
```

## Quick start

```elixir
use Skuld.Syntax
alias Skuld.Effects.{Parallel, Throw}

comp do
  Parallel.all([
    comp do expensive_work(:a) end,
    comp do expensive_work(:b) end,
    comp do expensive_work(:c) end
  ])
end
|> Parallel.with_handler()
|> Throw.with_handler()
|> Comp.run!()
#=> [:result_a, :result_b, :result_c]
```

See the [architecture guide](https://hexdocs.pm/skuld/architecture.html) for how this fits into the Skuld ecosystem.

<!-- nav:footer:start -->

---

[Parallel >](docs/effects/parallel.md) | [Umbrella →](https://hexdocs.pm/skuld/architecture.html)
<!-- nav:footer:end -->