Wayfinder 0.9.2

There is a newer version of this package available.
See the version list below for details.
dotnet add package Wayfinder --version 0.9.2
                    
NuGet\Install-Package Wayfinder -Version 0.9.2
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Wayfinder" Version="0.9.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Wayfinder" Version="0.9.2" />
                    
Directory.Packages.props
<PackageReference Include="Wayfinder" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Wayfinder --version 0.9.2
                    
#r "nuget: Wayfinder, 0.9.2"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Wayfinder@0.9.2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Wayfinder&version=0.9.2
                    
Install as a Cake Addin
#tool nuget:?package=Wayfinder&version=0.9.2
                    
Install as a Cake Tool

<picture> <source media="(prefers-color-scheme: dark)" srcset="assets/wordmark-dark.png"> <img src="assets/wordmark-light.png" alt="Wayfinder" height="56"> </picture>

CI Wayfinder Wayfinder.Engine Wayfinder.Editor License: MIT

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.Umbraco is 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.Core carries 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.

Wayfinder's service blueprint model: NN/g's horizontal lanes and three lines of separation, and how a ServiceBlueprint's queues, stages, and gateways map onto them.

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 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • 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
Loading failed