qhook
Lightweight event gateway with Push and Pull delivery, built-in retry, and workflow engine. Verify, enqueue, ACK — then deliver via HTTP push or let your app pull when ready. Single binary, zero infrastructure.
- Push and Pull delivery. Push mode delivers to HTTP endpoints instantly. Pull mode lets consumers poll a queue and ACK when done — no public endpoint needed. Use both in the same config.
- Queue-first by default. Every event is persisted before acknowledgment — no event is lost, even if downstream is down.
- Zero infrastructure. Single binary, SQLite for dev, Postgres or MySQL for production. No Redis, no message broker.
- 13 provider signature verification. GitHub, Stripe, Shopify, PagerDuty, Grafana, Terraform Cloud, GitLab, Linear, Standard Webhooks, Twilio, Paddle, HMAC, and AWS SNS.
- From one action to a pipeline. Single HTTP call or multi-step workflow with branching, parallelism, and rollback.
- Production ready. Prometheus metrics, health checks, alerts, Management API, full audit trail for compliance.
Quick Start
# Install
cargo install qhook
# Or run with Docker
docker run -p 8888:8888 -v $(pwd)/qhook.yaml:/data/qhook.yaml ghcr.io/totte-dev/qhook
Simple: Stripe webhook → billing + analytics
# qhook.yaml
database:
driver: sqlite
sources:
stripe:
type: webhook
verify: stripe
secret: ${STRIPE_WEBHOOK_SECRET}
handlers:
billing:
source: stripe
events: [invoice.paid, customer.subscription.updated]
url: http://billing:3000/webhook
idempotency_key: "$.id"
retry: { max: 8 }
analytics:
source: stripe
events: ["*"]
url: http://analytics:3000/ingest
Multi-step: GitHub push → build → deploy → rollback
sources:
github:
type: webhook
verify: github
secret: ${GITHUB_WEBHOOK_SECRET}
workflows:
deploy-pipeline:
source: github
events: [push]
timeout: 600
steps:
- name: build
url: http://ci:3000/build
retry: { max: 2, errors: [5xx, timeout] }
- name: deploy
url: http://deployer:3000/deploy
catch:
- errors: [all]
goto: rollback
- name: notify
url: http://slack:3000/notify
end: true
- name: rollback
url: http://deployer:3000/rollback
end: true
Full Getting Started guide
Documentation
Guides
| Guide |
Description |
| 5-Minute Quickstart |
Stripe webhooks in 5 minutes — no Docker needed |
| Getting Started |
Installation, first config, first event |
| Configuration |
Full YAML config reference |
| CLI Reference |
All CLI commands and options |
| Webhook Verification |
13 providers: GitHub, Stripe, Shopify, Twilio, Paddle, and more |
| CloudEvents |
Binary and structured mode support |
| AWS SNS |
Receive events from SNS topics |
| Workflows |
Multi-step pipelines with error routing |
| Filtering & Transformation |
Event filtering and payload reshaping |
| Monitoring |
Prometheus metrics, health checks, alerts |
| Security |
Security features and best practices |
| Local Development |
Dev mode, echo endpoint, test events, tunnels |
| Pull-Mode Queues |
Consumer-driven polling with visibility timeout and DLQ |
| Scaling Guide |
D1 vs Postgres — when to switch, cost calculator, performance limits |
| Local to Production |
Environment overlays, DB migration, security checklist |
| Database Schema |
Tables, columns, indexes, and conventions |
| Error Reference |
HTTP status codes and error messages |
| Compliance & Audit Trail |
PCI DSS 4.0, SOC 2 compliance framing |
| API Spec |
OpenAPI 3.1 specification |
Deployment
Deployment overview & platform comparison
Examples
Integrations
| Integration |
Description |
| MCP Server |
AI agent integration via Model Context Protocol (Claude Code, Claude Desktop) |
Other
| Page |
Description |
| Why qhook? |
Use cases, comparisons, and positioning |
| Examples |
All example projects with descriptions |