Excalibur.Outbox.Postgres
10.0.0-alpha.10
dotnet add package Excalibur.Outbox.Postgres --version 10.0.0-alpha.10
NuGet\Install-Package Excalibur.Outbox.Postgres -Version 10.0.0-alpha.10
<PackageReference Include="Excalibur.Outbox.Postgres" Version="10.0.0-alpha.10" />
<PackageVersion Include="Excalibur.Outbox.Postgres" Version="10.0.0-alpha.10" />
<PackageReference Include="Excalibur.Outbox.Postgres" />
paket add Excalibur.Outbox.Postgres --version 10.0.0-alpha.10
#r "nuget: Excalibur.Outbox.Postgres, 10.0.0-alpha.10"
#:package Excalibur.Outbox.Postgres@10.0.0-alpha.10
#addin nuget:?package=Excalibur.Outbox.Postgres&version=10.0.0-alpha.10&prerelease
#tool nuget:?package=Excalibur.Outbox.Postgres&version=10.0.0-alpha.10&prerelease
Excalibur.Outbox.Postgres
Postgres implementation of the transactional outbox pattern for reliable message delivery.
Part Of
This package is included in the following metapackages:
| Metapackage | Tier | What It Adds |
|---|---|---|
Excalibur.Dispatch.Postgres |
Starter | + Dispatch core + Outbox + Hosting |
Excalibur.Postgres |
Complete | + Inbox + Saga + Leader Election + Audit + Compliance + Data |
Tip: Install
Excalibur.Postgresfor a production-ready PostgreSQL stack with a single package reference.
Schema
The store does not create its tables at runtime. Provision them before the first message is
staged, by running the script shipped inside this package under scripts/:
scripts/001_CreateOutboxSchema.sql
Run it against your target database:
psql -h host -U user -d database -f 001_CreateOutboxSchema.sql
It creates three tables, using the default names:
| Table | Purpose |
|---|---|
outbox |
Staged messages awaiting delivery |
outbox_dead_letters |
Messages that exhausted their retries |
outbox_fence |
Durable leadership high-water mark, kept out of the message table so draining cannot lower it |
If you override SchemaName, OutboxTableName, DeadLetterTableName, or FenceTableName,
rename the corresponding objects in the script to match.
Every statement is guarded with IF NOT EXISTS, so the script is safe to re-run.
Postgres specifics
- All timestamp columns are
TIMESTAMPTZ. A column createdWITHOUT TIME ZONEis shifted by the session timezone on reload, so a scheduled message would become due at the wrong instant. tenant_idisNOT NULL DEFAULT '__untenanted__'. An untenanted message stores the reserved sentinel, notNULL, so there is exactly one way to say a message has no tenant and a scoped predicate always compares a value against a value. The staging path binds the term explicitly, so the default is a backstop for hand-writtenINSERTs.- A database created while
tenant_idwas nullable is converged by002_MakeOutboxTenantTotal.sql, which backfillsNULL(and blank) to the sentinel before applying the constraint. Run it with the processor stopped, and deploy this package version first — the older package binds a raw null tenant and would fail the new constraint. outbox_fence.scope_keymust keep its primary key — the fenced claim and fenced delete upsert withON CONFLICT (scope_key), which requires a matching unique constraint.
| 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
- Ben.Demystifier (>= 0.4.1)
- CloudNative.CloudEvents (>= 2.8.0)
- CloudNative.CloudEvents.SystemTextJson (>= 2.8.0)
- Cronos (>= 0.12.0)
- Dapper (>= 2.1.72)
- Excalibur.Data.Abstractions (>= 10.0.0-alpha.10)
- Excalibur.Dispatch (>= 10.0.0-alpha.10)
- Excalibur.Dispatch.Abstractions (>= 10.0.0-alpha.10)
- Excalibur.Outbox (>= 10.0.0-alpha.10)
- FluentValidation (>= 12.1.1)
- FluentValidation.DependencyInjectionExtensions (>= 12.1.1)
- IdentityModel (>= 7.0.0)
- JsonNet.ContractResolvers (>= 2.0.0)
- Medo.Uuid7 (>= 3.2.0)
- MemoryPack (>= 1.21.4)
- Microsoft.ApplicationInsights (>= 3.1.0)
- Microsoft.Extensions.Caching.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Caching.Memory (>= 10.0.10)
- Microsoft.Extensions.Configuration (>= 10.0.10)
- Microsoft.Extensions.Configuration.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Configuration.Binder (>= 10.0.10)
- Microsoft.Extensions.Configuration.CommandLine (>= 10.0.10)
- Microsoft.Extensions.Configuration.EnvironmentVariables (>= 10.0.10)
- Microsoft.Extensions.Configuration.Json (>= 10.0.10)
- Microsoft.Extensions.DependencyInjection (>= 10.0.10)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Diagnostics.HealthChecks (>= 10.0.10)
- Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Hosting (>= 10.0.10)
- Microsoft.Extensions.Hosting.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Http (>= 10.0.10)
- Microsoft.Extensions.Logging (>= 10.0.10)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.10)
- Microsoft.Extensions.Logging.Console (>= 10.0.10)
- Microsoft.Extensions.ObjectPool (>= 10.0.10)
- Microsoft.Extensions.Options (>= 10.0.10)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 10.0.10)
- Microsoft.Extensions.Options.DataAnnotations (>= 10.0.10)
- Microsoft.IdentityModel.Tokens (>= 8.17.0)
- Npgsql (>= 10.0.2)
- OpenTelemetry (>= 1.15.3)
- OpenTelemetry.Api (>= 1.15.3)
- OpenTelemetry.Extensions.Hosting (>= 1.15.3)
- Polly (>= 8.6.6)
- System.IdentityModel.Tokens.Jwt (>= 8.17.0)
- System.IO.Hashing (>= 10.0.7)
- System.Threading.RateLimiting (>= 10.0.7)
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Excalibur.Outbox.Postgres:
| Package | Downloads |
|---|---|
|
Excalibur.Dispatch.Postgres
Experience metapackage bundling Excalibur.Dispatch with PostgreSQL event sourcing. Provides a single AddDispatchWithPostgres() call for the common PostgreSQL scenario. No outbox is registered: the PostgreSQL outbox store is built from an application-supplied Excalibur.Data.IDb, which a connection string alone cannot construct. PRE-RELEASE: the public API is not frozen and may change between pre-release builds. Not recommended for production use. Known issues: https://docs.excalibur-dispatch.dev/docs/known-issues |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 10.0.0-alpha.10 | 33 | 9/6/2026 |
| 10.0.0-alpha.9 | 66 | 8/31/2026 |
| 10.0.0-alpha.8 | 71 | 8/14/2026 |
| 10.0.0-alpha.7 | 71 | 8/13/2026 |
| 10.0.0-alpha.6 | 77 | 8/11/2026 |
| 10.0.0-alpha.5 | 76 | 8/10/2026 |
| 10.0.0-alpha.4 | 70 | 8/10/2026 |
| 3.0.0-alpha.216 | 93 | 6/30/2026 |
| 3.0.0-alpha.215 | 87 | 6/23/2026 |
| 3.0.0-alpha.214 | 95 | 6/23/2026 |
| 3.0.0-alpha.208 | 78 | 6/11/2026 |
| 3.0.0-alpha.207 | 79 | 6/11/2026 |
| 3.0.0-alpha.205 | 77 | 6/10/2026 |
| 3.0.0-alpha.204 | 76 | 6/8/2026 |
| 3.0.0-alpha.203 | 72 | 6/8/2026 |
| 3.0.0-alpha.202 | 80 | 6/8/2026 |
| 3.0.0-alpha.201 | 80 | 6/8/2026 |
| 3.0.0-alpha.199 | 71 | 6/8/2026 |
| 3.0.0-alpha.198 | 76 | 5/28/2026 |
| 3.0.0-alpha.197 | 83 | 5/28/2026 |
Release notes and versioning policy: https://docs.excalibur-dispatch.dev/docs/migration/version-upgrades