gRPC Client

Browser Limitation: Native gRPC requires HTTP/2, which browsers don't fully support for requests. This tool works with grpc-web enabled services. See setup instructions below.

1. Load Proto Definition

Or paste proto definition:
gRPC-Web Setup Instructions

To test gRPC services from a browser, you need to set up a gRPC-Web proxy. Here are the options:

Option 1: Envoy Proxy

# envoy.yaml
static_resources:
  listeners:
  - name: listener_0
    address:
      socket_address: { address: 0.0.0.0, port_value: 8080 }
    filter_chains:
    - filters:
      - name: envoy.filters.network.http_connection_manager
        typed_config:
          "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
          codec_type: auto
          stat_prefix: ingress_http
          route_config:
            name: local_route
            virtual_hosts:
            - name: local_service
              domains: ["*"]
              routes:
              - match: { prefix: "/" }
                route: { cluster: grpc_service }
              cors:
                allow_origin_string_match:
                - prefix: "*"
                allow_methods: GET, PUT, DELETE, POST, OPTIONS
                allow_headers: "*"
                expose_headers: grpc-status, grpc-message
          http_filters:
          - name: envoy.filters.http.grpc_web
          - name: envoy.filters.http.cors
          - name: envoy.filters.http.router
  clusters:
  - name: grpc_service
    connect_timeout: 0.25s
    type: logical_dns
    http2_protocol_options: {}
    lb_policy: round_robin
    load_assignment:
      cluster_name: grpc_service
      endpoints:
      - lb_endpoints:
        - endpoint:
            address:
              socket_address: { address: localhost, port_value: 9090 }

Option 2: grpcwebproxy (simpler)

# Install
go install github.com/nicksrandall/grpcwebproxy@latest

# Run (proxies localhost:9090 to localhost:8080)
grpcwebproxy \
  --backend_addr=localhost:9090 \
  --run_tls_server=false \
  --allow_all_origins

Option 3: Connect-Go (native support)

If using Go, Connect-Go provides native browser support without a separate proxy.

Option 4: Holy CORS (for gRPC-Web endpoints)

If your gRPC server already supports gRPC-Web but has CORS issues, use Holy CORS:

# macOS
brew install bugdays-com/tap/holy-cors && holy-cors

# Docker
docker run -p 2345:2345 ghcr.io/bugdays-com/holy-cors
Sample Proto Definition
syntax = "proto3";

package helloworld;

service Greeter {
  // Unary RPC
  rpc SayHello (HelloRequest) returns (HelloReply);

  // Server streaming RPC
  rpc SayHelloServerStream (HelloRequest) returns (stream HelloReply);

  // Client streaming RPC
  rpc SayHelloClientStream (stream HelloRequest) returns (HelloReply);

  // Bidirectional streaming RPC
  rpc SayHelloBidiStream (stream HelloRequest) returns (stream HelloReply);
}

message HelloRequest {
  string name = 1;
  int32 count = 2;
  repeated string tags = 3;
}

message HelloReply {
  string message = 1;
  int64 timestamp = 2;
}

Online gRPC Client & Protobuf Tester

Test gRPC services directly from your browser using gRPC-Web. This tool parses .proto files, generates request templates, and invokes gRPC methods. Perfect for API testing, debugging, and learning gRPC.

Features

  • Parse .proto files to discover services and methods
  • Auto-generate request message templates
  • Support for unary, server streaming, client streaming, and bidirectional streaming RPCs
  • Custom metadata headers
  • JSON-based request building
  • Works with gRPC-Web enabled servers

gRPC vs REST

Feature gRPC REST
Protocol HTTP/2 HTTP/1.1 or HTTP/2
Format Protocol Buffers (binary) JSON/XML (text)
Streaming Bi-directional built-in Limited (SSE, WebSocket)
Contract Strict (.proto files) Optional (OpenAPI/Swagger)
Performance Higher (binary, multiplexing) Lower (text, no multiplexing)