Rask.Outbox
0.20.0
See the version list below for details.
dotnet add package Rask.Outbox --version 0.20.0
NuGet\Install-Package Rask.Outbox -Version 0.20.0
<PackageReference Include="Rask.Outbox" Version="0.20.0" />
<PackageVersion Include="Rask.Outbox" Version="0.20.0" />
<PackageReference Include="Rask.Outbox" />
paket add Rask.Outbox --version 0.20.0
#r "nuget: Rask.Outbox, 0.20.0"
#:package Rask.Outbox@0.20.0
#addin nuget:?package=Rask.Outbox&version=0.20.0
#tool nuget:?package=Rask.Outbox&version=0.20.0
Rask.Outbox
A transactional outbox for Rask.Data entities — durable, crash-safe domain-event delivery on the app's own database, with no broker or Redis.
- Mark a domain event
IOutboxEventand it's written to anOutboxMessagetable in the same transaction as the change that raised it — so an event is never lost, and never fires for a change that rolled back. - A background
OutboxProcessorpolls the table and publishes each message through Rask.Cqrs (IDispatcher.PublishAsync) — at-least-once, with retries and an attempt count. - Published messages are purged after
RetentionPeriod(default 7 days) so the table doesn't grow forever. Dead letters are never purged — they have noProcessedAtfor the predicate to match. - Metrics on the
Rask.Outboxmeter: processed / failed / dead-lettered counters, a duration histogram, and pending / dead-letter gauges.rask.outbox.deadlettersis the one to alert on. - A source generator registers every
IOutboxEventtype for reflection-free lookup on the drain path.
Use
public sealed record OrderPlaced(Guid Id) : IOutboxEvent; // raised on your Entity
// Program.cs
builder.Services.AddRaskCqrs();
builder.Services.AddRaskData(o => o.DispatchDomainEventsInProcess = false); // the outbox owns delivery
builder.Services.AddRaskOutbox<AppDbContext>(o => o.PollInterval = TimeSpan.FromSeconds(5));
builder.Services.AddDbContextFactory<AppDbContext>((sp, o) => o
.UseSqlite("Data Source=app.db")
.AddInterceptors(sp.GetServices<ISaveChangesInterceptor>()));
// AppDbContext.OnModelCreating
modelBuilder.AddRaskOutbox(); // maps the OutboxMessage table
db.SaveChanges() now writes an OutboxMessage row for each IOutboxEvent the entity raised, in the
same transaction; the processor drains and publishes them just after commit. Any
INotificationHandler<OrderPlaced> reacts — the same handler works whether events are delivered in-process
(Rask.Data) or via the outbox.
Server-side. The processor is a hosted BackgroundService and the store is your EF Core database
(SQLite by default). Part of the Rask framework. MIT licensed.
| 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.EntityFrameworkCore (>= 10.0.10)
- Microsoft.Extensions.Hosting.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.10)
- Rask.Cqrs (>= 0.20.0)
- Rask.Data (>= 0.20.0)
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Rask.Outbox:
| Package | Downloads |
|---|---|
|
Rask.Dashboard
A built-in operator dashboard for the Rask One Person Framework batteries. Mounts at /_rask and shows the outbox, background jobs, queued mail and cache from the application's own database — queue depth, dead letters, the errors behind them, stored email previews, the recurring-job schedule, SQLite pragmas and backup status. A live log tail is built in, and becomes a searchable history when Rask.Logging is installed. Panels appear only for the batteries the app actually registered. Protected by an authorization policy that fails closed outside Development. |
|
|
Rask
The one reference a Rask application needs, server or browser. On net10.0 it brings the ASP.NET host plus every battery — database, mediator, background jobs, transactional email, cache, outbox, operator dashboard, durable logs, Web Push, and SQLite snapshots and continuous backup — with RaskApp.Create(args) as the entry point. On net10.0-browser it brings the WebAssembly host, the source-generated mediator, the query cache and remote dispatch. Everything referenced is wired and on; app.Configure(c => c.Jobs.Off()) is how an app does without one. Reference Rask.Server for a lean host with no database. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.20.1-alpha.0.254 | 0 | 9/8/2026 |
| 0.20.1-alpha.0.252 | 0 | 9/8/2026 |
| 0.20.1-alpha.0.251 | 0 | 9/8/2026 |
| 0.20.1-alpha.0.250 | 0 | 9/8/2026 |
| 0.20.1-alpha.0.248 | 0 | 9/8/2026 |
| 0.20.1-alpha.0.247 | 0 | 9/8/2026 |
| 0.20.1-alpha.0.246 | 30 | 9/7/2026 |
| 0.20.1-alpha.0.245 | 30 | 9/7/2026 |
| 0.20.1-alpha.0.243 | 32 | 9/7/2026 |
| 0.20.1-alpha.0.242 | 33 | 9/7/2026 |
| 0.20.1-alpha.0.241 | 32 | 9/7/2026 |
| 0.20.1-alpha.0.240 | 36 | 9/7/2026 |
| 0.20.1-alpha.0.238 | 34 | 9/7/2026 |
| 0.20.1-alpha.0.237 | 31 | 9/7/2026 |
| 0.20.1-alpha.0.236 | 34 | 9/7/2026 |
| 0.20.1-alpha.0.235 | 37 | 9/7/2026 |
| 0.20.1-alpha.0.234 | 30 | 9/7/2026 |
| 0.20.1-alpha.0.233 | 34 | 9/7/2026 |
| 0.20.1-alpha.0.232 | 31 | 9/7/2026 |
| 0.20.0 | 115 | 8/6/2026 |