Push.WebPush
1.0.1
dotnet add package Push.WebPush --version 1.0.1
NuGet\Install-Package Push.WebPush -Version 1.0.1
<PackageReference Include="Push.WebPush" Version="1.0.1" />
<PackageVersion Include="Push.WebPush" Version="1.0.1" />
<PackageReference Include="Push.WebPush" />
paket add Push.WebPush --version 1.0.1
#r "nuget: Push.WebPush, 1.0.1"
#:package Push.WebPush@1.0.1
#addin nuget:?package=Push.WebPush&version=1.0.1
#tool nuget:?package=Push.WebPush&version=1.0.1
Push.WebPush
Self-hosted Web Push (VAPID) provider for .NET. Sends browser push notifications directly to the browser vendor's push gateway using a VAPID keypair you generate and own — no Firebase/FCM, no third-party push service, no account. Per-subscription delivery results with expired-subscription (404/410) detection so you can prune dead subscriptions.
Wraps Lib.Net.Http.WebPush (VAPID signing +
aes128gcm payload encryption).
Generate VAPID keys (once)
npx web-push generate-vapid-keys
Put the private key in server config (WebPush:PrivateKey), hand the public key to the browser.
Register
builder.Services.AddWebPush(builder.Configuration); // binds the "WebPush" section
// or: builder.Services.AddWebPush(o => { o.PublicKey = ...; o.PrivateKey = ...; o.Subject = "mailto:hello@dloizides.com"; });
Send
public sealed class MyService(IWebPushProvider push)
{
public async Task NotifyAsync(IReadOnlyList<WebPushSubscription> subs)
{
var result = await push.SendAsync(new WebPushMessage
{
Subscriptions = subs,
Title = "New message",
Body = "You have a new notification",
Url = "/inbox",
});
foreach (var gone in result.ExpiredEndpoints) { /* delete from your store */ }
}
}
SendAsyncnever throws for delivery failures — transport/per-subscription errors are onWebPushSendResult.WebPushSubscriptionis exactly what the browser'sPushManager.subscribe()returns (endpoint+keys.p256dh+keys.auth).ExpiredEndpointslists subscriptions the push service reported as gone (404/410).
Options
| Option | Default | Notes |
|---|---|---|
Subject |
mailto:hello@dloizides.com |
VAPID subject (mailto/URL identifying the sender). |
PublicKey |
(none) | VAPID public key (base64url). Without keys the provider is a no-op. |
PrivateKey |
(none) | VAPID private key (base64url) — secret, server-side only. |
License
MIT
| 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
- Lib.Net.Http.WebPush (>= 3.3.1)
- Microsoft.Extensions.Http (>= 8.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.0)
- Microsoft.Extensions.Options (>= 8.0.0)
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.0.1 | 154 | 6/16/2026 |