Roadmap
Planned features and future direction
Project config file
A funnel.toml in the project root that declares tunnels. funnel up reads it and starts everything.
[tunnels.api]
port = 3000
id = "my-api"
team = "backend"
[tunnels.frontend]
port = 5173
id = "my-frontend"Committable to the repo so anyone on the team gets the same tunnel setup with one command.
Multiple tunnels per client
Run multiple tunnels from a single process, sharing a single QUIC connection:
funnel http 3000 --id api -- http 5173 --id frontendShell completions
funnel completion bash > /etc/bash_completion.d/funnel
funnel completion zsh > ~/.zfunc/_funnelRequest inspection
A local web UI at http://127.0.0.1:4040 for inspecting requests flowing through tunnels. Live feed with headers, body, timing. Filter, replay, export as curl.
File serving
funnel file ./distEmbedded static file server with directory listing and content-type detection.
Tunnel access control
funnel http 3000 --auth user:pass
funnel http 3000 --allow-ip 10.0.0.0/8
funnel http 3000 --expires 2hUDP tunneling
funnel udp 51820 --id wireguardQUIC already runs over UDP, so the transport is a natural fit.
Other planned work
- Self-update mechanism (
funnel update) - Rate limiting (per-user, per-team, per-tunnel)
- Audit logging (structured JSON events)
- OpenTelemetry integration
- HTTP/2 proxying (enables gRPC tunneling)
- Web dashboard (Leptos)