Docs overview
Knocker is a loadable SQLite extension plus thin language bindings. The durable webhook semantics live in Rust and SQLite; the bindings keep your host-language code pleasant.
If you are new, use this order:
- Quick start to see the whole flow once.
- Concepts to understand deliveries, events, workers, and SQLite-shaped guarantees.
- Pick your language page for install and API details.
- Use Frameworks and ORMs to wire routes and handler transactions into your app.
- Read the operator guides when you need replay, retention, or production runbooks.
Quick start Store a webhook, run a worker, and see the same flow in Python, raw SQL, Bun, Elixir, Go, Node, and Ruby.
Concepts The small Knocker model: Delivery, Event, Worker, transaction, retry, replay, and retention.
SQLite contract The extension functions and shared baseline all bindings sit on top of.
Languages
Section titled “Languages” Bun Install and use Knocker from Bun.
Elixir Install and use Knocker from Elixir.
Go Install and use Knocker from Go.
Node Install and use Knocker from Node.
Python Install and use Knocker from Python.
Ruby Install and use Knocker from Ruby.
Build Your App
Section titled “Build Your App” Frameworks and ORMs Route glue and transaction patterns for each runtime.
Verified ingress Provider presets, secret rotation, custom verification, and dedupe keys.
Contributing providers Repo catalog, metadata, and conformance fixtures for a built-in provider.
Operate It
Section titled “Operate It” Operator surface List, inspect, ignore, replay, and requeue stored events and deliveries.
Operator runbook A 3 AM checklist for dead events, invalid deliveries, worker failures, and pruning.
Retention and pruning Explicit, bounded pruning for handled, ignored, and orphan-delivery rows.
Roadmap What is still ahead after 0.1.0.
What’s Not Here
Section titled “What’s Not Here”Knocker does not ship web-framework adapters. Wiring it into FastAPI,
Express, Rails, Phoenix, Gin, Django, Flask, or similar frameworks is route
glue: read the raw body, pass headers/query to receive(...), return
result.status_code.
Out of scope on purpose: hosted relays, operator API servers, HTML control planes, generic queue APIs, and exactly-once side effects.