Wayfinder 0.9.2
See the version list below for details.
dotnet add package Wayfinder --version 0.9.2
NuGet\Install-Package Wayfinder -Version 0.9.2
<PackageReference Include="Wayfinder" Version="0.9.2" />
<PackageVersion Include="Wayfinder" Version="0.9.2" />
<PackageReference Include="Wayfinder" />
paket add Wayfinder --version 0.9.2
#r "nuget: Wayfinder, 0.9.2"
#:package Wayfinder@0.9.2
#addin nuget:?package=Wayfinder&version=0.9.2
#tool nuget:?package=Wayfinder&version=0.9.2
<picture> <source media="(prefers-color-scheme: dark)" srcset="assets/wordmark-dark.png"> <img src="assets/wordmark-light.png" alt="Wayfinder" height="56"> </picture>
A service blueprint / service-design engine: domain model, calculation engine, state-machine engine, and a compiled visual editor web component. Framework-agnostic, with no Umbraco, no ASP.NET Core MVC, and no hosting assumptions baked in.
The domain model is the service blueprint as the Nielsen Norman Group defines it: a user journey laid out across customer actions, frontstage, backstage, and support processes, divided by the lines of interaction, visibility, and internal interaction. Wayfinder makes that model executable, and delivers journeys to GDS Service Standard practice with the real GOV.UK Design System.
Wayfinder was extracted from Umbraco Prism,
which is now a consumer of these packages rather than their owner. A host application,
Umbraco-based or otherwise, layers its own tenancy, auth, and rendering opinions on top.
Wayfinder.Umbraco is the Umbraco-hosted
implementation Prism itself uses.
How it fits together
graph LR
WF["Wayfinder<br/>core engine<br/>(this repo)"] --> WFU["Wayfinder.Umbraco<br/>CMS binding"]
WFU --> PRISM["Umbraco Prism<br/>multi-tenant host<br/>(OIDC, branding)"]
Wayfinder(this repo) is the framework-agnostic core: the domain model, the calculation engine, and the state-machine engine. No Umbraco, no hosting assumptions.Wayfinder.Umbracois the Umbraco host: a DB-backed store, Block Grid blocks, an authoring UI, and GOV.UK rendering.- Umbraco Prism is the reference consumer for
multi-tenancy and branding —
UmbracoPrism.Corecarries no service-design opinion of its own.
Quickstart
dotnet add package Wayfinder.Engine
Seed a blueprint (a JSON file — see
docs/guides/reference-service-blueprint-contract.md
for the full schema):
// blueprints/apply-for-a-licence.json
{
"definitionKey": "apply-for-a-licence",
"displayName": "Apply for a licence",
"version": 1,
"initialStage": "start",
"requestPolicy": "single",
"queues": [ { "key": "citizen", "displayName": "Citizen", "actor": "citizen" } ],
"stages": [
{
"stageKey": "start",
"displayName": "Your details",
"queueKey": "citizen",
"components": [ { "type": "text", "fieldKey": "fullName", "label": "Full name", "required": true } ],
"routes": [ { "id": "start--submit--done", "target": "done", "trigger": "submit" } ]
},
{ "stageKey": "done", "displayName": "Application submitted", "queueKey": "citizen", "components": [ { "type": "panel", "heading": "Application complete" } ] }
]
}
Register the engine and round-trip an instance:
using Wayfinder.Engine.Extensions;
builder.Services.AddProcessManager("blueprints"); // folder containing the JSON above
using Wayfinder.Models.ServiceDesign;
var envelope = processManager.GetCurrent(
blueprintKey: "apply-for-a-licence", tenantId: "default", userId: "user-1",
accessProfile: ActorProfile.UnrestrictedOwner);
// envelope.ResponseState == "render" — envelope.Render.Components has the "Your details" fields
var advanced = processManager.Advance(
instanceId: envelope.InstanceId, tenantId: "default", userId: "user-1",
accessProfile: ActorProfile.UnrestrictedOwner, action: "submit", expectedStateVersion: envelope.StateVersion,
fieldValues: new Dictionary<string, object?> { ["fullName"] = "Ada Lovelace" });
// advanced.Render.StateDisplayName == "Application submitted"
That's the whole engine surface a host needs: GetCurrent to render the current step, Advance
to submit it. Wayfinder.Umbraco wraps exactly
these two calls behind a Block Grid block; see its own README for the CMS-hosted version.
See it running
Wayfinder.AppHost + Wayfinder.ReferenceApp is a small, self-contained .NET Aspire host in
this repo, with every package wired together, real GOV.UK Design System rendering, a demo login,
and a seeded "apply for a licence to hold a juggling event" journey. It's the fastest way to
see what a working Wayfinder host actually looks like, and exactly how little wiring a real
host (like Wayfinder.Umbraco) collapses into. Run it with
dotnet run --project Wayfinder.AppHost, or the "C#: Aspire (Full Stack)" launch config in
VS Code. See docs/guides/reference-app.md for what it
implements, how the demo blueprint is seeded from JSON and only saved in memory, and what a
real host does differently.
Packages
Core
| Package | Purpose |
|---|---|
Wayfinder |
Core domain models (ServiceBlueprint, ServiceRequestResponseEnvelope, etc.), the declarative calculation engine, and the sanitizer interface. Zero framework dependency. |
Wayfinder.Engine |
The service blueprint state-machine engine: queue routing, gateway evaluation, request persistence, support-systems, bulk data. |
Surfaces — HTTP glue a host maps into its own pipeline
| Package | Purpose |
|---|---|
Wayfinder.Engine.Api |
REST toolkit (MapServiceBlueprintAuthoringApi()) exposing service blueprint authoring (list/read/validate/save/simulate) over HTTP for any ASP.NET Core host. |
Wayfinder.Engine.Mcp |
MCP-over-HTTP toolkit (MapServiceBlueprintAuthoringMcp()): the same authoring surface as MCP tools for AI agents. |
Wayfinder.Engine.Http |
Stage file-upload HTTP glue (StageFileUploads) and the inbound webhook support-system callback (MapWebhookSupportSystemCallbacks). |
Wayfinder.Engine.Journey |
The single-actor citizen journey surface — a minimal host wraps GetCurrent/Advance behind real routes with almost no code of its own. |
Wayfinder.Engine.Worklist |
The caseworker worklist surface — pickup/putback/paging over IProcessManager.GetQueueWorkItems, as HTTP endpoints. |
Rendering & Editor
| Package | Purpose |
|---|---|
Wayfinder.Rendering.GovUk |
Real GOV.UK Design System rendering (vendored govuk-frontend), the built-in component/field catalog, and calculation-driven live components. |
Wayfinder.Editor |
The compiled visual service-blueprint editor web component, ready to embed in a host's own admin UI. |
Wayfinder.Editor.Http |
The editor's host-side REST glue (load/save a blueprint from the editor's own UI). |
The service blueprint model
Wayfinder implements the
Nielsen Norman Group service blueprint
(Sarah Gibbons, 2017) as a runnable artefact. In that model a user's journey is laid out across
horizontal lanes, divided by the lines of interaction, visibility, and internal interaction.
Those lanes are a blueprint's queues, one for each team or system that does the work. A
stage is a step in the journey. Every stage sits in a queue, and the queue is what places it
in a lane, so a stage is a stage whether it happens frontstage or backstage. A gateway is the
route from one stage to the next, from any lane to any lane. Alongside the route a gateway
carries the declarative rules for it: whether to split or join, waiting information, and the
conditions that choose a path. Support Systems is NN/g's support-processes lane made
first-class.
The model is the Nielsen Norman Group service blueprint (Sarah Gibbons, 2017). See the article for Gibbons' own worked example.
A ServiceBlueprint describes a journey as queues (named work queues), stages (each
owning its own routes), and gateways (first-class Split/Join routing nodes that a stage's
routes always target, never another stage directly). See
docs/guides/reference-service-blueprint-contract.md
for the full authoring schema, and
docs/guides/calculation-language.md for the
declarative expression language used in calculations and showWhen.
AI-ready authoring
Service blueprint authoring is exposed to AI agents (Claude Code or any MCP client) the
same way it's exposed to a human editor: as a toolkit a host app wires into its own
pipeline. Wayfinder.Engine.Api and Wayfinder.Engine.Mcp map the same
list/read/validate/save/simulate operations as REST and MCP-over-HTTP respectively, both
calling straight into a host's live Wayfinder.Engine in-process. See
docs/guides/ai-service-blueprint-authoring.md.
Building
dotnet build Wayfinder.slnx
dotnet pack Wayfinder.slnx
License
MIT. See LICENSE.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- No dependencies.
NuGet packages (3)
Showing the top 3 NuGet packages that depend on Wayfinder:
| Package | Downloads |
|---|---|
|
Wayfinder.Engine
Umbraco/Umbraco.Cms-independent GDS-style blueprint state-machine engine (queue routing, gateway evaluation, instance persistence). Reusable by any .NET host building its own blueprint-driven business app; Umbraco Prism is one such consumer, not a dependency. |
|
|
Wayfinder.Umbraco
Umbraco-hosted implementation of Wayfinder service design: a DB-backed, uSync-portable service blueprint store, a backoffice authoring API, and two Block Grid-composable building blocks (a citizen-facing stage journey and a caseworker-facing worklist) for any Umbraco v17+ site. An authoritative in-process engine, real multi-queue support, no multi-tenancy or auth opinions of its own; a host wires its own identity/tenant resolution on top. |
|
|
Wayfinder.Rendering.GovUk
Default GOV.UK Design System rendering for Wayfinder's Component/FieldRenderPayload catalog — plain C#, no Razor/ASP.NET Core MVC dependency, so it works from a minimal-API host as well as an MVC one. Ships one function per component/field type, plus a small override registry for hosts that want to replace or extend individual types. Also ships GovUkStageJourney — the blueprint-agnostic glue (form-body rendering, file-download/bulk-dataset URL injection, posted-form field coercion) every host route rendering a stage otherwise hand-copies. Also ships the real vendored govuk-frontend package itself, the CSS/JS the slider/stat-group/chart/live-form markup needs (no GOV.UK Design System equivalent exists for these), and the poll/init boilerplate every host otherwise re-writes — all as static web assets at /_content/Wayfinder.Rendering.GovUk/, version-locked to what this package's own generated markup actually targets, so every host loads the same files instead of hand-copying its own. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.9.9 | 387 | 9/11/2026 |
| 0.9.8 | 85 | 9/11/2026 |
| 0.9.7 | 78 | 9/11/2026 |
| 0.9.6 | 52 | 9/11/2026 |
| 0.9.5 | 373 | 9/10/2026 |
| 0.9.4 | 711 | 9/7/2026 |
| 0.9.3 | 162 | 9/7/2026 |
| 0.9.2 | 243 | 9/6/2026 |
| 0.9.1 | 284 | 9/5/2026 |
| 0.9.0 | 133 | 9/5/2026 |
| 0.8.1 | 196 | 9/2/2026 |
| 0.8.0 | 128 | 9/2/2026 |
| 0.7.9 | 178 | 8/30/2026 |
| 0.7.8 | 164 | 8/28/2026 |
| 0.7.7 | 305 | 8/28/2026 |
| 0.7.6 | 187 | 8/24/2026 |
| 0.7.5 | 220 | 8/21/2026 |
| 0.7.4 | 168 | 8/21/2026 |
| 0.7.3 | 138 | 8/21/2026 |
| 0.7.2 | 173 | 8/20/2026 |