# `Squidie.Config`
[🔗](https://github.com/dark-trench/squidie/blob/main/lib/squidie/config.ex#L1)

Loads and validates host application configuration for Squidie.

This contract is intentionally small so application teams only configure the
runtime boundary once, while workflow authors stay focused on declarative
workflow definitions and public API usage.

# `config_error`

```elixir
@type config_error() :: {:missing_config, [atom()]} | {:invalid_config, keyword()}
```

# `raw_config`

```elixir
@type raw_config() :: [
  repo: module() | nil,
  runtime: runtime(),
  read_model: read_model(),
  journal_storage: term(),
  queue: atom() | String.t()
]
```

# `read_model`

```elixir
@type read_model() :: :read_model
```

# `runtime`

```elixir
@type runtime() :: :journal
```

# `t`

```elixir
@type t() :: %Squidie.Config{
  journal_storage: Squidie.Runtime.Journal.Storage.t() | nil,
  queue: String.t(),
  read_model: read_model(),
  repo: module() | nil,
  runtime: runtime()
}
```

# `load`

```elixir
@spec load(keyword()) :: {:ok, t()} | {:error, config_error()}
```

Loads Squidie configuration from the host application environment.

Optional overrides are merged after application configuration so tests and
embedding applications can supply runtime-specific repositories without
mutating global application state.

# `load!`

```elixir
@spec load!(keyword()) :: t()
```

Loads configuration or raises an `ArgumentError` with the validation details.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
