Wallaby.Sinks.Http
1.0.0-beta.1
dotnet add package Wallaby.Sinks.Http --version 1.0.0-beta.1
NuGet\Install-Package Wallaby.Sinks.Http -Version 1.0.0-beta.1
<PackageReference Include="Wallaby.Sinks.Http" Version="1.0.0-beta.1" />
<PackageVersion Include="Wallaby.Sinks.Http" Version="1.0.0-beta.1" />
<PackageReference Include="Wallaby.Sinks.Http" />
paket add Wallaby.Sinks.Http --version 1.0.0-beta.1
#r "nuget: Wallaby.Sinks.Http, 1.0.0-beta.1"
#:package Wallaby.Sinks.Http@1.0.0-beta.1
#addin nuget:?package=Wallaby.Sinks.Http&version=1.0.0-beta.1&prerelease
#tool nuget:?package=Wallaby.Sinks.Http&version=1.0.0-beta.1&prerelease
Wallaby
Postgres Change Data Capture for .NET, driven by your EF Core or Marten model.
Wallaby streams row changes from Postgres logical replication, materializes them into your mapped EF Core entities or Marten documents, lets you transform/enrich them, and routes the resulting documents to pluggable destinations (sinks). It self-configures the publication and replication slot from your model, supports backfill operations, and is cluster-safe via leader election.
Meilisearch and HTTP/webhook sinks are supported out of the box. Contributions for additional sinks is welcome.
📖 Full documentation: wallabycdc.net
Packages
| Project | Purpose |
|---|---|
Wallaby |
Core package (provider-agnostic). |
Wallaby.Providers.EntityFrameworkCore |
EF Core storage provider. |
Wallaby.Providers.Marten |
Marten storage provider. |
Wallaby.Sinks.Http |
HTTP/webhook destination sink. |
Wallaby.Sinks.Meilisearch |
Meilisearch destination sink. |
Quick start
builder.Services.AddDbContextFactory<AppDbContext>(o => o.UseNpgsql(conn));
builder.Services.AddWallaby(cdc =>
{
cdc.UseEntityFrameworkCore<AppDbContext>()
.UseConnectionString(conn)
.ConfigureOptions(o => { o.SlotName = "app_cdc"; o.PublicationName = "app_cdc_pub"; })
.AddMeilisearchSink("meili", m => { m.Host = "http://localhost:7700"; m.ApiKey = key; })
// Mapping = routing only. The transform does the data shaping.
.WithMappings(sink => sink
.Map<Product>()
.ToDestination("products")
.WithBackfillVersion("v1") // bump to force a reindex/backfill
.UsingTransform((db, changes, ct) =>
{
var docs = new Dictionary<DocumentKey, WallabyDocument?>();
foreach (var c in changes)
docs[c.Key] = new WallabyDocument { ["name"] = c.Entity!.Name };
return Task.FromResult<IReadOnlyDictionary<DocumentKey, WallabyDocument?>>(docs);
}));
});
Tests
Each package has one test project under tests/ (Wallaby.Tests, Wallaby.Providers.*.Tests,
Wallaby.Sinks.*.Tests) with Unit/ and Integration/ folders inside; namespaces follow the folders.
All test projects use TUnit; shared fixtures (e.g. the Postgres container) live in
tests/Wallaby.TestInfrastructure.
- Everything (what CI runs; integration tests need Docker):
dotnet testor.\build.ps1 Test - One package:
dotnet run -c Release --project tests/Wallaby.Providers.EntityFrameworkCore.Tests - Unit tests only (no Docker): append
-- --treenode-filter "/*/*.Unit*/*/*"
| 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.Extensions.Hosting (>= 10.0.9)
- Microsoft.Extensions.Http (>= 10.0.9)
- Npgsql (>= 10.0.3)
- Polly.Core (>= 8.7.0)
- Wallaby (>= 1.0.0-beta.1)
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.0.0-beta.1 | 0 | 7/8/2026 |
| 1.0.0-alpha.3 | 51 | 7/6/2026 |
| 1.0.0-alpha.2 | 56 | 7/6/2026 |