JCGrant and MarcusLongmuir websockets in grpcwebproxy (#180)
* Add use_websockets flag to enable websocket transport

* Update README.md with websocket instructions

* Neaten README.md

* Fix typo and missing word

* Add full-stop
Latest commit 2cf3019 Aug 15, 2018


gRPC Web Proxy

This is a small reverse proxy that can front existing gRPC servers and expose their functionality using gRPC-Web protocol, allowing for the gRPC services to be consumed from browsers.


  • structured logging of proxied requests to stdout
  • debug HTTP endpoint (default on port 8080)
  • Prometheus monitoring of proxied requests (/metrics on debug endpoint)
  • Request (/debug/requests) and connection tracing endpoints (/debug/events)
  • TLS 1.2 serving (default on port 8443):
    • with option to enable client side certificate validation
  • both secure (plaintext) and TLS gRPC backend connectivity:
    • with customizable CA certificates for connections

The indented use is as a companion process for gRPC server containers.


To install, you need to have Go >= 1.8, and call go get:

go get -u github.com/improbable-eng/grpc-web/go/grpcwebproxy


Here's a simple example that fronts a local, TLS gRPC server:

    --server_tls_cert_file=../../misc/localhost.crt \
    --server_tls_key_file=../../misc/localhost.key \
    --backend_addr=localhost:9090 \

Running specific servers

By default, grpcwebproxy will run both TLS and HTTP debug servers. To disable either one, set the --run_http_server or --run_tls_server flags to false.

For example, to only run the HTTP server, run the following:

    --backend_addr=localhost:9090 \

Enabling Websocket Transport

By default, grpcwebproxy will not use websockets as a transport layer. To enable websockets, set the --use_websockets flag to true.

$GOPATH/bin/grpcwebproxy \
    --backend_addr=localhost:9090 \