RelayKit is webhook infrastructure built for developers: one ingest URL, fan-out to unlimited destinations, automatic retries with backoff, signature verification for 8 providers, and a free CLI that tunnels real webhooks straight to localhost. No more pasting new ngrok URLs into Stripe every morning.
No reviews yetBe the first to leave a review for RelayKit
Maker
๐
Hey Product Hunt ๐
I built RelayKit because I was tired of the ngrok-URL-paste dance every time I restarted my dev server, and equally tired of finding out a webhook integration was broken only after it hit production.
The thing I'm most excited to share today is the local dev tunnel. It's not a separate feature bolted on next to the "real" product, it's literally the same fan-out, retry, and signature-verification pipeline that handles production traffic, just pointed at localhost:
```
relaykit login
relaykit tunnel --port 3000
```
That's it. Real events from Stripe, GitHub, Shopify, whatever you're integrating with, show up in your terminal as they happen, with retries and signature checks behaving exactly like they would in prod. You can even run a tunnel and your production destination side by side on the same project.
It's free on the Hobby plan, no credit card required, so if you've got a webhook integration you're building right now, I'd love for you to try it and tell me what breaks.
Also happy to answer anything about how the retry/fan-out engine works, or why we built Schema Sentinel (drift detection) and Time Machine (bulk replay) the way we did. ๐
Report
the Schema Sentinel drift detection is the more interesting feature to me honestly, replay is table stakes at this point but silent payload shape changes from a provider are what actually take down an integration in prod. Does it just diff against the last seen payload per event type, or do you maintain some kind of schema baseline you compare against over time?
Report
Maker
@galdayanย It uses the first incoming event of each event type as the baseline schema. From that point on, every new event of the same type is compared against that baseline to detect any payload shape changes.
Report
๐ก Bright idea
the localhost tunnel is honestly the part that sold me, but adding a small in-dashboard log viewer for the last 50 failed deliveries with the response body from the destination would save a ton of time when something breaks
Report
Maker
@harun154545ย Really good callout, thank you. Right now you can filter to failed webhooks per project, and the response body is captured (truncated to 300 characters) on each delivery, but you do have to click into each one individually to see it, there's no quick scannable list. A dedicated 'last 50 failures with response body inline' view is a genuinely useful addition and I'm adding it to the list. Appreciate you being specific about what would actually save you time, that's more useful than a vague '+1 more features' ask.
Report
๐ Pixel perfection
One thing that would make RelayKit a no-brainer for me is a built-in request replay feature, letting you re-send any historical webhook payload to your endpoint with one click. Super useful when you're debugging a bug that happened last Thursday and can't reproduce it.
Report
Maker
@asmin4738ย Great suggestion! RelayKit actually supports both of these workflows already ๐
You can use Time Machine to select a specific time frame and replay all webhooks from that period, or simply replay any individual webhook with one click from the request history.
Sounds like we need to make these features a bit more discoverable ๐
Report
๐ Pixel perfection
Finally something that fixes the daily ngrok URL shuffle, the local tunnel feature alone is worth it and signature verification covering that many providers saved me a whole afternoon of setup.
Report
Maker
@bildirci44068ย This means a lot, thank you. The tunnel was the part I use every single day myself, so I'm glad it's landing the same way for you.
the Schema Sentinel drift detection is the more interesting feature to me honestly, replay is table stakes at this point but silent payload shape changes from a provider are what actually take down an integration in prod. Does it just diff against the last seen payload per event type, or do you maintain some kind of schema baseline you compare against over time?
@galdayanย It uses the first incoming event of each event type as the baseline schema. From that point on, every new event of the same type is compared against that baseline to detect any payload shape changes.
the localhost tunnel is honestly the part that sold me, but adding a small in-dashboard log viewer for the last 50 failed deliveries with the response body from the destination would save a ton of time when something breaks
@harun154545ย Really good callout, thank you. Right now you can filter to failed webhooks per project, and the response body is captured (truncated to 300 characters) on each delivery, but you do have to click into each one individually to see it, there's no quick scannable list. A dedicated 'last 50 failures with response body inline' view is a genuinely useful addition and I'm adding it to the list. Appreciate you being specific about what would actually save you time, that's more useful than a vague '+1 more features' ask.
One thing that would make RelayKit a no-brainer for me is a built-in request replay feature, letting you re-send any historical webhook payload to your endpoint with one click. Super useful when you're debugging a bug that happened last Thursday and can't reproduce it.
@asmin4738ย Great suggestion! RelayKit actually supports both of these workflows already ๐
You can use Time Machine to select a specific time frame and replay all webhooks from that period, or simply replay any individual webhook with one click from the request history.
Sounds like we need to make these features a bit more discoverable ๐
Finally something that fixes the daily ngrok URL shuffle, the local tunnel feature alone is worth it and signature verification covering that many providers saved me a whole afternoon of setup.
@bildirci44068ย This means a lot, thank you. The tunnel was the part I use every single day myself, so I'm glad it's landing the same way for you.