WordsAreFlowing.Sdk 0.3.4

dotnet add package WordsAreFlowing.Sdk --version 0.3.4
                    
NuGet\Install-Package WordsAreFlowing.Sdk -Version 0.3.4
                    
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="WordsAreFlowing.Sdk" Version="0.3.4" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="WordsAreFlowing.Sdk" Version="0.3.4" />
                    
Directory.Packages.props
<PackageReference Include="WordsAreFlowing.Sdk" />
                    
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 WordsAreFlowing.Sdk --version 0.3.4
                    
#r "nuget: WordsAreFlowing.Sdk, 0.3.4"
                    
#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 WordsAreFlowing.Sdk@0.3.4
                    
#: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=WordsAreFlowing.Sdk&version=0.3.4
                    
Install as a Cake Addin
#tool nuget:?package=WordsAreFlowing.Sdk&version=0.3.4
                    
Install as a Cake Tool

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 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.

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