Capability and Package Map
Overview
Choose a Mississippi capability by the work your application needs to do, then use the package tables to find its contracts and implementation. A domain feature commonly spans several packages: your business rules stay in the domain model while generators connect the runtime, gateway, and client.
This reference maps all 46 projects under src/ to their consumer roles. Package identities use the Mississippi. prefix defined in Directory.Build.props; src/Directory.Build.props enables packing for source projects.
This map describes the current development source, and its GitHub source links follow main. When using a released package, compare the linked contract with that package's release tag or commit. When preparing a versioned documentation snapshot, pin its source links to the corresponding release revision so the examples and evidence stay aligned.
Choose a Capability
| Your application needs to | Capability | Start with |
|---|---|---|
| Accept a business request only when its rules hold | Commands, handlers, and aggregate state | Write model |
| Keep a durable history of accepted changes | Named event streams and persisted events (Brooks) | Brooks |
| Reconstruct state from events | Event reducers and snapshots | Tributary |
| Present several views of the same business history | UX projections | Build projections |
| Coordinate work across aggregates | Saga steps and compensation | Build a saga |
| React to accepted events | Event effects and worker-grain effects | Domain Modeling |
| Generate HTTP endpoints, DTOs, and client actions | Inlet source generators | Inlet |
| Refresh subscribed UI state after server changes | Inlet projection subscriptions and Reservoir state | Read models and client sync |
| Make client state changes explicit and inspectable | Reservoir actions, reducers, selectors, and effects | Add a Reservoir feature |
| Deliver SignalR messages across gateway instances | Aqueduct backplane | Aqueduct |
| Compose Blazor screens from state and events | Refraction components and scenes | Refraction |
| Expose domain operations to an AI tool client | Generated MCP tools and metadata | Spring MCP setup |
| Develop a feature with an AI coding assistant | Explicit rules, generated integration, and behavioral verification | Build a feature with AI |
Package Roles
Abstractions packages provide contracts and extension points. Runtime packages supply Orleans execution or server implementations. Gateway packages integrate with ASP.NET Core. Client packages provide client integration. TestHarness packages support tests of the behavior you author.
Use the SDK composition packages when following the full application pattern. Use individual packages for a focused capability, such as Reservoir state management or Aqueduct's SignalR backplane. A package's project file, linked below, is the authoritative dependency list.
Application Composition
| Package | Consumer role |
|---|---|
| Mississippi.Sdk.Runtime | Composes runtime libraries and Cosmos providers for a silo project |
| Mississippi.Sdk.Gateway | Composes gateway libraries for an ASP.NET Core project |
| Mississippi.Sdk.Client | Composes client hosting, Inlet, and Reservoir libraries |
| Mississippi.Hosting.Abstractions | Shared host builder contracts and structured composition diagnostics |
| Mississippi.Hosting.Runtime.Abstractions | Runtime-role builder contracts and Orleans integration diagnostic codes |
| Mississippi.Hosting.Runtime | Validated terminal composition for Orleans runtime hosts |
| Mississippi.Hosting.Client | Provides ClientBuilder and UseMississippi() for Blazor WebAssembly client composition |
Build-Time Generator References
Configure source generation in the project that consumes the domain types. SDK library references and compiler analyzer references are separate inputs. In source-based applications, Spring explicitly references both the matching Inlet generator and Inlet.Generators.Core with OutputItemType="Analyzer", ReferenceOutputAssembly="false", and PrivateAssets="all".
| Consuming project | Generator project | Verified project configuration |
|---|---|---|
| Orleans runtime | Inlet.Runtime.Generators | Spring.Runtime.csproj |
| ASP.NET Core gateway | Inlet.Gateway.Generators | Spring.Gateway.csproj |
| Blazor client | Inlet.Client.Generators | Spring.Client.csproj |
The SDK projects mark their own analyzer references private. Use the explicit consuming-project configuration above when building from source, and verify analyzer delivery separately when composing an application from NuGet packages.
See Spring host applications for the domain, runtime, gateway, and client project boundaries. For a client entry point, use Inlet getting started.
Business Behavior
| Package | Consumer role |
|---|---|
| Mississippi.DomainModeling.Abstractions | Command handlers, operation results, aggregate/projection grain contracts, event effects, and saga contracts |
| Mississippi.DomainModeling.Runtime | Executes aggregate commands, event effects, sagas, and UX projections |
| Mississippi.DomainModeling.Gateway | Base classes for aggregate services/controllers and projection controllers |
| Mississippi.DomainModeling.TestHarness | Tests handlers, reducers, aggregate scenarios, and effects without hosting the distributed application |
Start with adding an aggregate command. The same explicit command and event types give developers and AI assistants a small, named unit of behavior to implement and review.
Event History, State, and Storage
| Package | Consumer role |
|---|---|
| Mississippi.Brooks.Abstractions | Brook identity, event envelopes, storage-name attributes, and read/write grain contracts |
| Mississippi.Brooks.Runtime | Brook readers, writers, and cursor tracking |
| Mississippi.Brooks.Runtime.Storage.Abstractions | Event storage provider, reader, and writer contracts |
| Mississippi.Brooks.Runtime.Storage.Cosmos | Cosmos event storage with Azure Blob lease locking |
| Mississippi.Brooks.Serialization.Abstractions | Serialization provider, reader, and writer contracts |
| Mississippi.Brooks.Serialization.Json | JSON event serialization |
| Mississippi.Tributary.Abstractions | Event reducer, snapshot, and snapshot-key contracts |
| Mississippi.Tributary.Runtime | Composes reducers and reconstructs, caches, and persists snapshots |
| Mississippi.Tributary.Runtime.Storage.Abstractions | Snapshot storage provider, reader, and writer contracts |
| Mississippi.Tributary.Runtime.Storage.Cosmos | Cosmos snapshot storage |
| Mississippi.Common.Runtime.Storage.Abstractions | Shared retry-policy contract for storage implementations |
| Mississippi.Common.Runtime.Storage.Cosmos | Cosmos retry policy for transient storage failures |
Use Brooks storage providers and Tributary storage providers for the event and snapshot provider boundaries. Keep the persisted event history distinct from the derived state that reducers reconstruct.
Generated Interfaces and Client Synchronization
| Package | Consumer role |
|---|---|
| Mississippi.Inlet.Abstractions | Shared projection-path metadata |
| Mississippi.Inlet.Generators.Abstractions | Attributes for generated endpoints, commands, sagas, DTO customization, authorization, and MCP tools |
| Mississippi.Inlet.Generators.Core | Shared analysis and generation support used by the target-specific generators |
| Mississippi.Inlet.Runtime.Abstractions | Projection discovery, subscription, and authorization metadata contracts |
| Mississippi.Inlet.Runtime | Runtime projection registration and subscription handling |
| Mississippi.Inlet.Runtime.Generators | Generates domain, aggregate, projection, and saga silo registrations and saga status reducers |
| Mississippi.Inlet.Gateway.Abstractions | Server projection notification contracts and in-process notifier integration |
| Mississippi.Inlet.Gateway | Inlet SignalR hub, gateway registration, and subscription authorization options |
| Mississippi.Inlet.Gateway.Generators | Generates HTTP controllers, server DTOs, MCP tools, and gateway registrations |
| Mississippi.Inlet.Client.Abstractions | Projection state, subscription actions, selectors, and client contracts |
| Mississippi.Inlet.Client | Fetches projections, manages SignalR integration, and exposes projection-aware Blazor components |
| Mississippi.Inlet.Client.Generators | Generates client DTOs, mappers, command/saga actions, effects, state, reducers, and registrations |
Generation operates on attributed domain types. Application code still supplies business rules, host configuration, and UI composition. See Inlet reference for the current client builder entry points.
Client State and Blazor UI
| Package | Consumer role |
|---|---|
| Mississippi.Reservoir.Abstractions | Store, feature state, action, reducer, effect, middleware, and builder contracts |
| Mississippi.Reservoir.Core | Store execution, feature registration, reducer/effect composition, and memoized selectors |
| Mississippi.Reservoir.Client | Blazor store components, navigation/lifecycle features, and Redux DevTools integration |
| Mississippi.Reservoir.TestHarness | Given/When/Then scenarios for feature reducers, effects, emitted actions, and resulting state |
| Mississippi.Refraction.Abstractions | Theme, focus, and motion preference contracts |
| Mississippi.Refraction.Client | Blazor components, state/event contracts, and design tokens |
| Mississippi.Refraction.Client.StateManagement | Reservoir-connected scenes that pass state to Refraction components and handle their events |
For state management alone, start with Reservoir getting started. Use Refraction for component composition on top of that state.
Distributed SignalR and Shared Mapping
| Package | Consumer role |
|---|---|
| Mississippi.Aqueduct.Abstractions | Backplane grain contracts, messages, keys, and options |
| Mississippi.Aqueduct.Gateway | SignalR lifetime manager, local connection handling, and Orleans stream integration |
| Mississippi.Aqueduct.Runtime | Orleans grains for connection routing, groups, users, and server tracking |
| Mississippi.Common.Abstractions | Mapper contracts, collection mapping, and mapping registration |
Summary
Packages define installation and extension boundaries. Commands, events, reducers, projections, and actions define the application behavior that you and your team work on.
Next Steps
- Build a feature with AI for a repeatable development workflow.
- Add an aggregate command for a concrete domain example.
- Reservoir getting started for client state management.