Skip to content

Packages

Every published package, by repository. All of them are on nuget.org — no private feed and no token. Project templates reference the right ones for you; this page is for assembling a project by hand.

Source generator packages are referenced as analysers:

xml
<PackageReference Include="Hardened.Web.SourceGenerator" Version="..."
                  OutputItemType="Analyzer" ReferenceOutputAssembly="false" />

Hardened.Framework

github.com/ipjohnson/Hardened.Framework

Core

PackageContents
Hardened.Shared.RuntimeModule entry points, configuration binding, environment, application lifecycle, metrics
Hardened.Shared.Testing[HardenedTest], [Mock], ITestContext, the retry engine. xUnit v3
Hardened.SourceGeneration.TestingHarness for testing source generators against a real compilation

Requests

PackageContents
Hardened.Requests.AbstractIExecutionContext, IExecutionRequest, IExecutionResponse, IExecutionFilter
Hardened.Requests.RuntimeThe pipeline: filters, serialisation, validation, error handling
Hardened.Requests.TestingTest doubles, and the transport conformance suite every IExecutionRequest is held to
Hardened.Requests.Serializers.NewtonsoftA Newtonsoft.Json serialiser, for payloads System.Text.Json cannot round-trip

Web

PackageContents
Hardened.Web.RuntimeRouting, CORS, the OpenAPI document and reference page
Hardened.Web.Kestrel.Runtime[KestrelRuntime] and HardenedKestrelApplication. Kestrel without the ASP.NET Core request pipeline, and the host to reach for first
Hardened.Web.AspNetCore.Runtime[AspNetCoreRuntime] and app.UseHardened(), when you need ASP.NET Core's middleware, authentication or hosting diagnostics
Hardened.Web.StaticContentStatic file serving, manifests and content compression
Hardened.Web.TestingITestWebApp, TestWebRequest, TestWebResponse

Templates

Two unrelated senses of the word, in two packages.

PackageContents
Hardened.TemplatesThe dotnet new project templates: hardened-web, hardened-function, hardened-library. See Project templates
Hardened.Templates.RazorBladeView rendering: HardenedRazorTemplates, HardenedHtmlTemplate<T>. Renders .cshtml with no ASP.NET Core dependency. See Views

IHardenedResponseOutput<T> — what a view implements — and the [TemplateBase] / [TemplateContentType] vocabulary a rendering engine's marker declares both live in Hardened.Requests.Abstract, so naming a view or shipping another engine does not depend on RazorBlade.

Console

PackageContents
Hardened.Commands[Command], [Option], ICommandHandler<T>, the parser and help printer
Hardened.Console.SourceGeneratorConsole entry points and command definitions

Not on the current release line

Both are last published at 0.4.0-rc1000 and are not part of the current release. They will not have the fixes the packages above carry, and mixing release lines within one application is not a supported combination.

Source generators

Analyzers do not flow through a package reference, so a generator has to be referenced by the project that needs it. Referencing only the runtime packages produces an application that compiles and answers 404 to everything.

PackageEmits
Hardened.Library.SourceGeneratorModule wiring for [HardenedModule]PopulateServiceCollection, CreateServiceProvider and the configuration implementations. Carries Hardened.DependencyModules.SourceGenerator inside it, so that one is not referenced separately
Hardened.Web.SourceGeneratorRoute tables and request handlers for [Get], [Post], [Put], [Delete], [Patch]
Hardened.Function.SourceGeneratorFunction handlers for [HardenedFunction]
Hardened.Validation.SourceGeneratorValidators from constraint attributes, and their registration
Hardened.OpenApi.SourceGeneratorFront end: an OpenAPI document into the normalised model
Hardened.Smithy.SourceGeneratorFront end: a Smithy model into the normalised model. Needs the Smithy CLI on PATH
Hardened.Idl.SourceGeneratorBack end for both front ends: models, service interfaces, handlers, routes and validation
Hardened.SourceGeneratorThe shared generator library the others build on. Not referenced directly

Hardened.Amz

github.com/ipjohnson/Hardened.Amz

Lambda runtimes

PackageContents
Hardened.Amz.Shared.Lambda.RuntimeBootstrap, structured logging, embedded CloudWatch metrics, stage and region types
Hardened.Amz.Function.Lambda.Runtime[LambdaFunctionModule], function invocation and the batch execution filter base
Hardened.Amz.Function.Lambda.StreamingResponse streaming for function handlers
Hardened.Amz.Web.Lambda.Runtime[LambdaWebModule], API Gateway proxy events onto the pipeline
Hardened.Amz.Web.Lambda.StreamingResponse streaming for web applications
Hardened.Amz.Web.Lambda.HarnessRuns a Lambda web application behind a local HTTP listener
Hardened.Amz.Function.DDB.RuntimeDynamoDB Streams, with [NewImage] and [OldImage]
Hardened.Amz.Function.Sqs.RuntimeSQS batches, with partial batch responses

Lambda testing

PackageContents
Hardened.Amz.Shared.Lambda.TestingTestLambdaContext and shared harness pieces
Hardened.Amz.Function.Lambda.Testing[LambdaFunctionTesting], LambdaTestApp
Hardened.Amz.Function.DDB.TestingTestDynamoDbStream
Hardened.Amz.Function.Sqs.TestingTestSqsApp

Clients and infrastructure

PackageContents
Hardened.Amz.DynamoDbClientIDynamoDbClientProvider, DynamoDbOptions, [DynamoDbModule]
Hardened.Amz.DynamoDbClient.Testing[LocalDynamoDb], LocalDynamoDb — DynamoDB Local in a container
Hardened.Amz.CdkCDK constructs, stage and region types, the deploy command

Source generators

PackageEmits
Hardened.Amz.Function.Lambda.SourceGeneratorLambda bootstrap and handler wiring
Hardened.Amz.Web.Lambda.SourceGeneratorAPI Gateway entry points and routing

Versioning

Both repositories release on the same version line, from a v* tag:

RepositoryReleasedContinuous feed
Hardened.Framework{line}-rc1000{line}-preview{build} on every push to main
Hardened.Amz{line}-rc1000{line}-preview{build} on every push to main

The current line is 0.17.0-rc1000. Releases go to nuget.org; the continuous feed is GitHub Packages. Under one line, preview sorts below rc, so a preview never shadows the release it precedes.

Pin exact versions across a solution. The generated code and the runtime it targets ship together, so mixing framework builds within one application is not a supported combination.

Avoid a floating pin. A float that stops matching anything new does not fail — it keeps resolving whatever it last found, with a green build throughout.

The one deliberate float is the Hardened.Amz version in the Lambda project templates, which is open-ended (0.*-*). The two repositories release in sequence, so for a short window the framework is ahead and an exact pin would name a version that does not exist yet. The template gate prints the version it resolved to.

Released under the MIT License.