WordsAreFlowing.Sdk
0.3.4
dotnet add package WordsAreFlowing.Sdk --version 0.3.4
NuGet\Install-Package WordsAreFlowing.Sdk -Version 0.3.4
<PackageReference Include="WordsAreFlowing.Sdk" Version="0.3.4" />
<PackageVersion Include="WordsAreFlowing.Sdk" Version="0.3.4" />
<PackageReference Include="WordsAreFlowing.Sdk" />
paket add WordsAreFlowing.Sdk --version 0.3.4
#r "nuget: WordsAreFlowing.Sdk, 0.3.4"
#:package WordsAreFlowing.Sdk@0.3.4
#addin nuget:?package=WordsAreFlowing.Sdk&version=0.3.4
#tool nuget:?package=WordsAreFlowing.Sdk&version=0.3.4
Words Are Flowing
Behaviour-triggered store prompts and private feedback for .NET apps, with rules your product authors on a server and the SDK evaluates locally. It only ever asks a private question before a store prompt — never both, and never a store prompt out of nowhere.
Install
dotnet add package WordsAreFlowing.Sdk.Core
dotnet add package WordsAreFlowing.Sdk
Sdk.Core is the rules engine and wire contracts; Sdk is the Blazor/.NET head (HTTP transport,
browser storage, the default <FeedbackAsk/> component).
Quickstart
builder.Services.AddWordsAreFlowing(o =>
{
o.ApiKey = "waf_live_…";
o.AppVersion = "1.2.3";
});
Put <FeedbackAsk Loop="@Loop" /> in your layout with @inject IFeedbackLoop Loop; it initialises
the loop on first render (rules download, cache).
@inject IFeedbackLoop Loop
<FeedbackAsk Loop="@Loop" />
If you render no component, call await Loop.InitializeAsync() from a component or page — not from
app.Services, which on Blazor Server and MAUI Blazor Hybrid is a different scope from your
components' and would leave them with no rules.
Then call TrackAsync from behaviour, never from a button:
await Loop.TrackAsync("your_trigger");
TrackAsync is the only path to a store prompt or a private ask — wiring it to a click defeats the
whole point of the rule below.
DecisionMade may be raised off the UI thread; call InvokeAsync in your own handlers (the shipped
component does).
Pull in the component's styles. Most apps already import their Razor class library bundles through
the app's own .styles.css; if not, add the line directly:
<link href="_content/WordsAreFlowing.Sdk/WordsAreFlowing.Sdk.bundle.scp.css" rel="stylesheet" />
The rule
Google's In-App Review guideline is one sentence: don't ask the user for a review immediately before or after asking them anything else (https://developer.android.com/guide/playcore/in-app-review). This SDK never asks a question before a store prompt; a private note silences the store prompt for a year.
Texts
English and French (Québec) copy ship built in and are chosen from the current UI culture
automatically. Override any field with Texts="@myTexts" on <FeedbackAsk/>.
Storage
Everything lives in the app's own key-value store under waf.* keys — installed-at, per-trigger
occurrence and last-ask/last-prompt timestamps, the times of the store prompts in the last 365 days
(the cap is rolling, never a calendar year), cached rules and their ETag, and the outbound event
queue. Counters stay on the device; the server never sees them.
Identity
Nothing identifies the user unless you set Attributes or UserId yourself. Neither is required,
and this fleet's own apps send neither.
Hosts
Blazor WebAssembly works out of the box (BrowserLocalStorageStore uses localStorage). Blazor
Server and any other host must register their own IKeyValueStore — for example
InMemoryKeyValueStore — before calling AddWordsAreFlowing, so the default browser-only
store never gets a chance to register.
.NET MAUI: reference WordsAreFlowing.Sdk.Maui and call AddWordsAreFlowingMaui instead — it
registers a Preferences-backed store and the native review prompt (Play In-App Review, StoreKit)
and sets Platform from the device.
Errors
A cancelled or timed-out call returns Failed("timeout"), and any other network or server failure
resolves to Decision.None or a failed TransportResult with a reason. The SDK never throws into
your app.
Packing
dotnet pack Sdk/WordsAreFlowing.Sdk.Core/WordsAreFlowing.Sdk.Core.csproj -c Release -o artifacts/nuget
dotnet pack Sdk/WordsAreFlowing.Sdk/WordsAreFlowing.Sdk.csproj -c Release -o artifacts/nuget
| 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
- Microsoft.AspNetCore.Components.Web (>= 10.0.11)
- Microsoft.Extensions.Http (>= 10.0.9)
- WordsAreFlowing.Sdk.Core (>= 0.3.4)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on WordsAreFlowing.Sdk:
| Package | Downloads |
|---|---|
|
WordsAreFlowing.Sdk.Maui
Words Are Flowing for .NET MAUI: the native store review prompt (Google Play In-App Review, StoreKit) and a Preferences-backed store, wired by AddWordsAreFlowingMaui. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.3.4 | 117 | 9/26/2026 |