The open-source, self-hosted webhook testing & replay studio.
Inspect, verify HMAC signatures, simulate upstream failures, and relay webhooks to localhost in real time.
Quickstart • Why HookStudio? • Features • HMAC Verification • Docker Deployment • Contributing
┌──────────────────────────────────────────────────────────┐
│ Inbound Webhooks (Stripe / GitHub / Shopify / Slack) │
└────────────────────────────┬─────────────────────────────┘
│ POST /api/hooks/:id
▼
┌──────────────────────────────────────────────────────────┐
│ ⚡ HookStudio Engine │
│ (Inspect • Verify HMAC • Store in SQLite) │
└──────────────┬───────────────────────────┬───────────────┘
│ Auto-Relay │ WebSocket Stream
▼ ▼
┌──────────────────────────────┐ ┌─────────────────────────┐
│ Target App (localhost:3000) │ │ Modern Web UI Dashboard │
└──────────────────────────────┘ └─────────────────────────┘
Testing webhooks locally is notoriously frustrating:
- Cloud SaaS Limits: Services like Webhook.site or Hookdeck restrict history, require paid tiers, and show ads.
- Privacy & Security: Sending sensitive production or test payloads (customer PII, API tokens) through third-party servers creates privacy risks.
- Replay Friction: Re-triggering a payment in Stripe or a git push in GitHub just to test a 2-line code fix wastes hours.
- HMAC Headaches: Validating complex cryptographic signatures (
Stripe-Signature,X-Hub-Signature-256) is error-prone.
HookStudio gives you a private, lightning-fast, zero-account webhook studio that runs directly on your machine or VPS.
Run HookStudio immediately without installing anything:
npx hookstudioThen open http://localhost:4000 in your browser!
# Clone repository
git clone https://github.com/Samijain03/HookStudio.git
cd HookStudio
# Install dependencies
npm install
# Run backend and frontend concurrently
npm run devWant to see it in action without configuring Stripe or GitHub first?
# In another terminal:
npm run send-sample
# Or send a raw cURL:
curl -X POST "http://localhost:4000/api/hooks/default" \
-H "Content-Type: application/json" \
-d '{"event": "payment.succeeded", "amount": 4900, "customer": "cus_123"}'| Feature | HookStudio | Webhook.site | Hookdeck | ngrok |
|---|---|---|---|---|
| 100% Open-Source (MIT) | ✅ Yes | ❌ Proprietary | ❌ Proprietary | ❌ Proprietary |
| Self-Hosted & Private | ✅ Yes | ❌ Cloud-only | ❌ Cloud-only | |
| No Account / No Sign-up | ✅ Yes | ❌ Required | ❌ Required | |
| Real-Time WebSocket Stream | ✅ Sub-ms | ✅ Yes | ❌ CLI-only | |
| HMAC Signature Verifier | ✅ Built-in | ❌ Manual | ❌ No | |
| 1-Click Replay & Edit | ✅ Yes | ✅ Yes | ||
| Mock Responses & Delays | ✅ Yes | ❌ No | ||
| Code & Session Exporter | ✅ Yes | ❌ No | ❌ No | ❌ No |
| Persistent SQLite Storage | ✅ Zero-config | ❌ Discarded | ❌ Ephemeral |
Incoming HTTP requests appear instantly via WebSockets with zero page refreshes. Inspect status codes, HTTP methods, headers, query parameters, and payloads.
Validate webhook signatures in seconds. HookStudio provides dedicated cryptographic verification engines for:
- Stripe (
Stripe-Signaturewith timestamp validation) - GitHub (
X-Hub-Signature-256HMAC-SHA256) - Shopify (
X-Shopify-Hmac-Sha256Base64) - Twilio (
X-Twilio-SignatureBase64) - Paddle (
Paddle-SignatureHMAC-SHA256) - Slack (
X-Slack-Signaturev0:...) - Svix (
svix-signature) - Custom HMAC-SHA256 / HMAC-SHA1
Did your backend handler crash on a webhook? Fix the bug, click Replay, and resend the exact payload to your local endpoint (http://localhost:3000/api/webhook). You can even tweak the JSON body or headers inside the interactive editor before resending!
Set an Auto-Relay URL on any endpoint. When a webhook arrives, HookStudio automatically forwards it to your local server and logs the round-trip latency, response status, and response body.
Test how webhook providers handle upstream issues:
- Return custom status codes (
500 Server Error,429 Rate Limited,400 Bad Request). - Inject simulated network delays (e.g. 2,000ms delay to test timeout handling).
- Return custom JSON error payloads.
- Instantly export captured webhooks into copy-paste code snippets (
cURL,JavaScript Fetch,Python requests,Go net/http). - Export captured webhook events as standalone
.jsonfiles or bulk export sessions via API.
HookStudio verifies raw payloads against your provider secret using constant-time comparison to prevent timing attacks:
import { verifySignature } from 'hookstudio/crypto';
const result = verifySignature({
provider: 'stripe',
secret: 'whsec_...',
rawBody: req.rawBody,
signatureHeader: req.headers['stripe-signature'],
});
console.log(result.valid); // trueHookStudio can be deployed anywhere in 10 seconds using Docker:
docker compose up -dYour webhooks and endpoint configurations are automatically persisted across container updates via a named SQLite volume.
- Server: Node.js, Express, TypeScript,
ws(WebSockets), Nodecrypto,node:sqlite. - Frontend: React 19, Vite, Tailwind CSS v4, Lucide Icons.
- Data Layer: Embedded SQLite with WAL mode for ultra-fast zero-configuration writes.
Contributions are welcome! If you'd like to add support for a new webhook provider, improve the UI, or add an export format:
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Distributed under the MIT License. See LICENSE for more information.
If you find HookStudio helpful, please give it a ⭐️ on GitHub!