FactFoundry.TelemetryForge.Web 1.1.2

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

FactFoundry.TelemetryForge.Web

ASP.NET and Blazor Server telemetry for TelemetryForge — privacy-first, server-side request tracking with no JavaScript.

Installation

dotnet add package FactFoundry.TelemetryForge.Web

Setup

builder.Services.AddTelemetryForge(options =>
{
    options.Endpoint   = "https://telemetry.yourdomain.com";
    options.ApiKey     = "your-site-api-key";
    options.UseGaCookie = false;            // default: false — include _ga cookie for cross-session identity
    options.GeoProvider = GeoProvider.Auto; // default: Auto — or Cloudflare, CloudFront, Vercel, Akamai, None
});

app.UseTelemetryForge(); // register middleware in the request pipeline

How It Works

  • ASP.NET requests — the middleware sends a page_view event per HTTP request, capturing page path, status code, duration, referrer, User-Agent, and language
  • Blazor Server — the circuit handler sends a page_view event on each navigation and a circuit_close event when the circuit disconnects

Both components are registered automatically by AddTelemetryForge().

Custom Events (Blazor)

Inject ITelemetryForge to send custom events from anywhere in a Blazor circuit:

@inject ITelemetryForge Telemetry

<button @onclick="OnSubmit">Submit</button>

@code {
    private void OnSubmit()
    {
        Telemetry.TrackEvent("form_submit", new Dictionary<string, object>
        {
            ["form"] = "contact"
        });
    }
}

Blazor Navigation Tracking

Call TrackNavigation from a NavigationManager.LocationChanged handler to track page views within a Blazor circuit:

@inject TelemetryForgeCircuitHandler CircuitHandler
@inject NavigationManager Navigation
@implements IDisposable

@code {
    protected override void OnInitialized()
    {
        Navigation.LocationChanged += OnLocationChanged;
    }

    private void OnLocationChanged(object? sender, LocationChangedEventArgs e)
    {
        CircuitHandler.TrackNavigation(new Uri(e.Location).AbsolutePath);
    }

    public void Dispose() => Navigation.LocationChanged -= OnLocationChanged;
}

What Gets Sent

Each event is a lightweight JSON payload posted to POST /api/telemetry/web:

Field Description
session_id UUID grouping events into a session (per circuit or per request)
event_type page_view, custom, or circuit_close
platform aspnet or blazor-server
ip_address Client IP (server handles hashing)
user_agent Browser User-Agent string
sec_ch_ua Sec-CH-UA client hint (browser brand/version list)
sec_ch_ua_mobile Sec-CH-UA-Mobile client hint (?0 or ?1)
sec_ch_ua_platform Sec-CH-UA-Platform client hint (OS name)
page_path The request or navigation path
status_code HTTP status code (middleware only)
duration_ms Request duration (middleware only)
country Country code from CDN geo header (if available)
region Region/state from CDN geo header (if available)

Privacy

  • No cookies set by the library
  • No JavaScript emitted
  • Raw IPs are hashed server-side — only the hash with rotating salt is stored, which cannot identify individual users across multiple sessions

Requirements

License

MIT

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  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

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.1.2 0 5/26/2026
1.1.1 0 5/26/2026
1.1.0 0 5/25/2026
1.0.1 26 5/25/2026 1.0.1 is deprecated because it has critical bugs.
1.0.0 31 5/25/2026 1.0.0 is deprecated because it has critical bugs.