An open API service indexing awesome lists of open source software.

https://github.com/carlos3g/webhook-it

Stable public URLs for webhooks, forwarded to your localhost. Interactive terminal CLI, runs 100% local.
https://github.com/carlos3g/webhook-it

bun cli developer-tools localhost ngrok opentui solidjs terminal tui typescript webhook-testing webhooks

Last synced: 4 days ago
JSON representation

Stable public URLs for webhooks, forwarded to your localhost. Interactive terminal CLI, runs 100% local.

Awesome Lists containing this project

README

          

# webhook-it

Stable public URLs for webhooks, forwarded in real time to your localhost โ€”
through an interactive terminal dashboard. Runs 100% on your machine; the only
external piece is the ngrok tunnel.

> ๐Ÿ“š **Documentation site** โ€” a full Docusaurus site lives in
> [`website/`](website/): get-started guides, concepts, a dashboard tour, a CLI
> reference and architecture, with generated terminal screenshots throughout.
> Run it with `cd website && npm install && npm start`.
>
> The original Markdown notes are still in [`docs/`](docs/README.md):
> [current state](docs/STATE.md) ยท [usage](docs/USAGE.md) ยท
> [motivation](docs/MOTIVATION.md) ยท [architecture](docs/ARCHITECTURE.md) ยท
> [development](docs/DEVELOPMENT.md)

## What it is

`wi` opens an interactive dashboard (built with [OpenTUI](https://github.com/anomalyco/opentui)
+ Solid). From it you start/stop the daemon, manage endpoints, watch webhooks
arrive live, and replay events โ€” all from the keyboard.

```
โ•ญ webhook-it โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ running (tunnel) โ€” https://you.ngrok-free.app โ•ฎ
โ•ญ Endpoints โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎโ•ญ Events โ€” stripe-dev โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚ > stripe-dev โ”‚โ”‚ 14:02:51 a1b2c3d4e5 POST 200 โ”‚
โ”‚ github-app โ”‚โ”‚ 14:02:31 f6g7h8i9j0 POST/refunds 200 โ”‚
โ”‚ ... โ”‚โ”‚ ... โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏโ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
โ•ญ up/down select - u start/stop - n new - c domain - d delete - r replay - q quit โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
```

## How it works

1. Press `u` in the dashboard to start the local daemon + an ngrok tunnel.
2. A webhook arrives at the stable public URL โ†’ the daemon saves the event and
forwards it to your `localhost`, with headers and body intact.
3. History and replay live in a local SQLite database โ€” nothing leaves your machine.

## Project config

A repo can commit a `.webhook-it.json` listing its webhook endpoints. A teammate
then provisions all of them with a single command โ€” `wi apply` โ€” instead of
creating each by hand:

```json
{
"project": "acme-api",
"endpoints": {
"stripe": { "target": "http://localhost:3000/webhooks/stripe" }
}
}
```

Endpoints are namespaced by `project`, so two repositories never collide. Full
reference in [`docs/USAGE.md`](docs/USAGE.md).

## Structure

```
apps/
cli/ interactive dashboard (OpenTUI + Solid) โ€” `webhook-it` / `wi`
packages/
core/ daemon, bun:sqlite storage, forwarder, ngrok adapter
shared/ shared types and zod schemas
tsconfig/ base TypeScript configs
docs/
README.md (index), STATE.md, USAGE.md, MOTIVATION.md,
PROJECT.md, ARCHITECTURE.md, DEVELOPMENT.md
```

## Prerequisites

- **Bun 1.3+** โ€” the runtime, package manager and bundler ([install](https://bun.sh)).
- **ngrok** โ€” only for tunnel mode: installed and authenticated
(`ngrok config add-authtoken `), plus a free static domain reserved at
. Local-only testing needs none of this.

## Development

```bash
bun install
bun run typecheck
bun run dev # runs the dashboard from source (hot reload)
bun run build # compiles a standalone binary at apps/cli/dist/wi
```

## Usage

After `bun run build`, run the binary (it is self-contained โ€” no Bun needed to run it):

```bash
./apps/cli/dist/wi
```

Inside the dashboard: `u` start/stop the daemon ยท `n` new endpoint ยท `c` set the
ngrok domain ยท `t` toggle tunnel/local mode ยท `r` replay ยท `d` delete ยท `q` quit.

`wi apply` (the one subcommand) provisions endpoints from a project's
`.webhook-it.json`. See [`docs/USAGE.md`](docs/USAGE.md) for the full reference.

## Status

MVP in development. What already works is in [`docs/STATE.md`](docs/STATE.md);
the backlog is in [`docs/PROJECT.md`](docs/PROJECT.md).