Knocker
Knocker is a loadable SQLite extension plus language bindings for Bun, Elixir, Go, Node, Python, and Ruby. It is for apps that already have an HTTP server, a SQLite database, and business logic that wants to react to inbound webhook events without adding a hosted control plane.
Every inbound HTTP receipt is stored as a Delivery. Valid receipts create
or correlate to a stored Event. A worker in the same process or another
process runs later against rows already committed to SQLite.
Start Here
Section titled “Start Here”New to Knocker? Read the quick start first. It explains the shape, shows the same tiny webhook flow in each runtime, and includes the raw SQL extension calls underneath the bindings.
Then read Concepts for the mental model: deliveries, events, workers, retries, retention, and the SQLite-shaped durability guarantee.
Pick Your Runtime
Section titled “Pick Your Runtime”How It Works
Section titled “How It Works”Webhooks look simple until you need production answers: did we store before
returning 2xx, did this retry create duplicate work, why did this event not
run, and can an operator replay it without spelunking logs?
Knocker’s answer is deliberately local:
- your app process or worker process
- one SQLite file
- shared Rust/SQLite receive, queue, lifecycle, and retention semantics
- durable ingress before success
- async processing later through Honker-backed queue state
What You Can Use It For
Section titled “What You Can Use It For”- Store every inbound webhook receipt durably before returning provider success.
- Deduplicate provider retries into one event-level processing unit.
- Verify requests with curated built-ins for Stripe, GitHub, Shopify, Slack, Postmark, Resend, Paddle, Lemon Squeezy, Standard Webhooks/Svix, Clerk, Twilio, SendGrid, Linear, Meta, Discord, Zendesk, Intercom, HubSpot, and middleman-friendly token/basic/bearer auth shapes.
- Keep an audit trail of valid, invalid, duplicate, and orphaned deliveries.
- Run synchronous handlers later with retries, dead-lettering, replay, and requeue.
- Commit handler business writes atomically with Knocker’s handled transition and queue ack.
- Prune handled, ignored, and orphan-delivery rows explicitly when you choose.
What’s Not Here
Section titled “What’s Not Here”Knocker owns durable webhook receipt storage and later event processing on the same SQLite file. It does not try to be:
- a hosted webhook relay
- a generic queue wrapper
- a framework adapter package
- an operator API server
- an HTML control plane
- an exactly-once side-effect system