Releases: RecurPixel/Notify
Releases · RecurPixel/Notify
v0.2.0
RecurPixel.Notify v0.2.0 — Stable Release
🎉 STABLE RELEASE — Production ready with 35+ notification adapters across 13+ channels
What's New
- 21 new or restructured packages — complete channel expansion
- Zero SaaS dependency — pure .NET library, full control
- Auto-discovery — install package, configure credentials, go
- DI-native — single
AddRecurPixelNotify()call - Delivery hooks — custom logging to your database
- Retry with backoff — built-in resilience
- Fallback chains — automatic failover between providers
- Scoped service support — DbContext and scoped dependencies work
Adapter Coverage
All adapters validated and production-ready:
| Package | Provider | Channel | Unit Tested | Integration Tested |
|---|---|---|---|---|
| Email.SendGrid | Twilio SendGrid | ✅ | ✅ | |
| Email.Smtp | Any SMTP | ✅ | ✅ | |
| Sms.Twilio | Twilio | SMS | ✅ | ✅ |
| Push.Fcm | Firebase | Push | ✅ | ✅ |
| Slack | Slack Webhooks | Team Chat | ✅ | ✅ |
| Discord | Discord Webhooks | Team Chat | ✅ | ✅ |
| Teams | Microsoft Teams | Team Chat | ✅ | 🔲 |
| Telegram | Telegram Bot API | Social | ✅ | ✅ |
| WhatsApp.Twilio | Twilio WhatsApp | ✅ | ✅ | |
| InApp | Hook-based | In-App | ✅ | ✅ |
| ...and 25 more adapters |
See changelogs/CHANGELOG.md for complete list and breaking changes from beta.
What's Next: v0.3.0
Roadmap includes:
- Dashboard Package — delivery tracking and observability
- Notification Log — queryable delivery history
- Bulk Batch Grouping — group related notifications
- REST API — query delivery logs and trigger notifications
- Circuit Breaker — automatic provider failover on sustained failures
See v0.3.0-DASHBOARD-PLAN.md for detailed architecture.
v0.2.0-beta.2 — CI Fix
Fixes
- Fixed GitHub Actions integration tests configuration loading
appsettings.integration.jsonis now optional in CI — tests gracefully skip when credentials are missing
Status: Ready for NuGet publication
v0.2.0-beta.1
[0.2.0-beta.1] — March 2026
New Packages
RecurPixel.Notify— merged meta-package replacing the separate Core + Orchestrator installRecurPixel.Notify.Email.AzureCommEmailRecurPixel.Notify.Sms.AzureCommSmsRecurPixel.Notify.MattermostRecurPixel.Notify.RocketChat
Breaking Changes
TriggerAsyncreturn type — now returnsTriggerResultwithIReadOnlyList<NotifyResult> ChannelResults,AllSucceeded,AnySucceeded, andFailuresfor per-channel inspectionBulkTriggerAsyncreturn type — now returnsBulkTriggerResultwith oneTriggerResultper input contextTriggerResult/BulkTriggerResultmoved to Core — namespace is nowRecurPixel.Notify.Core.Models- Package restructure —
RecurPixel.Notifyis now the primary install (Core + Orchestrator). Users of beta.1 should removeRecurPixel.Notify.CoreandRecurPixel.Notify.Orchestratorand addRecurPixel.Notify - Core setup method renamed —
AddRecurPixelNotifyin Core renamed toAddNotifyOptionsto avoid confusion with the Orchestrator overload InAppOptions.OnDeliverrenamed toUseHandler— aligns with the handler-as-implementation pattern- Dead properties removed —
NotifyOptions.OnDeliveryandNotifyOptions.InAppremoved; useOrchestratorOptions.OnDeliveryandAddInAppChannelrespectively - Namespace reorganization — Major cleanup for cleaner public API surface:
- Models (
NotificationPayload,NotifyResult,BulkNotifyResult,NotifyContext,NotifyUser) moved fromRecurPixel.Notify.Core.Models→RecurPixel.Notify - Channel interfaces and bases (
INotificationChannel,NotificationChannelBase,ChannelAdapterAttribute) moved fromRecurPixel.Notify.Core.Channels→RecurPixel.Notify.Channels - Core options (
NotifyOptions,RetryOptions,FallbackOptions,BulkOptions) moved fromRecurPixel.Notify.Core.Options→RecurPixel.Notify - Channel-specific options (
EmailOptions,SmsOptions,PushOptions,WhatsAppOptions) and all provider credential options moved fromRecurPixel.Notify.Core.Options.*→RecurPixel.Notify.Configuration - All public channel implementation classes moved to
RecurPixel.Notify.Channels(e.g.,SendGridChannel,SlackChannel,TwilioSmsChannel, etc.) - Services (
INotifyService,NotifyService) moved fromRecurPixel.Notify.Orchestrator.Services→RecurPixel.Notify - All adapter
ServiceCollectionExtensionsmoved fromRecurPixel.Notify.[Channel].[Provider]→RecurPixel.Notify
- Models (
Bug Fixes
- Simple channel registration key mismatch — all simple channels (InApp, Slack, Discord, Teams, Telegram, Facebook, Line, Viber, Mattermost, RocketChat) now register and resolve as
"channel:default" IOptions<NotifyOptions>not registered — both rawNotifyOptionsPOCO andIOptions<NotifyOptions>are now registered;ChannelDispatcherreceives the correct options- Adapter credentials not reaching DI —
ConfigureAllKnownOptionsnow maps every provider's credentials from theNotifyOptionsPOCO intoIOptions<TAdapterOptions>at startup; adapters constructed by DI receive real credentials instead of empty defaults - Telegram
ChatIdfallback —TelegramChannelnow falls back toTelegramOptions.ChatIdwhenpayload.Tois empty, with a clear error if neither is set - Misleading XML doc on
AddSmtpChannel— corrected; the method is not called internally byAddRecurPixelNotify
DX Improvements
- Single setup call —
AddRecurPixelNotify(Action<NotifyOptions>, Action<OrchestratorOptions>)combines options binding, adapter auto-registration, and orchestrator setup in one call - Auto-registration via assembly scanning — install a provider package and configure its credentials; no
Add{X}Channel()call required.[ChannelAdapter]attribute drives discovery at startup - Config-filtered registration — only adapters with credentials present in
NotifyOptionsare registered; unconfigured providers have zero DI footprint - Startup validation —
ValidateActiveProvidersthrowsInvalidOperationExceptionat startup whenProvideris set but credentials are missing — never silently at send time OnDeliverycomposable — multipleOnDelivery/OnDelivery<TService>registrations are additive; all handlers fire in registration orderOnDelivery<TService>scoped resolution — creates a fresh DI scope per call;DbContextand other scoped services are safe to use directly withoutIServiceScopeFactoryAddInAppChannel+UseHandler<TService>— InApp delivery wired via a typed scoped handler;OnDeliveryremains a separate audit hook- Silent no-send warning —
NotifyServicelogs a warning when a channel is in the event definition but has no payload inNotifyContext.Channels - Improved
ResolveAdaptererror — multi-cause diagnostic message when a channel adapter key is not found in DI INotifyServicechannel properties — addedLine,Viber,Mattermost,RocketChatdirect channel properties- All adapter extensions use
TryAddKeyedSingleton— idempotent; explicitAdd{X}Channel()calls and auto-registration no longer conflict
Documentation
- All docs updated —
getting-started.md,usage-tiers.md,quick-start.md,features.mdrewritten to reflect current API - New
examples.md— Tier 1 (single-channel OTP), Tier 2 (e-commerce), Tier 3 (full SDK), and a production-ready pattern with InApp + OnDelivery + event definitions - Scoped services pattern documented —
OnDelivery<TService>andUseHandler<TService>DI scope behaviour explained UseChannelskey names documented — logical channel names only ("email","sms"), not provider names
v0.1.0-beta.1
RecurPixel.Notify v0.1.0-beta.1
First public beta release.
Install
dotnet add package RecurPixel.Notify.Sdk --version 0.1.0-beta.1 --prereleaseOr install individual adapters:
dotnet add package RecurPixel.Notify.Email.SendGrid --version 0.1.0-beta.1 --prereleasePackages (34)
Core
RecurPixel.Notify.Core— Core interfaces, models, and base classesRecurPixel.Notify.Orchestrator— Event system, TriggerAsync, retry, fallback, conditionsRecurPixel.Notify.Sdk— Full SDK meta-package (all channels included)
RecurPixel.Notify.Email.SendGridRecurPixel.Notify.Email.SmtpRecurPixel.Notify.Email.MailgunRecurPixel.Notify.Email.PostmarkRecurPixel.Notify.Email.ResendRecurPixel.Notify.Email.AwsSesRecurPixel.Notify.Email.AzureCommEmail
SMS
RecurPixel.Notify.Sms.TwilioRecurPixel.Notify.Sms.VonageRecurPixel.Notify.Sms.PlivoRecurPixel.Notify.Sms.SinchRecurPixel.Notify.Sms.MessageBirdRecurPixel.Notify.Sms.AwsSnsRecurPixel.Notify.Sms.AzureCommSms
Push
RecurPixel.Notify.Push.FcmRecurPixel.Notify.Push.ApnsRecurPixel.Notify.Push.ExpoRecurPixel.Notify.Push.OneSignal
RecurPixel.Notify.WhatsApp.TwilioRecurPixel.Notify.WhatsApp.MetaCloudRecurPixel.Notify.WhatsApp.Vonage
Chat & Social
RecurPixel.Notify.SlackRecurPixel.Notify.DiscordRecurPixel.Notify.TeamsRecurPixel.Notify.TelegramRecurPixel.Notify.FacebookRecurPixel.Notify.LineRecurPixel.Notify.ViberRecurPixel.Notify.MattermostRecurPixel.Notify.RocketChat
Other
RecurPixel.Notify.InApp
Targets
net8.0(LTS)net10.0(LTS)- Core also supports
netstandard2.1
Note
This is a pre-release beta. The public API is stable but may change based on feedback before v1.0.0.
Report issues at https://github.com/RecurPixel/Notify/issues