{"id":49246343,"url":"https://github.com/hallelx2/bridgehook","last_synced_at":"2026-04-24T22:01:29.808Z","repository":{"id":350145066,"uuid":"1205483402","full_name":"hallelx2/bridgehook","owner":"hallelx2","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-24T17:05:54.000Z","size":547,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-24T19:11:43.171Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hallelx2.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-09T02:15:33.000Z","updated_at":"2026-04-24T17:05:58.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/hallelx2/bridgehook","commit_stats":null,"previous_names":["hallelx2/bridgehook"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hallelx2/bridgehook","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hallelx2%2Fbridgehook","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hallelx2%2Fbridgehook/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hallelx2%2Fbridgehook/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hallelx2%2Fbridgehook/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hallelx2","download_url":"https://codeload.github.com/hallelx2/bridgehook/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hallelx2%2Fbridgehook/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32242315,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T13:21:15.438Z","status":"ssl_error","status_checked_at":"2026-04-24T13:21:15.005Z","response_time":64,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-04-24T22:01:28.887Z","updated_at":"2026-04-24T22:01:29.802Z","avatar_url":"https://github.com/hallelx2.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\".github/banner.png\" alt=\"BridgeHook\" width=\"800\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\".github/logo.svg\" alt=\"bridgehook\" height=\"48\" /\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003cstrong\u003eZero-install webhook testing. Your browser is the bridge.\u003c/strong\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"#quickstart\"\u003eQuickstart\u003c/a\u003e \u0026bull;\n  \u003ca href=\"#how-it-works\"\u003eHow It Works\u003c/a\u003e \u0026bull;\n  \u003ca href=\"#documentation\"\u003eDocs\u003c/a\u003e \u0026bull;\n  \u003ca href=\"#self-hosting\"\u003eSelf-Host\u003c/a\u003e \u0026bull;\n  \u003ca href=\"#downloads\"\u003eDownloads\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://github.com/hallelx2/bridgehook/actions/workflows/ci.yml\"\u003e\u003cimg src=\"https://github.com/hallelx2/bridgehook/actions/workflows/ci.yml/badge.svg\" alt=\"CI\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/hallelx2/bridgehook/actions/workflows/deploy-pages.yml\"\u003e\u003cimg src=\"https://github.com/hallelx2/bridgehook/actions/workflows/deploy-pages.yml/badge.svg\" alt=\"CD\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/hallelx2/bridgehook/releases\"\u003e\u003cimg src=\"https://img.shields.io/github/v/release/hallelx2/bridgehook?label=release\u0026color=9093ff\" alt=\"Release\" /\u003e\u003c/a\u003e\n  \u003ca href=\"https://github.com/hallelx2/bridgehook/blob/main/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/badge/license-MIT-blue\" alt=\"License\" /\u003e\u003c/a\u003e\n  \u003cimg src=\"https://img.shields.io/badge/cost-%240%2Fmo-28c840\" alt=\"Cost: $0/mo\" /\u003e\n\u003c/p\u003e\n\n---\n\n## What is BridgeHook?\n\nBridgeHook forwards webhooks from the internet to your localhost **using your browser as the proxy**. No CLI, no binary, no npm package, no account.\n\n```\nStripe → POST → Relay Server → SSE → Your Browser → fetch() → localhost:3000\n```\n\nOpen a URL. Enter your port. Get a webhook endpoint. Done.\n\n## Why?\n\n| | ngrok | Cloudflare Tunnel | localtunnel | **BridgeHook** |\n|---|---|---|---|---|\n| Install required | CLI binary | CLI binary | npm package | **Nothing** |\n| Account required | Yes | Yes | No | **No** |\n| Locked-down machines | Blocked | Blocked | Blocked | **Works** |\n| Stable URLs (free) | Rotates | Yes | No | **Yes** |\n| Built-in inspector | Paid | No | No | **Yes, free** |\n| Cost | Free tier limited | Free | Free | **Free forever** |\n\n## Quickstart\n\n**1. Open the web app**\n```\nhttps://bridgehook-web.pages.dev\n```\n\n**2. Enter your port and click Start Bridge**\n```\nPort: 3000\nPaths: /webhook/stripe, /webhook/github\n```\n\n**3. Copy your webhook URL**\n```\nhttps://bridgehook-relay.halleluyaholudele.workers.dev/hook/ch_9x4kf2m\n```\n\n**4. Paste into Stripe/GitHub/Twilio — webhooks flow to localhost**\n\nThat's it. No install, no signup, no config files.\n\n## How It Works\n\nYour browser sits at the intersection of the internet and your localhost. BridgeHook's JavaScript runs **inside your browser** and:\n\n1. Connects to the cloud relay via **Server-Sent Events (SSE)**\n2. Receives webhook events in real-time\n3. Calls `fetch(\"http://localhost:3000/webhook/stripe\")` to forward them\n4. Sends the response back to the relay → back to Stripe\n\nThe relay is a dumb pipe. The browser is the smart gatekeeper. The relay never touches your machine.\n\n```\nTHE INTERNET                          YOUR MACHINE\n┌─────────────────────────┐        ┌──────────────────────────────┐\n│  Webhook Sender          │        │  Your Browser                │\n│  (Stripe/GitHub)         │        │  ┌────────────────────────┐  │\n│         │                │        │  │  BridgeHook JS         │  │\n│         │ POST           │        │  │  1. SSE receive         │  │\n│         ▼                │  SSE   │  │  2. fetch() localhost   │  │\n│  Relay Server     ──────────────────  │  3. Send response back │  │\n│  (Cloudflare Worker)     │        │  └────────────────────────┘  │\n└─────────────────────────┘        │         │                     │\n                                   │         ▼                     │\n                                   │  localhost:3000               │\n                                   └──────────────────────────────┘\n```\n\n## Architecture\n\n```\nbridgehook/\n├── packages/shared/      Shared types, constants, Drizzle DB schema\n├── apps/web/             Landing page + Dashboard (React + Vite)\n├── apps/desktop/         System tray app (Tauri + Rust, Phase 2)\n├── relay/                Cloudflare Worker + Neon PostgreSQL\n└── docs/                 Documentation site (React + Vite)\n```\n\n| Component | Technology | Free Tier |\n|-----------|-----------|-----------|\n| Relay | Cloudflare Workers | 100K req/day |\n| Database | Neon PostgreSQL + Drizzle | 0.5GB |\n| Web App | Cloudflare Pages | Unlimited |\n| Desktop | Tauri v2 | N/A |\n\n## Downloads\n\n### Web App (no download needed)\nJust open your browser:\n- **App:** [app.bridgehook.dev](https://bridgehook-web.pages.dev)\n- **Docs:** [docs.bridgehook.dev](https://bridgehook-docs.pages.dev)\n\n### Desktop App (Phase 2)\n\nBackground operation without a browser tab. Runs in system tray.\n\n| Platform | Download | Package Manager |\n|----------|----------|-----------------|\n| **Windows** | [`.msi`](https://github.com/hallelx2/bridgehook/releases/latest) | `scoop install bridgehook` |\n| **macOS** | [`.dmg`](https://github.com/hallelx2/bridgehook/releases/latest) | `brew install bridgehook/tap/bridgehook` |\n| **Linux** | [`.AppImage`](https://github.com/hallelx2/bridgehook/releases/latest) | `snap install bridgehook` |\n\n### Package Registries\n\n```bash\n# Homebrew (macOS/Linux)\nbrew install bridgehook/tap/bridgehook\n\n# Scoop (Windows)\nscoop bucket add bridgehook https://github.com/hallelx2/scoop-bridgehook\nscoop install bridgehook\n\n# npm (thin wrapper)\nnpx bridgehook\n\n# Cargo (Rust)\ncargo install bridgehook\n```\n\n## Self-Hosting\n\nBridgeHook is fully open source. Run the entire stack yourself:\n\n```bash\ngit clone https://github.com/hallelx2/bridgehook\ncd bridgehook\npnpm install\n\n# Database\nneon projects create --name bridgehook\ncd relay \u0026\u0026 DATABASE_URL=\"your-neon-url\" npx drizzle-kit push\n\n# Configure\necho 'DATABASE_URL=your-neon-url' \u003e relay/.dev.vars\necho 'VITE_RELAY_URL=http://localhost:8787' \u003e apps/web/.env\n\n# Run\npnpm dev:relay  # Terminal 1\npnpm dev:web    # Terminal 2\n```\n\nTotal cost: **$0/month** on free tiers.\n\n## Documentation\n\nFull docs at [docs.bridgehook.dev](https://bridgehook-docs.pages.dev):\n\n- **Getting Started** — Introduction, Quickstart\n- **Core Concepts** — How It Works, SSE Technology, The Browser Bridge\n- **Security** — Security Model, Channel Secrets, Path Allowlist\n- **Comparison** — vs ngrok, vs Cloudflare Tunnel, vs localtunnel, Tradeoffs\n- **API Reference** — Relay API, SSE Events\n- **Deployment** — Self-Hosting, Architecture\n\n## Security\n\n- **Channel secrets** — SHA-256 hashed, raw secret never leaves your browser\n- **Path allowlist** — Only approved endpoints forwarded to localhost\n- **Auto-expiry** — Channels die after 24 hours\n- **Rate limiting** — 60 req/min, 1MB max body, 100 event buffer\n- **Unguessable IDs** — 128-bit random UUIDs\n- **Instant kill** — Close tab = bridge dies immediately\n\n## Contributing\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md).\n\n## License\n\nMIT — See [LICENSE](LICENSE).\n\n---\n\n\u003cp align=\"center\"\u003e\n  \u003csub\u003eBuilt with Cloudflare Workers, Neon PostgreSQL, React, and Tauri.\u003c/sub\u003e\n\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhallelx2%2Fbridgehook","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhallelx2%2Fbridgehook","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhallelx2%2Fbridgehook/lists"}