Healthie.NET.Abstractions
3.1.3
Prefix Reserved
See the version list below for details.
dotnet add package Healthie.NET.Abstractions --version 3.1.3
NuGet\Install-Package Healthie.NET.Abstractions -Version 3.1.3
<PackageReference Include="Healthie.NET.Abstractions" Version="3.1.3" />
<PackageVersion Include="Healthie.NET.Abstractions" Version="3.1.3" />
<PackageReference Include="Healthie.NET.Abstractions" />
paket add Healthie.NET.Abstractions --version 3.1.3
#r "nuget: Healthie.NET.Abstractions, 3.1.3"
#:package Healthie.NET.Abstractions@3.1.3
#addin nuget:?package=Healthie.NET.Abstractions&version=3.1.3
#tool nuget:?package=Healthie.NET.Abstractions&version=3.1.3

Healthie.NET.Abstractions
Core interfaces, models, enums, and the PulseChecker abstract base class for the Healthie.NET health monitoring framework. This package contains no implementations -- only the contracts and types that all other Healthie.NET packages depend on.
Installation
dotnet add package Healthie.NET.Abstractions
Usage
Inherit from PulseChecker and override CheckAsync to implement a health check:
using Healthie.Abstractions;
using Healthie.Abstractions.Enums;
using Healthie.Abstractions.Models;
using Healthie.Abstractions.StateProviding;
public class DatabasePulseChecker : PulseChecker
{
private readonly IDbConnectionFactory _db;
public DatabasePulseChecker(IStateProvider stateProvider, IDbConnectionFactory db)
: base(stateProvider, PulseInterval.Every30Seconds, unhealthyThreshold: 3)
{
_db = db;
}
public override async Task<PulseCheckerResult> CheckAsync(
CancellationToken cancellationToken = default)
{
using var conn = await _db.CreateConnectionAsync(cancellationToken);
return new PulseCheckerResult(PulseCheckerHealth.Healthy, "OK");
}
}
Key Types
| Type | Description |
|---|---|
PulseChecker |
Abstract base class -- inherit to create a health check. |
IPulseChecker |
Full pulse checker contract (IPulse + IState + IAsyncDisposable). |
IStateProvider |
Contract for state persistence (GetStateAsync / SetStateAsync). |
IPulseScheduler |
Contract for scheduling (ScheduleAsync / UnscheduleAsync). |
PulseCheckerResult |
Record returned from CheckAsync with Health and Message. |
PulseCheckerState |
Record holding interval, threshold, failure count, history, tags, group, pin, and last result. |
PulseCheckerHealth |
Enum: Healthy, Suspicious, Unhealthy. |
PulseInterval |
Enum: 13 intervals from EverySecond to Every5Minutes. |
HealthieOptions |
Global options (e.g. MaxHistoryLength). |
Describing a checker
A checker can say where it belongs and what it is, and both are picked up by the dashboard.
public class RedisCachePulseChecker(IStateProvider stateProvider) : PulseChecker(stateProvider)
{
public override string DisplayName => "Redis Cache";
// One group at most: this is where the checker lives.
public override string DefaultGroup => "Data Stores";
// Any number of tags: these describe it, and may cut across groups.
public override IReadOnlyList<string> DefaultTags => ["tier-1", "cache"];
public override Task<PulseCheckerResult> CheckAsync(CancellationToken cancellationToken = default)
=> /* ... */;
}
Both seed PulseCheckerState the first time a checker runs and are never applied again, so a
change made later -- through SetGroupAsync / SetTagsAsync, or on the dashboard -- survives a
restart rather than being reset to what the code says.
SetPinnedAsync sorts a checker above the rest. A pin is stored with the checker rather than per
viewer, on the grounds that the checks worth watching are the same for everyone.
See Also
| 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 was computed. 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
- Microsoft.Extensions.Hosting.Abstractions (>= 10.0.10)
-
net8.0
- Microsoft.Extensions.Hosting.Abstractions (>= 8.0.1)
NuGet packages (15)
Showing the top 5 NuGet packages that depend on Healthie.NET.Abstractions:
| Package | Downloads |
|---|---|
|
Healthie.NET.DependencyInjection
Dependency injection registration helpers for Healthie.NET -- assembly scanning, service registration, and a built-in timer scheduler. |
|
|
Healthie.NET.Api
ASP.NET Core API endpoints for Healthie.NET -- exposes RESTful endpoints for managing pulse checkers with configurable routing and authorization. |
|
|
Healthie.NET.Dashboard
Blazor health monitoring dashboard for Healthie.NET -- zero-dependency UI with real-time event-driven state updates, checker management, and configurable authorization. |
|
|
Healthie.NET.Quartz
Quartz.NET scheduling provider for Healthie.NET -- persistent, CRON-based pulse check scheduling with clustering support. |
|
|
Healthie.NET.CosmosDb
Azure CosmosDB state provider for Healthie.NET -- persists pulse checker state to CosmosDB for durable cross-restart storage. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 4.1.0 | 64 | 7/30/2026 |
| 4.0.0 | 62 | 7/30/2026 |
| 3.1.4 | 225 | 7/19/2026 |
| 3.1.3 | 209 | 7/18/2026 |
| 3.1.2 | 221 | 7/18/2026 |
| 3.1.1 | 214 | 7/18/2026 |
| 3.1.0 | 231 | 7/17/2026 |
| 3.0.0 | 224 | 7/15/2026 |
| 2.3.0 | 1,967 | 2/24/2026 |
| 2.1.1-beta | 193 | 2/24/2026 |
| 2.0.0-beta | 198 | 2/22/2026 |
| 1.1.0-beta | 195 | 5/31/2025 |
| 1.0.0-beta | 276 | 5/18/2025 |
### Changed
- The dashboard now scrolls within its own board rather than the page, so its scrollbar is themed to
match the board -- a thin, rounded bar in the board's own line colour, on both the dark and light
themes -- instead of the platform's wide light-grey default running down the side of a dark tool.
The board owns a full-viewport (`100dvh`) scroll region, and a scroll that reaches its end no
longer drags the page behind an embedded board.
### Fixed
- The prerendered dashboard no longer risks dropping its own circuit on a board with much state.
3.1.1 carried the states from prerender to the interactive render by persisting them into the
page, which put the whole board -- every checker and all its history -- on the SignalR circuit.
That payload grows with each checker, and past SignalR's default 32 KB message limit the hub
rejects it and the circuit never starts: the board freezes on the prerendered snapshot, styled but
not live. The states now stay on the server between the two renders (Blazor Server holds them there
already) and only a short-lived token travels to the browser and back, so the wire cost is constant
whatever the size of the board. A token that no longer resolves falls back to a fresh read. No
SignalR limit needs raising, so no extra memory or denial-of-service exposure comes with it.
### Fixed
- The dashboard no longer flickers on load when it is prerendered. Hosted the usual
way -- `<HealthieDashboard />` on an interactive-server page, which prerenders by
default -- the server rendered the full board, then the circuit connected a moment
later and the component started again from an empty state, read every checker afresh,
and briefly replaced the board already on screen. In that gap a status icon, which the
dashboard stylesheet sizes against its surroundings, painted for a frame before those
rules applied and filled the board as one large ring. The states the prerender reads
are now carried across to the interactive render through `PersistentComponentState`,
so the first interactive render matches the prerendered one: nothing is replaced, no
frame shows an unsized icon, and the redundant second read of every checker is gone.
Full changelog: https://github.com/ivanvyd/Healthie.NET/blob/v3.1.3/CHANGELOG.md