Current section

Files

Jump to
Raw

mix.exs

defmodule ReactiveDag.MixProject do
use Mix.Project
@moduledoc false
# release-please manages this version (and the tag/CHANGELOG) via the
# annotation below — bump it by merging the release PR, not by hand.
@version "0.17.0-rc.26" # x-release-please-version
def project do
[
app: :reactive_dag,
version: @version,
elixir: "~> 1.18",
description:
"Reactive DAG engine as an Ash extension: dirty frontier, depth-ordered " <>
"incremental drain, change propagation. Author nodes as Ash resources " <>
"with reduce/join/aggregate combinators; each node's results are its own " <>
"rows, and the domain plugs in at three seams.",
elixirc_paths: elixirc_paths(Mix.env()),
deps: deps(),
docs: docs(),
package: package()
]
end
defp package do
[
licenses: ["MIT"],
links: %{"GitHub" => "https://github.com/u2i/reactive_dag"},
# guides/ + docs/ ship in the package so hexdocs can build the extras
files: ~w(lib guides docs mix.exs README.md LICENSE)
]
end
defp docs do
[
main: "getting-started",
source_url: "https://github.com/u2i/reactive_dag",
source_ref: "v#{@version}",
extras: [
"guides/getting-started.md",
"guides/configuration.md",
"guides/authoring-nodes.md",
"guides/llm-nodes.md",
"guides/sources.md",
"guides/seams.md",
"README.md",
"docs/adr-001-reactive-dag-library.md"
],
groups_for_extras: [
Guides: ~r/guides\/.*/,
Design: ~r/docs\/.*/
],
groups_for_modules: [
Authoring: [
ReactiveDag.Node,
ReactiveDag.Node.Payload,
ReactiveDag.Node.Recompute.Aggregate,
ReactiveDag.Calendar
],
Attestation: [
ReactiveDag.Attestation,
ReactiveDag.Attestation.Scope,
ReactiveDag.Attestation.Basis,
ReactiveDag.Attestation.Requirement,
ReactiveDag.Attestation.Evaluation,
ReactiveDag.Attestation.Op
],
Seams: [
ReactiveDag.Source,
ReactiveDag.RecomputeStrategy,
ReactiveDag.KeyRule,
ReactiveDag.CoordinationWriter
],
Engine: [
ReactiveDag.Drain,
ReactiveDag.Graph,
ReactiveDag.Lowering,
ReactiveDag.Plan,
ReactiveDag.Cell
]
]
]
end
def application, do: [extra_applications: [:logger]]
defp elixirc_paths(:test), do: ["lib", "test/support"]
defp elixirc_paths(_), do: ["lib"]
# Both host apps are Ash/AshPostgres/Spark, so the library IS an Ash extension:
# it owns the frontier + substrate resources and the reactive-DAG Spark DSL.
# Only the op algebra + recompute model stay app-side (the two real seams).
defp deps do
[
{:ash, "~> 3.5"},
{:ash_postgres, "~> 2.0"},
{:spark, "~> 2.7"},
# the drain's observability seam. Arrives transitively via Ash anyway, but
# the drain calls :telemetry.execute directly, so it is a direct dependency.
{:telemetry, "~> 1.1"},
# the scan worker. Optional: a host that schedules its own polls, or runs
# none, never loads `ReactiveDag.ScanWorker` and needs no Oban.
{:oban, "~> 2.17", optional: true},
# TEST-ONLY: proves an ash_ai prompt-backed action composes with `run`,
# so an LLM node needs no library code (see guides/llm-nodes.md). Never a
# runtime dependency — hosts that want LLM nodes add ash_ai themselves.
{:ash_ai, "~> 0.8", only: :test},
{:ex_doc, "~> 0.34", only: :dev, runtime: false}
]
end
end