Webhook relay and debugging SaaS — receive, inspect, and forward webhooks
  • Go 84.7%
  • templ 14.9%
  • Dockerfile 0.4%
Find a file
2026-03-26 16:10:07 +00:00
.forgejo/workflows Add CI workflow: tests, lint 2026-02-19 12:52:15 +00:00
cmd/pingrelay fix: add auth to dashboard endpoints, prevent SSRF via DNS rebinding — Refs ash/ideas#26, ash/ideas#32, ash/ideas#34 2026-03-26 16:10:07 +00:00
internal fix: add auth to dashboard endpoints, prevent SSRF via DNS rebinding — Refs ash/ideas#26, ash/ideas#32, ash/ideas#34 2026-03-26 16:10:07 +00:00
.gitignore feat: SQLite persistence, Datastar SSE dashboard, API key auth 2026-02-19 08:40:27 +00:00
Dockerfile feat: initial PingRelay MVP — webhook relay and debugging SaaS 2026-02-18 22:52:45 +00:00
go.mod fix: add auth to dashboard endpoints, prevent SSRF via DNS rebinding — Refs ash/ideas#26, ash/ideas#32, ash/ideas#34 2026-03-26 16:10:07 +00:00
go.sum fix: add auth to dashboard endpoints, prevent SSRF via DNS rebinding — Refs ash/ideas#26, ash/ideas#32, ash/ideas#34 2026-03-26 16:10:07 +00:00
README.md docs: update README with full feature docs 2026-02-19 08:40:44 +00:00

🏓 PingRelay

Webhook relay & debugger SaaS. Receive, inspect, and forward webhooks in real-time.

Features

  • Webhook Capture — Unique endpoint URLs that capture any HTTP method
  • Real-time Dashboard — Datastar-powered SSE streaming, no JavaScript frameworks
  • Auto-forwarding — Optionally relay captured webhooks to your local dev server
  • SQLite Persistence — All data persisted with WAL mode for performance
  • API Key Auth — Secure API access with X-API-Key or Bearer tokens
  • Pure Go — Single binary, no CGo dependencies (modernc.org/sqlite)

Quick Start

go build -o pingrelay ./cmd/pingrelay/
./pingrelay
# 🏓 PingRelay running at http://localhost:8080
# Demo API key printed on startup

Environment Variables

Variable Default Description
PORT 8080 HTTP server port
DB_PATH pingrelay.db SQLite database path

API

All API endpoints require authentication via X-API-Key header.

# Create endpoint
curl -X POST http://localhost:8080/api/endpoints \
  -H "X-API-Key: pr_your_key" \
  -H "Content-Type: application/json" \
  -d '{"name":"stripe-test","forward_url":"http://localhost:3000/webhook"}'

# List endpoints
curl http://localhost:8080/api/endpoints -H "X-API-Key: pr_your_key"

# List captured requests
curl http://localhost:8080/api/endpoints/{id}/requests -H "X-API-Key: pr_your_key"

# Send a webhook (no auth needed)
curl -X POST http://localhost:8080/hook/YOUR_TOKEN \
  -H "Content-Type: application/json" \
  -d '{"event":"payment.completed"}'

Architecture

  • cmd/pingrelay/ — Entry point
  • internal/domain/ — Core types (Endpoint, Request, User)
  • internal/store/ — Store interface + SQLite implementation
  • internal/handler/ — HTTP handlers + Datastar SSE dashboard
  • internal/relay/ — Async webhook forwarding
  • internal/events/ — Pub/sub event bus for real-time streaming