a tunneling solution built with go
expose local services to the internet through websocket connections
funnel creates tunnels from a public server to your local machine using websockets. when requests arrive at the server, they get proxied through to your local service. useful for development, testing, webhooks, and demos.
curl -sSfL https://raw.githubusercontent.com/karol-broda/funnel/master/scripts/install.sh | bashfunnel http 3000 --server http://localhost:8080 --id my-tunnelyour service is now available at http://my-tunnel.localhost:8080.
see the installation guide for more options.
graph LR
A["local app<br/>:3000"] --> B["funnel client"]
B -.websocket.-> C["funnel server<br/>:8080"]
D["browser/curl"] --> E["tunnel-id.localhost:8080"]
E --> C
C -.-> B
B --> A
style A fill:#b7bdf8,color:#24273a
style B fill:#f5bde6,color:#24273a
style C fill:#8bd5ca,color:#24273a
style D fill:#a6da95,color:#24273a
style E fill:#91d7e3,color:#24273a
the client connects to the server via websocket and forwards http requests to your local app. the server routes requests based on subdomain (tunnel-id.server:port).
more in the architecture docs.
http tunneling, custom tunnel ids, auto-reconnection with exponential backoff, cross-platform (linux/macos/windows, amd64/arm64), tls via let's encrypt, api key authentication, rest api for management.
git clone https://github.com/karol-broda/funnel.git
cd funnel
make dev-setup
make build
make testmake help for all commands.
fork, branch, make dev-setup, make changes, make build && make test, make fmt && make lint, open a pr.