---
title: "GitHub doesn't retry webhooks. So I gave my tunnel a database."
url: https://daily.dev/posts/github-doesn-t-retry-webhooks-so-i-gave-my-tunnel-a-database--tgzsitftv
source_url: https://dev.to/bigachiever/github-doesnt-retry-webhooks-so-i-gave-my-tunnel-a-database-4aa0
type: article
source: "Awesome Go"
published: 2026-08-13T20:23:40.730Z
updated: 2026-08-13T20:32:51.402Z
tags: ["architecture", "golang", "postgresql", "networking"]
reading_time: 11
upvotes: 0
comments: 1
language: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# GitHub doesn't retry webhooks. So I gave my tunnel a database.

**[Awesome Go](https://daily.dev/sources/awego)** · 11 min read · 0 upvotes · 1 comments

## Summary

A solo hackathon project called Doorbell addresses the fact that GitHub never retries failed webhook deliveries, and most other providers only retry a handful of times before giving up (Shopify even deletes the subscription). Doorbell is a development tunnel that stores incoming webhook requests in Postgres when nobody is connected, returning 202 instead of letting the sender see a 502, then replays them in order once the developer reconnects. The build details cover a Go-based multiplexed tunnel using yamux, a database-enforced single-claim mechanism to avoid duplicate delivery, a security bug where one token accidentally gated both tunnel access and dashboard read access, and infrastructure constraints (raw TCP ports, IPv6-only public gateway, no serverless support) discovered while deploying on Zerops. Known limitations include stripped webhook signatures on replay and untested custom domain support.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://dev.to/bigachiever/github-doesnt-retry-webhooks-so-i-gave-my-tunnel-a-database-4aa0>

## Questions this post answers

### Does GitHub automatically retry a webhook delivery if my endpoint is down?

No, GitHub does not automatically redeliver failed webhook deliveries. According to GitHub's own documentation, a single failed delivery is left as-is unless you manually redeliver it through the GitHub UI, unlike Stripe, which retries three times in test mode, or Shopify, which retries eight times over four hours before deleting the webhook subscription entirely.

_Developers wiring up GitHub webhooks can find implementation write-ups like this one on daily.dev._

### Why does my ngrok tunnel miss webhook events that arrive while my laptop is disconnected?

A tunnel is a pipe, not a mailbox: if nothing is listening on your end when a request arrives, it has nowhere to go and is lost, not queued. Ngrok's replay feature only works for requests it already saw while you were connected, so events that arrive during a disconnect (lid closed, wifi drop, laptop asleep) are gone unless something durable sits in the path to store them.

_Anyone debugging flaky local webhook testing can compare tunnel architectures like this on daily.dev._

### How can I prevent duplicate webhook delivery when multiple processes try to drain the same queued request?

Claiming a queued request and marking it as taken must happen in a single SQL statement so only one drain process can ever win a given row, preventing two simultaneous reconnects from both delivering the same webhook. This was verified with a test that runs eight concurrent claimers against one row and asserts exactly one wins, since every extra winner represents a webhook delivered twice.

_Engineers designing exactly-once delivery guarantees can dig into concurrency patterns like this via daily.dev._

## Community discussion

Top comments from developers on daily.dev.

**@trevorsuna** · 0 upvotes

> Persisting the webhook before returning 202 is a practical way to separate provider delivery from a developer’s flaky connection. The signature limitation is the tricky bit: replay should preserve the original signed bytes and headers so local verification still exercises the real security path.

## Similar posts on daily.dev

- [The valley of webhooks](https://daily.dev/posts/the-valley-of-webhooks-6ekxclvor) · Hacker News · 0 upvotes · 0 comments

---

Tags: [#architecture](https://daily.dev/tags/architecture), [#golang](https://daily.dev/tags/golang), [#postgresql](https://daily.dev/tags/postgresql), [#networking](https://daily.dev/tags/networking)

[View this post on daily.dev](https://daily.dev/posts/github-doesn-t-retry-webhooks-so-i-gave-my-tunnel-a-database--tgzsitftv)
