Skip to main content

README.md

# skuld_durable

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

Durable execution for Skuld: pause-serialize-resume workflows and effect logging.

## What's included

- **`Skuld.SerializableCoroutine`** — pause-serialize-resume for durable workflows
- **`Skuld.Effects.EffectLogger`** — execution logging with replay, resume, and rerun

## Installation

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

## Quick start

```elixir
alias Skuld.SerializableCoroutine

sc = SerializableCoroutine.new(MyWizard.run(), fn comp ->
  comp |> State.with_handler(%{}) |> Yield.with_handler() |> Throw.with_handler()
end)

# Fresh start — suspends at first yield
suspended = SerializableCoroutine.run(sc)

# Serialize and persist
json = SerializableCoroutine.serialize(SerializableCoroutine.get_log(suspended))

# Later: cold resume from serialised state
SerializableCoroutine.run(json, sc, resume_value)
```

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

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

---

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