Self-hosted HTTP tunneling over gRPC with your own domain, OIDC-authenticated admin access, and a local tunnel client.
- Go 1.25+
git clone https://github.com/BRAVO68WEB/fwdx.git
cd fwdx
go build -o fwdx .- Human auth is OIDC only.
- Browser admin UI uses OIDC login.
- CLI human access uses
fwdx loginwith device flow. - Tunnel runtime uses per-agent credentials issued by the server control plane.
export FWDX_HOSTNAME=tunnel.myweb.site
export FWDX_OIDC_ISSUER=https://issuer.example.com
export FWDX_OIDC_CLIENT_ID=fwdx-web
export FWDX_OIDC_CLIENT_SECRET=your-client-secret
export FWDX_OIDC_REDIRECT_URL=https://tunnel.myweb.site/auth/oidc/callback
export FWDX_OIDC_ADMIN_EMAILS=you@example.com
fwdx serve \
--hostname "$FWDX_HOSTNAME" \
--oidc-issuer "$FWDX_OIDC_ISSUER" \
--oidc-client-id "$FWDX_OIDC_CLIENT_ID" \
--oidc-client-secret "$FWDX_OIDC_CLIENT_SECRET" \
--oidc-redirect-url "$FWDX_OIDC_REDIRECT_URL" \
--oidc-admin-emails "$FWDX_OIDC_ADMIN_EMAILS" \
--web-port 4040 \
--grpc-port 4440 \
--data-dir /var/lib/fwdxCreate DNS:
tunnel.myweb.site -> server IP*.tunnel.myweb.site -> server IP
export FWDX_SERVER=https://tunnel.myweb.site
fwdx login
fwdx whoamiThe admin UI is served at /admin/ui and redirects through OIDC.
Tunnel detail pages under /admin/ui/tunnels/:name expose assignment, recent events/logs, and ingress access controls.
fwdx domains add my.domain --server https://tunnel.myweb.siteexport FWDX_SERVER=https://tunnel.myweb.site
fwdx tunnel create -l localhost:8080 -s myapp --name myapp
fwdx tunnel start myappfwdx login
fwdx whoami
fwdx logoutfwdx manage tunnels --server https://tunnel.myweb.site
fwdx manage domains list --server https://tunnel.myweb.site
fwdx domains add my.domain --server https://tunnel.myweb.siteThese commands use the OIDC session created by fwdx login.
fwdx tunnel create -l localhost:3000 -s app --name app
fwdx tunnel start app --detach
fwdx logs app --follow
fwdx tunnel stop appEach tunnel supports:
publicbasic_authshared_secret_header- optional
ip_allowlist
Access rules are managed from the admin UI tunnel detail page.
FWDX_HOSTNAMEFWDX_OIDC_ISSUERFWDX_OIDC_CLIENT_IDFWDX_OIDC_CLIENT_SECRETFWDX_OIDC_REDIRECT_URLFWDX_OIDC_SCOPESFWDX_OIDC_ADMIN_EMAILSFWDX_OIDC_ADMIN_SUBJECTSFWDX_OIDC_ADMIN_GROUPSFWDX_OIDC_SESSION_SECRETFWDX_OIDC_DEVICE_CLIENT_IDFWDX_TRUSTED_PROXY_CIDRS
FWDX_SERVERFWDX_AGENT_NAMEFWDX_AGENT_TOKENFWDX_TUNNEL_PORTFWDX_MAX_PROXY_BODY_BYTESFWDX_MAX_RESPONSE_BODY_BYTES
- HTTP forwarding: supported
- SSE: supported
- WebSocket: not implemented yet (
501 Not Implemented)
The Fumadocs site under docs/ contains:
- Installation
- CLI Usage
- Deployment
- Architecture
- Authentication