Self-Hosted · Open Source · .NET 10
Self-Hosted Webhook
Delivery that arrives.
At-least-once delivery with exponential backoff, per-endpoint circuit breakers, HMAC signing, and a real-time dashboard. One Docker command.
your-service
endpoint-A
delivered
your-service
endpoint-B
retry #2
your-service
endpoint-C
circuit open
REAL-TIME DELIVERY FEED — SIGNALR LIVE UPDATES
7
Retry attempts with exponential backoff
5
Consecutive failures to open circuit
1cmd
Docker Compose to run everything
0dep
No Redis, no RabbitMQ, just PostgreSQL
Core Capabilities
Built for reliability,
not just delivery.
Every feature exists because webhook delivery fails in production—and your subscribers need guarantees.
Exponential Backoff Retries
7 automatic retry attempts: 5s → 30s → 2m → 15m → 1h → 6h → 24h. Messages are never silently dropped.
at-least-once
Per-Endpoint Circuit Breaker
Opens after 5 consecutive failures with a 5-minute cooldown. Protects your infrastructure from cascading failures.
auto-recovery
HMAC-SHA256 Signing
Standard Webhooks spec:
svix-compatible
webhook-id, webhook-timestamp, webhook-signature headers on every request.Real-Time Dashboard
React SPA with live delivery feed over SignalR. Monitor attempts, view payloads, filter by status — all in one place.
signalr live
Idempotency Keys
Prevent duplicate deliveries across retries or replay. Optionally include an
dedup
idempotencyKey per message.Prometheus Metrics
OpenTelemetry instrumentation with Prometheus exporter. Plug straight into your Grafana stack.
observability
Quick Start
Up in
60 seconds.
PostgreSQL included. No Redis, no message broker, no extra infrastructure.
01
Start the stack
Docker Compose pulls the image and spins up WebhookEngine + PostgreSQL.
docker compose up -d
02
Open the dashboard
Navigate to localhost:5100 and log in with the default credentials.
admin@example.com / changeme
03
Create an app & send webhooks
Create an application, register endpoints, and start publishing messages via API or the .NET SDK.
dotnet add package WebhookEngine.Sdk
docker-compose.yml
# Clone and start
git clone https://github.com/voyvodka/webhook-engine
cd webhook-engine
docker compose -f docker/docker-compose.yml up -d
# Or pull and use your own compose
services:
webhook-engine:
image: voyvodka/webhook-engine:latest
ports:
- "5100:8080"
environment:
- ADMIN_EMAIL=admin@example.com
- ADMIN_PASSWORD=changeme
Architecture
One process.
Everything included.
API, background workers, and the React dashboard all run inside a single ASP.NET Core host. No sidecar services, no coordination overhead.
ASP.NET Core API
REST endpoints, auth, SignalR hub
DeliveryWorker
Queue polling, HTTP delivery, retries
CircuitBreakerWorker
Endpoint health monitoring & cooldown
StaleLockRecovery
Crash recovery, orphaned message cleanup
PostgreSQL
Queue + persistence, FOR UPDATE SKIP LOCKED
React Dashboard
Served as static files from wwwroot/