![]() |
VOOZH | about |
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" />Directory.Packages.props
<PackageReference Include="ThunderPropagator.Application" />Project file
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&prereleaseInstall as a Cake Addin
#tool nuget:?package=ThunderPropagator.Application&version=1.0.1-beta.162&prereleaseInstall as a Cake Tool
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.
ThunderPropagator is designed to revolutionize real-time data streaming by providing:
Whether you're building real-time analytics, live event processing, or IoT data pipelines, ThunderPropagator empowers you to deliver maximum impact with minimal effort.
The projects support the following platforms:
Both Debug and Release configurations are available for all platforms.
To install the libraries as NuGet packages, you need to add the GitHub Packages repository to your NuGet configuration.
GitHub-KiarashMinoohttps://nuget.pkg.github.com/KiarashMinoo/index.jsonAdd the NuGet source using the following command:
dotnet nuget add source --name GitHub-KiarashMinoo --source https://nuget.pkg.github.com/KiarashMinoo/index.json
nuget.configThe 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.
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
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.
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 | 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). |
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.
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));
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.
| 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 |
| 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 |
| Feature class | Description | Tier |
|---|---|---|
RedisRecoveryStorageFeature |
Redis-backed snapshot recovery | Professional |
MongoDbRecoveryStorageFeature |
MongoDB-backed snapshot recovery | Professional |
PostgresqlRecoveryStorageFeature |
PostgreSQL-backed snapshot recovery | Professional |
| Feature class | Description | Tier |
|---|---|---|
QuicConnectionFeature |
QUIC (HTTP/3) connection listener | Enterprise |
MqttConnectionFeature |
MQTT 5.0 broker | Enterprise |
WebTransportFeature |
WebTransport over HTTP/3 | Enterprise |
| 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.
| 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. |
Comprehensive documentation is available in the directory. The documentation is auto-generated from source code with complete API references, architecture diagrams, usage examples, and best practices.
— Main entry point with quick start guide and architecture overview
The following areas are fully documented with types, files, diagrams, and examples:
Types:80+ Files:112 Diagrams:✓— Core abstractions for channels, feeders, pipelines, and subscriptions
Types:8 Files:13 Diagrams:✓ — Real-time channel management with subscriptions and snapshots
Types:11 Files:13 Diagrams:✓ — Field schema definitions and type descriptors
Types:13 Files:13 Diagrams:✗ — Type-specific descriptor implementationsTypes:4 Files:4 Diagrams:✓ — Request/response/push context objectsTypes:6 Files:6 Diagrams:✗ — Channel-specific exception typesTypes:5 Files:8 Diagrams:✓ — Authentication, authorization, snapshot configurationTypes:3 Files:6 Diagrams:✓ — State persistence and recovery handlers
Types:2 Files:2 Diagrams:✗ — Recovery handler abstractionsTypes:8 Files:8 Diagrams:✓ — Subscription filtering and managementTypes:6 Files:6 Diagrams:✗ — Specialized collections for routing and formsTypes:1 Files:1 Diagrams:✓ — Event interfaces and implementations
Types:2 Files:2 Diagrams:✗ — Push event abstractionsTypes:2 Files:2 Diagrams:✗ — Receive event abstractionsTypes:10 Files:12 Diagrams:✓ — Data source abstractions feeding channelsTypes:2 Files:2 Diagrams:✗ — Health monitoring interfacesTypes:3 Files:3 Diagrams:✗ — Utility classes (C# scripting, request context)Types:1 Files:1 Diagrams:✗ — License validation interopTypes:1 Files:1 Diagrams:✗ — Logging utilitiesTypes:3 Files:3 Diagrams:✗ — Telemetry and observabilityTypes:1 Files:1 Diagrams:✓ — Middleware for request/response processing
Types:2 Files:3 Diagrams:✗ — Push pipeline abstractionsTypes:4 Files:7 Diagrams:✓ — Receive pipeline abstractions
Types:3 Files:3 Diagrams:✗ — Pipeline attribute decoratorsTypes:45+ Files:68 Diagrams:✓— Protocol implementations and connection management
Types:7 Files:11 Diagrams:✓ — Infrastructure channel coordination
Types:5 Files:5 Diagrams:✓ — Concrete recovery implementations (Redis, MongoDB, PostgreSQL)Types:4 Files:4 Diagrams:✓ — Client request/response contextsTypes:2 Files:2 Diagrams:✓ — Infrastructure event handlersTypes:1 Files:1 Diagrams:✗ — Infrastructure-specific exceptionsTypes:12 Files:13 Diagrams:✓ — DI and service registrationTypes:5 Files:5 Diagrams:✓ — Infrastructure-level feedersTypes:2 Files:2 Diagrams:✓ — Pipeline hierarchy invokersTypes:13 Files:13 Diagrams:✓ — Protocol handlers and containers
Types:3 Files:3 Diagrams:✗ — Custom binary streamingTypes:3 Files:3 Diagrams:✓ — MQTT 5.0 broker integrationTypes:3 Files:3 Diagrams:✓ — QUIC protocol supportTypes:3 Files:3 Diagrams:✓ — WebSocket connection handlingTypes:3 Files:3 Diagrams:✓ — WebTransport over HTTP/3Types:2 Files:2 Diagrams:✗ — Push pipeline implementationsTypes:1 Files:1 Diagrams:✓ — Authentication handlers (Basic, OAuth2)Types:1 Files:1 Diagrams:✓ — Authorization handlers (Role, Policy)Types:1 Files:1 Diagrams:✗ — Health check ping/pongTypes:1 Files:1 Diagrams:✓ — Channel metadata retrievalTypes:1 Files:1 Diagrams:✓ — Subscription managementTypes:1 Files:1 Diagrams:✓ — Unsubscription handling Scripts:8 Diagrams:✓ — PowerShell automation
| Package | Version | Description | Documentation |
|---|---|---|---|
| ThunderPropagator.Application | 1.0.1-beta.12 | Core application layer with channels, feeders, pipelines | |
| ThunderPropagator.Infrastructure | 1.0.1-beta.12 | Infrastructure layer with protocol implementations | |
| 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 |
Last generated: December 28, 2025
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 net8.0 is compatible. net8.0-android net8.0-android was computed. net8.0-browser net8.0-browser was computed. net8.0-ios net8.0-ios was computed. net8.0-maccatalyst net8.0-maccatalyst was computed. net8.0-macos net8.0-macos was computed. net8.0-tvos net8.0-tvos was computed. net8.0-windows net8.0-windows was computed. net9.0 net9.0 is compatible. net9.0-android net9.0-android was computed. net9.0-browser net9.0-browser was computed. net9.0-ios net9.0-ios was computed. net9.0-maccatalyst net9.0-maccatalyst was computed. net9.0-macos net9.0-macos was computed. net9.0-tvos net9.0-tvos was computed. net9.0-windows net9.0-windows was computed. net10.0 net10.0 is compatible. net10.0-android net10.0-android was computed. net10.0-browser net10.0-browser was computed. net10.0-ios net10.0-ios was computed. net10.0-maccatalyst net10.0-maccatalyst was computed. net10.0-macos net10.0-macos was computed. net10.0-tvos net10.0-tvos was computed. net10.0-windows net10.0-windows was computed. |
Showing the top 5 NuGet packages that depend on ThunderPropagator.Application:
| Package | Downloads |
|---|---|
|
ThunderPropagator.Debug
ThunderPropagator (Project ARC): High-performance data propagation; effortless, blazingly fast and cloud-native for maximum impact |
|
|
ThunderPropagator
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 |
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 1.0.1-beta.162 | 50 | 6/17/2026 |
| 1.0.1-beta.161 | 53 | 6/17/2026 |
| 1.0.1-beta.160 | 71 | 6/16/2026 |
| 1.0.1-beta.159 | 64 | 6/16/2026 |
| 1.0.1-beta.158 | 59 | 6/16/2026 |
| 1.0.1-beta.157 | 75 | 6/15/2026 |
| 1.0.1-beta.156 | 81 | 6/15/2026 |
| 1.0.1-beta.155 | 78 | 6/15/2026 |
| 1.0.1-beta.154 | 74 | 6/15/2026 |
| 1.0.1-beta.153 | 77 | 6/15/2026 |
| 1.0.1-beta.152 | 78 | 6/15/2026 |
| 1.0.1-beta.151 | 77 | 6/15/2026 |
| 1.0.1-beta.150 | 82 | 6/15/2026 |
| 1.0.1-beta.149 | 81 | 6/15/2026 |
| 1.0.1-beta.148 | 84 | 6/15/2026 |
| 1.0.1-beta.147 | 85 | 6/15/2026 |
| 1.0.1-beta.146 | 78 | 6/15/2026 |
| 1.0.1-beta.145 | 83 | 6/15/2026 |
| 1.0.1-beta.144 | 93 | 6/15/2026 |
| 1.0.1-beta.143 | 73 | 6/15/2026 |
- [ThunderPropagator#302] feat(telemetry): replace per-channel dynamic metric names with tagged single metrics; add missing OTel unit strings