ThunderPropagator.Application
1.0.1-beta.162
dotnet add package ThunderPropagator.Application --version 1.0.1-beta.162
NuGet\Install-Package ThunderPropagator.Application -Version 1.0.1-beta.162
<PackageReference Include="ThunderPropagator.Application" Version="1.0.1-beta.162" />
<PackageVersion Include="ThunderPropagator.Application" Version="1.0.1-beta.162" />
<PackageReference Include="ThunderPropagator.Application" />
paket add ThunderPropagator.Application --version 1.0.1-beta.162
#r "nuget: ThunderPropagator.Application, 1.0.1-beta.162"
#:package ThunderPropagator.Application@1.0.1-beta.162
#addin nuget:?package=ThunderPropagator.Application&version=1.0.1-beta.162&prerelease
#tool nuget:?package=ThunderPropagator.Application&version=1.0.1-beta.162&prerelease
ThunderPropagator
ThunderPropagator is a cutting-edge software solution designed to redefine real-time data streaming. Our mission is to provide effortless, blazingly fast, and cloud-native streaming capabilities for maximum impact. This repository contains the foundational libraries, ThunderPropagator.Application and ThunderPropagator.Infrastructure, which empower developers to build scalable, high-performance streaming applications with ease.
These libraries support .NET 9 and .NET 8, and are configured to work across multiple platforms, including ARM64, x64, x86, and AnyCPU. They are available as NuGet packages and can be installed from GitHub Packages:
https://nuget.pkg.github.com/KiarashMinoo/index.json.
Table of Contents
Overview
ThunderPropagator is designed to revolutionize real-time data streaming by providing:
- Effortless Integration: Simple and intuitive APIs for seamless integration into your applications.
- Blazingly Fast Performance: Optimized for low-latency, high-throughput streaming.
- Cloud-Native Architecture: Built for modern cloud environments, enabling scalability and resilience.
- Cross-Platform Support: Compatible with ARM64, x64, x86, and AnyCPU platforms.
Whether you're building real-time analytics, live event processing, or IoT data pipelines, ThunderPropagator empowers you to deliver maximum impact with minimal effort.
Features
- Multi-Protocol Support: WebSockets, MQTT 5.0, QUIC, WebTransport, and custom streaming protocols
- Cross-Platform Support: Works seamlessly on ARM64, x64, x86, and AnyCPU platforms
- .NET Compatibility: Fully compatible with .NET 9 and .NET 8
- High Performance: Optimized for low-latency, high-throughput streaming with backpressure control
- Cloud-Native Architecture: Built for modern cloud environments with built-in scalability and resilience
- Real-time Channels: Advanced channel management with subscription handling and message distribution
- Comprehensive Documentation: 100% coverage with 60+ documented modules
- GitHub Packages: Easily installable via GitHub Packages repository
Supported Platforms
The projects support the following platforms:
- ARM64
- x64
- x86
- AnyCPU
Both Debug and Release configurations are available for all platforms.
Installation
Step 1: Add GitHub Packages NuGet Repository
To install the libraries as NuGet packages, you need to add the GitHub Packages repository to your NuGet configuration.
Using Visual Studio:
- Open Visual Studio
- Go to Tools > NuGet Package Manager > Package Manager Settings
- Under Package Sources, click the + button to add a new source
- Enter the following details:
- Name:
GitHub-KiarashMinoo - Source:
https://nuget.pkg.github.com/KiarashMinoo/index.json
- Name:
- Click Update and then OK
Using the Command Line:
Add the NuGet source using the following command:
dotnet nuget add source --name GitHub-KiarashMinoo --source https://nuget.pkg.github.com/KiarashMinoo/index.json
Create or Update nuget.config
The repository includes a nuget.config file configured for GitHub Packages. If you need to create your own, here's the configuration:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
<add key="github" value="https://nuget.pkg.github.com/KiarashMinoo/index.json" />
</packageSources>
<packageSourceCredentials>
<github>
<add key="Username" value="KiarashMinoo" />
<add key="ClearTextPassword" value="your-github-token" />
</github>
</packageSourceCredentials>
<packageSourceMapping>
<packageSource key="github">
<package pattern="ThunderPropagator.*" />
</packageSource>
<packageSource key="nuget.org">
<package pattern="*" />
</packageSource>
</packageSourceMapping>
</configuration>
Place the nuget.config file in the root of your solution or project directory. This ensures that all projects in the solution can access the GitHub Packages repository.
Step 2: Verify the Configuration
To verify that the GitHub Packages repository is correctly configured, you can use the following command in the terminal:
dotnet nuget list source
This will list all configured NuGet sources. You should see something like this in the output:
Registered Sources:
1. nuget.org [Enabled]
https://api.nuget.org/v3/index.json
2. github [Enabled]
https://nuget.pkg.github.com/KiarashMinoo/index.json
Step 3: Install the NuGet Packages
You can now install the packages using the following commands:
For ThunderPropagator.Application:
dotnet add package ThunderPropagator.Application
For ThunderPropagator.Infrastructure:
dotnet add package ThunderPropagator.Infrastructure
Alternatively, you can install the packages via the NuGet Package Manager in Visual Studio.
License Enforcement
ThunderPropagator uses a native licenseManager library (LicenseManager.dll / libLicenseManager.so / libLicenseManager.dylib) to enforce feature licensing at runtime. Feature checks are cached in-process and survive hot-reload — no application restart is needed when a license changes.
Provider Types
| Provider | How it works |
|---|---|
| Demo | Available in DEBUG builds only. Activates automatically via LM_InitializeDemo; unlocks all features without a license file. Never available in Release builds. |
| Cloud | A cloud key tied to your hardware ID is issued by the vendor portal. Features are validated via the native library against the cloud service. |
| ActivationFile | A .lic file issued by the vendor portal. Suitable for air-gapped or offline deployments. Pass the path in configuration (see below). |
Registration Flow
Your server Vendor portal
│ │
│ 1. Get hardware ID │
│ IHardwareIdProvider │
│ .GetHardwareId() ─────────────► │
│ │ 2. Issue cloud key
│ ◄── cloud key or .lic file ──── │ or activation file
│ │
│ 3. Place .lic in config path │
│ or supply cloud key │
│ │
│ 4. UseThunderPropagator() │
│ calls Initialize() │
│ → LoadLicense(path) │
Step 1 — Retrieve the hardware ID at application startup:
// In Program.cs / Startup.cs after building the host:
var hardwareId = app.Services
.GetRequiredService<IHardwareIdProvider>()
.GetHardwareId();
Console.WriteLine($"Register this hardware ID with the vendor portal: {hardwareId}");
Alternatively query the built-in endpoint (requires UseThunderPropagator() to be called):
GET /thunderpropagator/v{version}/license/features
Step 2 — Submit the hardware ID to the vendor portal to obtain a cloud key or a .lic activation file.
Step 3 — Configure the license path in appsettings.json:
{
"LicenseManager": {
"LicensePath": "license.lic"
}
}
Or via environment variable:
LicenseManager__LicensePath=/app/licenses/license.lic
Step 4 — Start the application. UseThunderPropagator() calls LicenseManagerInterop.Initialize() automatically, which loads the license and populates the in-process feature cache.
Hot-Reload Without Restart
The background LicenseRefreshService re-queries the native library on a configurable interval (default: every 15 minutes). To trigger an immediate reload, inject ILicenseRefreshService and call RefreshAsync():
await app.Services
.GetRequiredService<ILicenseRefreshService>()
.RefreshAsync();
To change the refresh interval:
services.Configure<LicenseRefreshOptions>(opts =>
opts.RefreshInterval = TimeSpan.FromMinutes(5));
Licensed Features
All 18 features are enforced at runtime via LicenseManagerInterop.IsAllowed<T>(). The feature key used in license files is the fully-qualified class name shown below.
Subscription Capacity
| Feature class | Description | Tier |
|---|---|---|
ThousandSubscriptionsFeature |
Up to 1,000 concurrent subscriptions | Standard |
TenThousandSubscriptionsFeature |
Up to 10,000 concurrent subscriptions | Standard |
FiftyThousandSubscriptionsFeature |
Up to 50,000 concurrent subscriptions | Professional |
HundredThousandSubscriptionsFeature |
Up to 100,000 concurrent subscriptions | Professional |
UnlimitedSubscriptionsFeature |
Unlimited concurrent subscriptions (up to 1 M on 64-bit) | Enterprise |
Message Throughput
| Feature class | Description | Tier |
|---|---|---|
TenMessagesPerSecondFeature |
10 messages per second per channel | Standard |
FiftyMessagesPerSecondFeature |
50 messages per second per channel | Professional |
HundredMessagesPerSecondFeature |
100 messages per second per channel | Enterprise |
Recovery Storage
| Feature class | Description | Tier |
|---|---|---|
RedisRecoveryStorageFeature |
Redis-backed snapshot recovery | Professional |
MongoDbRecoveryStorageFeature |
MongoDB-backed snapshot recovery | Professional |
PostgresqlRecoveryStorageFeature |
PostgreSQL-backed snapshot recovery | Professional |
Protocol Extensions
| Feature class | Description | Tier |
|---|---|---|
QuicConnectionFeature |
QUIC (HTTP/3) connection listener | Enterprise |
MqttConnectionFeature |
MQTT 5.0 broker | Enterprise |
WebTransportFeature |
WebTransport over HTTP/3 | Enterprise |
Pipeline Infrastructure
| Feature class | Description | Tier |
|---|---|---|
AddPushersEventsFeature |
Event-driven outbound push handlers | Community |
AddPushersPipelinesFeature |
Outbound message delivery pipelines | Community |
AddReceiversEventsFeature |
Event-driven inbound receive handlers | Community |
AddReceiversPipelinesFeatures |
Inbound message processing pipelines | Community |
Note: Community-tier pipeline features are required for basic operation and are expected to be licensed in all deployments.
Graceful Degradation
| Scenario | Behaviour |
|---|---|
Native library absent (DllNotFoundException) |
All IsAllowed<T>() calls return false; GetHardwareId() returns string.Empty. ThunderPropagator continues to run at minimum capacity — no exception is thrown. |
| Feature not licensed | The gated code path is bypassed silently. Subscription capacity falls to 500 concurrent subscriptions; protocol listeners are not started; feeders that implement IFeature skip StartingAsync() without transitioning state. |
| License expired | The native expiry callback fires InvalidateCache(); all IsAllowed<T>() calls return false until a valid license is reloaded. |
| Transient error during feature check | IsAllowed<T>() returns false and logs a warning. The result is not cached so the next call retries against the native library. |
Documentation
Comprehensive documentation is available in the docs/ directory. The documentation is auto-generated from source code with complete API references, architecture diagrams, usage examples, and best practices.
📚 Documentation Portal — Main entry point with quick start guide and architecture overview
Documentation Catalog
The following areas are fully documented with types, files, diagrams, and examples:
Application Layer Types:80+ Files:112 Diagrams:✓
Application — Core abstractions for channels, feeders, pipelines, and subscriptions
- Channels
Types:8Files:13Diagrams:✓— Real-time channel management with subscriptions and snapshots- ChannelProgramsDescriptors
Types:11Files:13Diagrams:✓— Field schema definitions and type descriptors- DataTypes
Types:13Files:13Diagrams:✗— Type-specific descriptor implementations
- DataTypes
- Contexts
Types:4Files:4Diagrams:✓— Request/response/push context objects - Exceptions
Types:6Files:6Diagrams:✗— Channel-specific exception types - Metadata
Types:5Files:8Diagrams:✓— Authentication, authorization, snapshot configuration - Snapshots
Types:3Files:6Diagrams:✓— State persistence and recovery handlers- Recovery
Types:2Files:2Diagrams:✗— Recovery handler abstractions
- Recovery
- Subscribers
Types:8Files:8Diagrams:✓— Subscription filtering and management
- ChannelProgramsDescriptors
- Collections
Types:6Files:6Diagrams:✗— Specialized collections for routing and forms - Events
Types:1Files:1Diagrams:✓— Event interfaces and implementations - Feeders
Types:10Files:12Diagrams:✓— Data source abstractions feeding channels - HealthChecks
Types:2Files:2Diagrams:✗— Health monitoring interfaces - Helpers
Types:3Files:3Diagrams:✗— Utility classes (C# scripting, request context) - LicenseManagers
Types:1Files:1Diagrams:✗— License validation interop - Logging
Types:1Files:1Diagrams:✗— Logging utilities - Metrics
Types:3Files:3Diagrams:✗— Telemetry and observability - Pipelines
Types:1Files:1Diagrams:✓— Middleware for request/response processing- Pushers
Types:2Files:3Diagrams:✗— Push pipeline abstractions - Receivers
Types:4Files:7Diagrams:✓— Receive pipeline abstractions- Attributes
Types:3Files:3Diagrams:✗— Pipeline attribute decorators
- Attributes
- Pushers
Infrastructure Layer Types:45+ Files:68 Diagrams:✓
Infrastructure — Protocol implementations and connection management
- Channels
Types:7Files:11Diagrams:✓— Infrastructure channel coordination- Snapshots/Recovery
Types:5Files:5Diagrams:✓— Concrete recovery implementations (Redis, MongoDB, PostgreSQL)
- Snapshots/Recovery
- Contexts
Types:4Files:4Diagrams:✓— Client request/response contexts - Events
Types:2Files:2Diagrams:✓— Infrastructure event handlers - Exceptions
Types:1Files:1Diagrams:✗— Infrastructure-specific exceptions - Extensions
Types:12Files:13Diagrams:✓— DI and service registration - Feeders
Types:5Files:5Diagrams:✓— Infrastructure-level feeders - Pipelines
Types:2Files:2Diagrams:✓— Pipeline hierarchy invokers - Protocols
Types:13Files:13Diagrams:✓— Protocol handlers and containers- InfiniteDataStream
Types:3Files:3Diagrams:✗— Custom binary streaming - Mqtt
Types:3Files:3Diagrams:✓— MQTT 5.0 broker integration - Quic
Types:3Files:3Diagrams:✓— QUIC protocol support - WebSockets
Types:3Files:3Diagrams:✓— WebSocket connection handling - WebTransport
Types:3Files:3Diagrams:✓— WebTransport over HTTP/3
- InfiniteDataStream
- Pushers
Types:2Files:2Diagrams:✗— Push pipeline implementations - Receivers — Receive pipeline implementations
- Pipelines — Pipeline catalog and routing
- Authentication
Types:1Files:1Diagrams:✓— Authentication handlers (Basic, OAuth2) - Authorization
Types:1Files:1Diagrams:✓— Authorization handlers (Role, Policy) - PingPong
Types:1Files:1Diagrams:✗— Health check ping/pong - RequestMetadata
Types:1Files:1Diagrams:✓— Channel metadata retrieval - Subscribe
Types:1Files:1Diagrams:✓— Subscription management - Unsubscribe
Types:1Files:1Diagrams:✓— Unsubscription handling
- Authentication
- Pipelines — Pipeline catalog and routing
Automation & Tooling
scripts Scripts:8 Diagrams:✓ — PowerShell automation
- CI/CD Scripts — Automated versioning, building, and publishing
- Delete-GitHubPackages.ps1 — Package cleanup with wildcard filtering
- Generate-Changelog.ps1 — Keep-a-Changelog format generator
- Generate-ReleaseNotes.ps1 — Advanced release notes with diff analysis
- pack-all-platforms.ps1 — Parallel multi-platform builds
- pack-solution.ps1 — Core .NET pack worker
- publish-packages.ps1 — NuGet publishing with visibility control
- update-version.ps1 — Beta/release version management
Package Documentation
| Package | Version | Description | Documentation |
|---|---|---|---|
| ThunderPropagator.Application | 1.0.1-beta.12 | Core application layer with channels, feeders, pipelines | Application Layer |
| ThunderPropagator.Infrastructure | 1.0.1-beta.12 | Infrastructure layer with protocol implementations | Infrastructure Layer |
| ThunderPropagator.BuildingBlocks | 1.0.1-beta.12 | Core building blocks and utilities | Dependency |
| ThunderPropagator.BuildingBlocks.Modules | 1.0.1-beta.12 | Module system and DI extensions | Dependency |
Documentation Features
- ✅ Complete API Coverage — All public types documented with signatures, descriptions, and usage
- ✅ Architecture Diagrams — Mermaid diagrams for flows, sequences, and class structures
- ✅ Realistic Examples — Production-ready code samples (no test code)
- ✅ Cross-References — Extensive linking between related documentation
- ✅ Performance Notes — Optimization tips and scalability guidance
- ✅ Protocol Guides — WebSocket, MQTT 5.0, QUIC, WebTransport details
- ✅ Dependency Tracking — ThunderPropagator package usage documented per area
Last generated: December 28, 2025
License
This project is licensed under the MIT License.
© 2024-2025 ThunderPropagator. All rights reserved.
| Product | Versions 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. |
-
net10.0
- Castle.Core (>= 5.2.1)
- Hangfire.Core (>= 1.8.23)
- Microsoft.AspNetCore.Authorization (>= 10.0.9)
- Microsoft.CodeAnalysis.CSharp.Scripting (>= 5.3.0)
- Microsoft.Extensions.Diagnostics.HealthChecks (>= 10.0.9)
- Microsoft.Extensions.ObjectPool (>= 10.0.9)
- OpenTelemetry.Api (>= 1.16.0)
- ThunderPropagator.BuildingBlocks (>= 1.0.1-beta.102)
-
net8.0
- Castle.Core (>= 5.2.1)
- Hangfire.Core (>= 1.8.23)
- Microsoft.AspNetCore.Authorization (>= 8.0.28)
- Microsoft.CodeAnalysis.CSharp.Scripting (>= 5.3.0)
- Microsoft.Extensions.Diagnostics.HealthChecks (>= 8.0.28)
- Microsoft.Extensions.ObjectPool (>= 8.0.28)
- OpenTelemetry.Api (>= 1.16.0)
- ThunderPropagator.BuildingBlocks (>= 1.0.1-beta.102)
-
net9.0
- Castle.Core (>= 5.2.1)
- Hangfire.Core (>= 1.8.23)
- Microsoft.AspNetCore.Authorization (>= 9.0.17)
- Microsoft.CodeAnalysis.CSharp.Scripting (>= 5.3.0)
- Microsoft.Extensions.Diagnostics.HealthChecks (>= 9.0.17)
- Microsoft.Extensions.ObjectPool (>= 9.0.17)
- OpenTelemetry.Api (>= 1.16.0)
- ThunderPropagator.BuildingBlocks (>= 1.0.1-beta.102)
NuGet packages (12)
Showing the top 5 NuGet packages that depend on ThunderPropagator.Application:
| Package | Downloads |
|---|---|
|
ThunderPropagator
ThunderPropagator (Project ARC): High-performance data propagation; effortless, blazingly fast and cloud-native for maximum impact |
|
|
ThunderPropagator.Debug
ThunderPropagator (Project ARC): High-performance data propagation; effortless, blazingly fast and cloud-native for maximum impact |
|
|
ThunderPropagator.Debug.ARM64
ThunderPropagator (Project ARC): High-performance data propagation; effortless, blazingly fast and cloud-native for maximum impact |
|
|
ThunderPropagator.Debug.x64
ThunderPropagator (Project ARC): High-performance data propagation; effortless, blazingly fast and cloud-native for maximum impact |
|
|
ThunderPropagator.Debug.x86
ThunderPropagator (Project ARC): High-performance data propagation; effortless, blazingly fast and cloud-native for maximum impact |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.1-beta.162 | 44 | 6/17/2026 |
| 1.0.1-beta.161 | 46 | 6/17/2026 |
| 1.0.1-beta.160 | 63 | 6/16/2026 |
| 1.0.1-beta.159 | 59 | 6/16/2026 |
| 1.0.1-beta.158 | 53 | 6/16/2026 |
| 1.0.1-beta.157 | 67 | 6/15/2026 |
| 1.0.1-beta.156 | 72 | 6/15/2026 |
| 1.0.1-beta.155 | 68 | 6/15/2026 |
| 1.0.1-beta.154 | 67 | 6/15/2026 |
| 1.0.1-beta.153 | 69 | 6/15/2026 |
| 1.0.1-beta.152 | 70 | 6/15/2026 |
| 1.0.1-beta.151 | 66 | 6/15/2026 |
| 1.0.1-beta.150 | 76 | 6/15/2026 |
| 1.0.1-beta.149 | 75 | 6/15/2026 |
| 1.0.1-beta.148 | 74 | 6/15/2026 |
| 1.0.1-beta.147 | 81 | 6/15/2026 |
| 1.0.1-beta.146 | 73 | 6/15/2026 |
| 1.0.1-beta.145 | 75 | 6/15/2026 |
| 1.0.1-beta.144 | 88 | 6/15/2026 |
| 1.0.1-beta.143 | 64 | 6/15/2026 |
- [ThunderPropagator#302] feat(telemetry): replace per-channel dynamic metric names with tagged single metrics; add missing OTel unit strings