Expose local ports with custom DNS for webhook testing - TUI interface
Project description
Webhook Tunnel
A professional Python CLI to expose local ports with a custom hostname, ideal for testing webhooks and callbacks during development. Includes an interactive TUI (Text User Interface).
This version can also expose your local endpoint to the public internet (no account required) using localtunnel via npm/npx.
✨ Key Features
- 🚀 Fast local port exposure
- 🌐 Custom hostname with subdomains
- 🌍 Public internet URL via npm/npx (localtunnel) for webhook testing
- 💻 Interactive TUI
- 📊 Real-time monitoring (CPU, memory, uptime)
- 🔍 Built-in log viewer
- 🎯 Multiple tunnels simultaneously
- 💾 Automatic persistence (config + tunnel registry)
- 🧹 Dead process cleanup
📦 Installation
From PyPI (recommended)
pip install webhook-mannager
With extras
# Full installation with an example webhook server
pip install webhook-mannager[webhook-server]
# Development extras
pip install webhook-mannager[dev]
🚀 Quick Start
1) Start your local service
Make sure your application is running locally, e.g.:
uvicorn app:app --port 8000
2) Create a tunnel
tunnel start teste 8000
You will get:
- Hostname URL (e.g.
http://teste.localhost:8001) — requires DNS resolution ofteste.localhost - Local URL (always works) (e.g.
http://127.0.0.1:8001) — works without any OS DNS changes
If your hostname does not resolve, use the printed curl --resolve ... example.
3) Expose publicly (for real webhook callbacks)
tunnel start teste 8000 --public
This will:
- keep the local gateway running (port forward)
- start localtunnel via npx
- print an External URL that can be called by third-party webhook providers
If npx is not available, the tool can automatically download a portable Node.js LTS runtime into:
~/.webhook-mannager/tools/node
🖥️ TUI (Interactive Interface)
tunnel-tui
Common keys:
ccreate a tunnelddelete a tunnelrrestart a tunnellopen logsptoggle public exposure (localtunnel)qquit
🧪 Testing your endpoint
If your local app has GET /readyz, you can test via:
- Local gateway:
curl -v http://127.0.0.1:8001/readyz
- Hostname without OS DNS changes:
curl -v http://127.0.0.1:8001/readyz -H "Host: teste.localhost"
- External URL (requires
--public):
curl -v <external_url>/readyz
📚 Documentation
📄 License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file webhook_mannager-1.0.1.tar.gz.
File metadata
- Download URL: webhook_mannager-1.0.1.tar.gz
- Upload date:
- Size: 25.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.8.20
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1b4163e2c3909c5cd945f551a45bbc362bb93f7c418b308a0d2013a97cea3938
|
|
| MD5 |
70fc4c3b05328a12d5e745e155f31685
|
|
| BLAKE2b-256 |
66e6980d353c0caa24d8258c8bcbf1e599ac2073b830ddd058785445051aad16
|
File details
Details for the file webhook_mannager-1.0.1-py3-none-any.whl.
File metadata
- Download URL: webhook_mannager-1.0.1-py3-none-any.whl
- Upload date:
- Size: 25.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.8.20
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
94dc87c7af5ca462e44d721e0edc4a7a0b7641e15756d9aadf258a78b2f88fc8
|
|
| MD5 |
82b7068569da05bb046028ef63dcd84f
|
|
| BLAKE2b-256 |
7ad8be1f78febab3e1b99e93ee29fc0a939b794c136255c3ae9f147841c39c4a
|