Wallaby 1.0.0

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

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) with at-least-once delivery. It self-configures the publication and replication slot from your model, supports versioned backfill (initial snapshots and shape-change reindexes), and is cluster-safe via leader election.

Meilisearch, Kafka, Elasticsearch, OpenSearch, pgvector, and HTTP/webhook sinks are supported out of the box. Contributions for additional sinks are welcome.

Requires Postgres 15+ and .NET 10+.

📖 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.Elasticsearch Elasticsearch destination sink.
Wallaby.Sinks.Kafka Kafka destination sink (keyed messages, tombstone deletes).
Wallaby.Sinks.Meilisearch Meilisearch destination sink.
Wallaby.Sinks.OpenSearch OpenSearch destination sink.
Wallaby.Sinks.Pgvector Postgres pgvector destination sink, with optional sink-side embedding.
Wallaby.Client Standalone remote control plane (suspend/resume, backfills, inspection) via Postgres.
Wallaby.Testing End-to-end pipeline test harness with real logical replication.
Wallaby.AspNetCore.HealthChecks ASP.NET Core liveness health check for Wallaby nodes.

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.Endpoint = "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);
            }));
});

Contributing

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: dotnet test or .\build.ps1 Test
  • One package: dotnet run -c Release --project tests/Wallaby.Providers.EntityFrameworkCore.Tests
  • Unit tests only (no Docker): append -- --treenode-filter "/*/*.Unit*/*/*"

Viewing traces

tests/Wallaby.TraceDemo runs a curated CDC scenario, live changes with a sink retry, dependent fan-out, whole-table backfill, and exports the resulting traces and metrics to a local Aspire Dashboard container:

dotnet run --project tests/Wallaby.TraceDemo
# then open http://localhost:18888/traces

The dashboard keeps running (and accumulates traces across runs); remove it with docker rm -f wallaby-trace-dashboard.

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 (10)

Showing the top 5 NuGet packages that depend on Wallaby:

Package Downloads
Wallaby.AspNetCore.HealthChecks

ASP.NET Core liveness health check for Wallaby: flags a terminated or crash-looping CDC service on leader and standby nodes, and grades a suspended installation or failing fan-out and backfill as degraded.

Wallaby.Providers.EntityFrameworkCore

EF Core storage provider for Wallaby: drives capture from your EF Core model — table/key discovery, entity materialization with value converters, DbContext-based transforms/enrichment, and DependsOn navigation fan-out.

Wallaby.Sinks.Meilisearch

Meilisearch destination/sink for Wallaby: keep a Meilisearch index in sync with Postgres changes.

Wallaby.Testing

Test helpers for Wallaby consumers: capture sink, sink replacement, and streaming-readiness gates for end-to-end Wallaby tests against a real Postgres.

Wallaby.Providers.Marten

Marten storage provider for Wallaby: drives capture from your Marten document store — document table discovery, JSONB rehydration through the store's serializer, soft-delete-aware delete events, conjoined tenancy, and IQuerySession-based transforms/enrichment.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.0.0 61 9/18/2026
1.0.0-rc.8 190 9/16/2026
1.0.0-rc.7 1,852 8/19/2026
1.0.0-rc.6 547 8/18/2026
1.0.0-rc.5 456 8/12/2026
1.0.0-rc.4 1,148 8/2/2026
1.0.0-rc.3 104 7/31/2026
1.0.0-rc.2 248 7/27/2026
1.0.0-rc.1 143 7/23/2026
1.0.0-beta.7 97 7/19/2026
1.0.0-beta.6 340 7/15/2026
1.0.0-beta.5 185 7/14/2026
1.0.0-beta.4 119 7/12/2026
1.0.0-beta.3 117 7/10/2026
1.0.0-beta.2 208 7/8/2026
1.0.0-beta.1 150 7/8/2026
1.0.0-alpha.3 140 7/6/2026
1.0.0-alpha.2 95 7/6/2026
1.0.0-alpha.1 89 7/6/2026
0.16.0 292 7/3/2026
Loading failed