Hulaki 0.1.0-alpha.2
dotnet add package Hulaki --version 0.1.0-alpha.2
NuGet\Install-Package Hulaki -Version 0.1.0-alpha.2
<PackageReference Include="Hulaki" Version="0.1.0-alpha.2" />
<PackageVersion Include="Hulaki" Version="0.1.0-alpha.2" />
<PackageReference Include="Hulaki" />
paket add Hulaki --version 0.1.0-alpha.2
#r "nuget: Hulaki, 0.1.0-alpha.2"
#:package Hulaki@0.1.0-alpha.2
#addin nuget:?package=Hulaki&version=0.1.0-alpha.2&prerelease
#tool nuget:?package=Hulaki&version=0.1.0-alpha.2&prerelease
Hulaki
Deliver a message to people and accounts on chat, push and social platforms from .NET, with one API and an outcome per recipient. Source and docs.
Status: in development. The API can change until 1.0.
This package holds the core (message model, retry rules, idempotency, text counting, markup),
every channel that needs no extra dependency, and AddHulaki() for dependency injection. Email
over SMTP brings MailKit, so it is a separate package,
Hulaki.Email.
| Channel | Type | Docs |
|---|---|---|
| Telegram Bot API | Hulaki.Telegram.TelegramChannel |
telegram |
| Discord webhook | Hulaki.Discord.DiscordChannel |
discord |
| Slack incoming webhook | Hulaki.Slack.SlackChannel |
slack |
| Teams Workflows webhook | Hulaki.Teams.TeamsChannel |
teams |
| ntfy | Hulaki.Ntfy.NtfyChannel |
ntfy |
| Web Push (VAPID, RFC 8291) | Hulaki.WebPush.WebPushChannel |
webpush |
| Signed JSON webhook | Hulaki.Webhook.WebhookChannel |
webhook |
| Bluesky | Hulaki.Bluesky.BlueskyChannel |
bluesky |
| Mastodon | Hulaki.Mastodon.MastodonChannel |
mastodon |
builder.Services.AddHulaki()
.AddTelegram("alerts", builder.Configuration.GetSection("Hulaki:Channels:alerts"));
AddHulaki() registers HulakiClient as a singleton over every registered channel, and an
in-memory idempotency store unless you register your own IIdempotencyStore. Each channel gets
options bound with the configuration binding generator (Native AOT safe), validation at startup,
and a named HttpClient (hulaki.<name>) with a 30 second timeout and no request logging,
because some platforms put the secret in the URL path. Do not add a retry or resilience handler
to these clients: it would resend requests the platform may already have acted on.
net10.0only, trim and Native AOT compatible. Channels you never construct are trimmed away.- Retries only where the platform provably did not act. A lost answer is reported as
Unknown. - No token, recipient address or message text in logs, traces or error messages.
Hulaki is not affiliated with any of these platforms. Source, issues and license (MIT): https://github.com/sanamhub/hulaki
| 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
- Microsoft.Extensions.Http (>= 10.0.12)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.12)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 10.0.12)
- System.Threading.RateLimiting (>= 10.0.12)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Hulaki:
| Package | Downloads |
|---|---|
|
Hulaki.Email
Hulaki provider for email through FreeTierMail: one SMTP server by default, or switch on UseFreeTierMail to send through Resend, Brevo and other accounts with quota-aware failover. A plain text and an HTML part, outcomes mapped to Hulaki's retry rules. |
|
|
Hulaki.Testing
Test helpers for Hulaki: a recording fake channel, a scripted HTTP handler, and the xUnit v3 contract tests every provider, ours or a third party's, should pass. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.1.0-alpha.2 | 562 | 10/15/2026 |
| 0.1.0-alpha.1 | 222 | 10/8/2026 |