funnel

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 frontend

Shell completions

funnel completion bash > /etc/bash_completion.d/funnel
funnel completion zsh > ~/.zfunc/_funnel

Request 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 ./dist

Embedded 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 2h

UDP tunneling

funnel udp 51820 --id wireguard

QUIC 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)

On this page