Until the 0.1 tag lands, voluta is a source dependency. That is deliberate:
the public surface is still allowed to move, and we would rather you pin a commit
than fight a half-baked package.
NuGet is not published yet. Clone the repo and add project references.
What you need
- .NET 10 SDK — 10.0.100+
- A shell where
dotnet --versionprints something ≥10.0.100
Why .NET 10: the solution targets current runtime features the samples and AOT smoke already assume. Older SDKs will fail loudly at restore/build.
Clone and prove the tree builds
git clone https://github.com/dot-stbl/voluta.git
cd voluta
dotnet build voluta.slnx
TreatWarningsAsErrors and EnforceCodeStyleInBuild are on everywhere. A green
build means you have the same bar CI uses — not a soft “it mostly compiles.”
Wire it into your project
dotnet add reference path/to/voluta/src/Voluta/Voluta.csproj
Start with Voluta only. That pulls the runtime and InMemoryCheckpointer —
enough for every early sample and most unit tests.
Add more packages when a need shows up, not “just in case”:
| Project | Add it when… |
|---|---|
Voluta | You want any graph execution (required) |
Voluta.Generators | You’re tired of string channel keys and want [GraphState] |
Voluta.DependencyInjection | A host should compile the graph once and inject it |
Voluta.Checkpoints.File | Threads must survive process restarts |
Voluta.Testing | You’re writing checkpointer or stream tests |
Voluta.MicrosoftAi | You want thin helpers around IChatClient |
Voluta.UI | You want the ops console (MapVolutaUI) |
Sanity check: run a sample
dotnet run --project samples/01-HelloWorld
You should see a simulated ReAct loop stream Updates until status = done. If
that works, your SDK and tree are fine — jump to Quick Start.
Optional: host DI
When the graph lives inside ASP.NET / a worker host, compile once at startup:
using Voluta.DependencyInjection;
services.AddVoluta(compiledGraph);
// or
services.AddVoluta(sp => /* build + Compile */ graph);
Why not construct a new StateGraph per request? Compile validates topology and
freezes it. Rebuilding every request pays validation cost for nothing and makes
it easier to ship two slightly different graphs by accident.
AOT (when it matters)
Native AOT is for the core tier only:
- Compatible:
Voluta,Voluta.Abstractions,Voluta.DependencyInjection - Regular CLR: file checkpointer, UI, Microsoft AI helpers
Smoke path if you care about publish size / startup:
dotnet publish samples/03-AotSmoke -c Release
If you only run under the normal runtime, ignore AOT until it becomes a product requirement.