qhook
Lightweight event-to-action engine. Turn webhooks and API events into reliable HTTP actions — single binary, no Redis, no Kubernetes.
Documentation | Examples | Why qhook?
What qhook Does
- Receive events — webhooks (with signature verification), AWS SNS, or internal API
- Execute HTTP actions reliably — one call or a multi-step pipeline
- Handle failures — retry, error routing, rollback, Dead Letter Queue
Simple: Multi-step:
event → POST /billing event → build → deploy → notify
(with retry + DLQ) ↓ fail
rollback → alert
Why qhook?
- Zero infrastructure. Single binary, SQLite for dev, Postgres for production. No Redis, no message broker.
- Webhook verification built in. GitHub, Stripe, Shopify, PagerDuty, Grafana, Terraform Cloud, GitLab, HMAC, AWS SNS X.509.
- From one action to a pipeline. Start with a single HTTP call; grow into multi-step workflows with branching, parallelism, and rollback — same YAML, same engine.
- Production ready. Prometheus metrics, health checks, Slack/Discord alerts, rate limiting, circuit breaker, OpenTelemetry tracing, structured logging.
See Why qhook? for detailed comparisons and use cases.
Quick Start
# Or: docker run -p 8888:8888 -v $(pwd)/qhook.yaml:/data/qhook.yaml ghcr.io/totte-dev/qhook
Simple: one event, one action
# qhook.yaml
database:
driver: sqlite
sources:
github:
type: webhook
verify: github
secret: ${GITHUB_WEBHOOK_SECRET}
handlers:
deploy:
source: github
events:
url: http://deployer:3000/deploy
filter: "$.ref == refs/heads/main"
retry:
Multi-step: event triggers a pipeline
workflows:
deploy-pipeline:
source: github
events:
timeout: 600
steps:
- name: build
url: http://ci:3000/build
retry:
- name: deploy-staging
url: http://deployer:3000/deploy
catch:
- errors:
goto: rollback
- name: smoke-test
url: http://tester:3000/smoke
catch:
- errors:
goto: rollback
- name: deploy-prod
url: http://deployer:3000/deploy
end: true
- name: rollback
url: http://deployer:3000/rollback
end: true
See the Getting Started guide for a full walkthrough.
Step Types
| Type | Description |
|---|---|
| HTTP (default) | Call a URL with custom headers, chain response to next step |
| Choice | Conditional branching based on payload values |
| Parallel | Execute multiple branches concurrently |
| Map | Iterate over an array, processing each element |
| Wait | Pause for a duration or until a timestamp |
| Callback | Pause, notify external service, wait for POST /callback/:token |
See the Workflows guide for details.
Installation
Or build from source:
&&
Kubernetes is not required, but if you already run a cluster, a Helm chart is also available:
CLI
See the CLI Reference for all commands.
Documentation
Full documentation at totte-dev.github.io/qhook.
| Topic | Link |
|---|---|
| Getting Started | getting-started |
| Configuration Reference | configuration |
| CLI Reference | cli |
| Webhook Verification | guides/webhook-verification |
| CloudEvents | guides/cloudevents |
| AWS SNS | guides/sns |
| Workflows | guides/workflows |
| Filtering & Transformation | guides/filtering |
| gRPC Output | guides/grpc |
| Monitoring & Alerts | guides/monitoring |
| Security | guides/security |
| Deployment | deploy |
| Why qhook? | why-qhook |
Examples
| Example | Description |
|---|---|
| quickstart | Minimal setup, no Docker needed |
| github-webhook | GitHub push/PR with signature verification |
| filter-transform | Event filtering + payload transformation |
| stripe-checkout | Stripe checkout with dual handlers |
| workflow | Multi-step pipeline with catch routing |
| tenant-provision | Tenant provisioning with rollback and auth headers |
| alert-remediation | PagerDuty alert → triage → remediate → escalate |
License
Licensed under the Apache License, Version 2.0. See LICENSE for details.