Auderz.Shared.DevMode 1.2.0

dotnet add package Auderz.Shared.DevMode --version 1.2.0
                    
NuGet\Install-Package Auderz.Shared.DevMode -Version 1.2.0
                    
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="Auderz.Shared.DevMode" Version="1.2.0" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Auderz.Shared.DevMode" Version="1.2.0" />
                    
Directory.Packages.props
<PackageReference Include="Auderz.Shared.DevMode" />
                    
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 Auderz.Shared.DevMode --version 1.2.0
                    
#r "nuget: Auderz.Shared.DevMode, 1.2.0"
                    
#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 Auderz.Shared.DevMode@1.2.0
                    
#: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=Auderz.Shared.DevMode&version=1.2.0
                    
Install as a Cake Addin
#tool nuget:?package=Auderz.Shared.DevMode&version=1.2.0
                    
Install as a Cake Tool

Auderz.Shared

Building blocks for .NET 10 microservices: vertical-slice plumbing, permission-based authorization, an event backbone on Kafka with a transactional outbox, a configurable Quartz job manager, Redis caching, localisation and OpenTelemetry observability.

These packages were built for the Auderz platform and are published because they are useful on their own. They are opinionated — the conventions below are baked in rather than configurable — so they suit a service being built to fit them better than one being retrofitted.

Install

One reference gets the core set:

<PackageReference Include="Auderz.Shared" Version="1.1.0" />

Auderz.Shared is a metapackage with no code of its own. It carries a pinned dependency set: Kernel, Vsa, Authorization, Localization, Messaging, Observability, Jobs, Jobs.EntityFrameworkCore, Jobs.Api and Notifications.Abstractions.

Two packages sit deliberately outside it, because not every service should carry them:

<PackageReference Include="Auderz.Shared.Caching" Version="1.1.0" />   
<PackageReference Include="Auderz.Shared.DevMode" Version="1.1.0" />   

Auderz.Shared.DevMode replaces the email, SMS and push senders with capturing ones. Referencing it from a Release build is a service that silently stops sending real notifications, so it belongs behind an environment check or a Condition on the reference.

Packages

Package What it is
Auderz.Shared Metapackage. The pinned core dependency set, no code.
Auderz.Shared.Kernel Domain primitives: Result/Error, Entity, AggregateRoot, domain events, auditing and concurrency contracts, guards, id generation, and IANA time-zone helpers for wall-clock schedules and civil dates.
Auderz.Shared.Vsa Vertical-slice plumbing: MediatR behind an IDispatcher abstraction, a FluentValidation pipeline behaviour that runs before any handler, self-registering endpoint slices, and a response adapter.
Auderz.Shared.Authorization Permission-based authorization: a dynamic policy provider so permissions need no policy registration, an admin wildcard, deny-overrides, and an injectable authorization context carrying the caller's identity, permissions and culture.
Auderz.Shared.Localization Embedded per-assembly JSON translation dictionaries merged at start-up, CLDR plural rules, and caller-culture formatting. Each assembly ships its own file and adds to the set.
Auderz.Shared.Messaging Event backbone: a versioned wire envelope, a transactional outbox with a claim-based relay, a Kafka producer, and a consumer host with idempotent deduplication and dead-lettering.
Auderz.Shared.Caching Redis caching with stampede protection, negative caching, stale-while-revalidate, three invalidation patterns, and a distributed geo index.
Auderz.Shared.Observability OpenTelemetry traces and metrics, Serilog with a console and Seq sink, correlation-id propagation, and liveness/readiness endpoint conventions.
Auderz.Shared.Notifications.Abstractions IEmailSender, ISmsSender, IPushSender, IOneTimeCodeGenerator and their message contracts. Contracts only — no provider.
Auderz.Shared.DevMode Development-only sinks: captured email, SMS and push, predictable one-time codes, and a /_dev inbox with live updates.
Auderz.Shared.Jobs A configurable background job manager on Quartz.NET 4: job definitions stored in the database with cron, time zone, enable/disable, JSON parameters, concurrency mode, misfire policy, retry and run history.
Auderz.Shared.Jobs.EntityFrameworkCore SQL Server persistence for the job manager, a sp_getapplock-based execution lock so one node runs a job at a time, and the Quartz host wiring.
Auderz.Shared.Jobs.Api The job manager's admin API as vertical slices: list, edit a schedule, pause, resume, trigger now, read run history.

Requirements

  • .NET 10. There is no multi-targeting and no netstandard fallback.
  • SQL Server for the job manager, because Quartz's ADO job store with clustering needs it. Everything else is storage-agnostic.
  • Kafka for Auderz.Shared.Messaging, Redis for Auderz.Shared.Caching — both optional at the package level and switchable off in configuration, so a service runs locally without them.

Quick start

WebApplicationBuilder builder = WebApplication.CreateBuilder(args);

builder.AddAuderzObservability();

builder.Services.AddAuderzPermissionAuthorization(builder.Configuration);
builder.Services.AddAuderzTranslations(typeof(Program).Assembly);
builder.Services.AddAuderzMessaging(builder.Configuration);
builder.Services.AddAuderzCaching(builder.Configuration);

// Handlers, validators and endpoint slices, discovered by assembly scan.
builder.Services.AddAuderzDispatcher(typeof(Program).Assembly);
builder.Services.AddAuderzEndpoints(typeof(Program).Assembly);

WebApplication app = builder.Build();

app.UseAuderzObservability();
app.UseAuthentication();
app.UseAuthorization();
app.MapAuderzEndpoints();
app.MapAuderzHealthChecks();

await app.RunAsync();

Conventions baked in

  • Vertical Slice Architecture. A feature is a folder holding its own contracts, handler, repository, validators and models — not a row through Domain/Application/Infrastructure projects.
  • CQRS through MediatR, behind IDispatcher. Slices name the Auderz interfaces (ICommand, IQuery<T>, IPagedQuery<T> and their handlers); MediatR does the dispatching, so it can be replaced in one file.
  • All request validation is FluentValidation, run by a pipeline behaviour before any handler sees the request — so it cannot be forgotten when someone adds a slice.
  • Handlers return asom.lib response types (CommandResponse, CommandResponse<T>, PagedCommandResponse<T>), built through one adapter. Domain aggregates return Result/Error and convert at the slice boundary. Paging is asom.lib's PagedDataCriteria end to end and money is its Money struct. If you do not want asom.lib in your graph, these packages are not for you — it is a hard dependency of Kernel.
  • Quartz.NET 4, not 3.x. Auderz.Shared.Jobs targets the single-package Quartz 4: the DependencyInjection, Hosting and SystemTextJson extension packages were folded into Quartz, and referencing them alongside it gives you two copies of the same extension methods. IJob.Execute returns ValueTask.

Versioning

All Auderz.Shared.* packages share one version and are released together. Pin them as a set. A mixed set — Kernel 1.1.0 against Vsa 1.0.0 — does not fail at build; it fails at load with a MissingMethodException, which is a much worse afternoon.

With central package management, keep the individual PackageVersion entries alongside the metapackage and turn on CentralPackageTransitivePinningEnabled: that pins what the metapackage pulls in, so a transitive resolve cannot quietly land a different build.

Versions on nuget.org are permanent. A fix to a released version is the next patch, never a re-push.

Symbols

Symbol packages (.snupkg) are published, so a stack trace through Auderz.Shared.* gives you method names and line numbers. Source stepping is not available — the repository is private.

Licence

MIT. See the licence link on the package page.

Product 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. 
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
1.2.0 84 9/19/2026
1.1.1-beta-1 69 9/15/2026