Instant local tunnel for webhooks. No ngrok. No account. No data leaves your machine. One command and you're live.
No installs, no configuration, no account. Run npx and you're tunneling in seconds.
A complete toolkit covering tunneling, inspection, replay, verification, and configuration — without third-party accounts or cloud storage.
One command gives you a public HTTPS relay URL — no account, no signup, no friction. Your webhooks arrive in milliseconds.
Real-time log at localhost:2019 with full payload inspection, headers, response codes, and latency metrics.
Everything lives in RAM. Nothing touches disk. Nothing reaches the cloud. Ctrl+C and it's completely gone.
Built-in guidance for Stripe, GitHub, Clerk, and custom HMAC webhooks. Verify integrity without extra libraries.
Resend any captured webhook to your local server instantly. Test edge cases and error handling without re-triggering the provider.
Failed events are isolated in a DLQ-style view. Inspect, debug, and replay failures without sifting through all traffic.
Copy any event as a ready-to-run curl command or fetch snippet. Share exact requests with teammates in one click.
Persist settings with tern.config.json. Rate limiting, IP allowlisting, path blocking, session TTL, and audit logs.
Run your own relay via hookflo/tern-relay. Point the CLI with --relay to keep everything inside your own infrastructure.
The local dashboard at localhost:2019 gives you complete visibility into every webhook — payloads, headers, signatures, latency, and more.
Every option the CLI accepts — combinable with tern.config.json for persistent configuration.
| Flag | Type | Default | Description |
|---|---|---|---|
| --port | number | required | Local app port to forward requests to |
| --path | string | "/" | Path prefix for forwarded requests |
| --ui-port | number | 2019 | Dashboard HTTP port |
| --no-ui | boolean | false | Disable dashboard and browser WebSocket server |
| --relay | string | wss://relay.tern.hookflo.com | Override relay WebSocket URL for self-hosting |
| --max-events | number | 500 | Maximum events buffered in session memory |
Drop a tern.config.json file in your project root. CLI flags are merged and auto-loaded — no need to retype them every session.
All captured events live exclusively in process memory. Nothing is written to disk at any point during a session.
The relay infrastructure forwards payloads in real time — it never stores, logs, or indexes your webhook data.
Press Ctrl+C and the entire session — events, payloads, headers — is gone. No traces, no temp files.
No account. No ngrok. No storage. One command and you're live.