Tofu
How it works

A stable relay between providers and localhost

Tofu separates the provider-facing URL from your local target, so webhook setup stays fixed while your development environment changes.

1

Provider calls Tofu

Use a stable hook URL in Stripe, GitHub, or another webhook provider.

2

Tofu stores the event

Tofu stores the request body and headers temporarily so you can replay the event. Event metadata stays visible longer.

3

Tofu forwards to targets

Targets can point at localhost, staging, a teammate, or a short-lived CI environment.

4

You watch and replay

Stream incoming events, then replay while the payload is still available.

One URL per provider, many targets

Each hook owns a stable URL that providers call. Targets are the outbound side: localhost, a teammate's tunnel, staging, or a short-lived CI environment can all receive the same event.

Provider always sees 200 OK

Tofu acknowledges the provider immediately and forwards in the background, so a slow local handler never causes the provider to retry on its own schedule.