Healthie.NET.Temporal 4.1.4

Prefix Reserved
dotnet add package Healthie.NET.Temporal --version 4.1.4
                    
NuGet\Install-Package Healthie.NET.Temporal -Version 4.1.4
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Healthie.NET.Temporal" Version="4.1.4" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Healthie.NET.Temporal" Version="4.1.4" />
                    
Directory.Packages.props
<PackageReference Include="Healthie.NET.Temporal" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Healthie.NET.Temporal --version 4.1.4
                    
#r "nuget: Healthie.NET.Temporal, 4.1.4"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Healthie.NET.Temporal@4.1.4
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Healthie.NET.Temporal&version=4.1.4
                    
Install as a Cake Addin
#tool nuget:?package=Healthie.NET.Temporal&version=4.1.4
                    
Install as a Cake Tool

Healthie.NET - Trust your uptime

Healthie.NET.Temporal

NuGet

▶ Live demo — board.healthie-dotnet.dev — a read-only Healthie.NET dashboard watching real status pages (Anthropic, OpenAI, GitHub, Cloudflare, and more), built from these packages. Full documentation at healthie-dotnet.dev.

Schedules pulse checks with Temporal, so the schedule lives in the cluster rather than in the process.

Installation

dotnet add package Healthie.NET.Temporal

Usage

using Healthie.Scheduling.Temporal;
using Temporalio.Extensions.Hosting;

builder.Services.AddSingleton<ITemporalClient>(await TemporalClient.ConnectAsync(new("localhost:7233")));

builder.Services
    .AddHealthie(typeof(Program).Assembly)
    .AddHealthieTemporal(options => options.TaskQueue = "healthie");

// A worker must be listening on the same queue, or the schedules fire and nothing runs.
builder.Services
    .AddHostedTemporalWorker("healthie")
    .AddScopedActivities<PulseCheckerActivities>()
    .AddWorkflow<PulseCheckerWorkflow>();

The Temporal client is yours to create: its address, namespace, TLS and API key are your decisions, and a library that picked them would be picking which cluster your workflows run on.

What it buys, and what it costs

Buys: the schedule survives a restart and a redeploy, each occurrence is handed to exactly one worker however many replicas are running, and every run has a history somebody can look at.

Costs: a Temporal cluster. If you do not already run one, this is the wrong trade — Healthie.NET.Hangfire gives you the same survives-a-restart, runs-once-across-replicas properties against a database you probably already have, and the built-in timer needs nothing at all.

The SDK also carries a native Rust core, so it is a large dependency: it adds a few hundred megabytes to a build output. Worth knowing before adding it to something small.

Details

Schedules are named healthie-<checker name>, so they are recognisable in the Temporal UI and cannot collide with your own.

Overlap policy is Skip. A checker already refuses to run on top of itself, so buffering would queue occurrences that each return immediately — and a check that is late is worth less than the next one, which is current.

Cron expressions use Healthie.NET's standard Unix form: five fields, or six with leading seconds. Temporal uses seven fields when seconds are present because its sixth field is a year, so the adapter appends a wildcard year to Healthie.NET's six-field form. Fixed periods become interval specs, which Temporal counts from an epoch rather than from creation time, so replicas agree on when a schedule fires. Temporal's one-second minimum is validated before an existing schedule is replaced.

The workflow does nothing but call an activity — workflow code must be deterministic, and a pulse check is not — and the activity is given the checker's name, because a schedule outlives the process that created it and a checker does not survive being serialized.

Testing

The mapping from a schedule to a Temporal specification is unit-tested. Everything else needs a running cluster, so it is not exercised in the default test suite — that suite deliberately requires no infrastructure. Run it against a dev server (temporal server start-dev) when changing this package.

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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
4.1.4 92 9/30/2026
4.1.3 90 9/29/2026
4.1.2 114 9/12/2026
4.1.1 136 8/14/2026
4.1.0 113 7/30/2026
4.0.0 124 7/30/2026

### Fixed

- Timer-scheduled checks now continue after an individual scheduling caller cancels, while host
 shutdown still stops them; an older overlapping result can no longer overwrite newer checker state.
- Bulk dashboard state reads and AI diagnoses now avoid redundant state-provider calls.
- Workflow dispatch inputs are passed to shell steps as environment variables, preventing command
 injection through a supplied version or branch name.
- Dashboard status text has stronger contrast, and checker details expose their meaning to assistive
 technology.

Full changelog: https://github.com/ivanvyd/Healthie.NET/blob/v4.1.4/CHANGELOG.md