FauxRPC

Mock gRPC, Connect, and REST from Protobuf and OpenAPI.

FauxRPC turns .proto files, Protobuf descriptors, and OpenAPI specs into a working mock server and intercepting proxy. Inject test scenarios, debug live service traffic, or fake unimplemented endpoints.

Get Started GitHub
Schema
Valid

Real-time request inspector and stub manager.

Pass --dashboard to inspect live traffic across every protocol, browse loaded schemas, and turn captured requests into deterministic YAML stubs.

FauxRPC Request Log showing live multi-protocol traffic and payload inspection
FauxRPC Stubs manager showing CEL active_if rules and YAML export
FauxRPC Schema Browser showing loaded Protobuf definitions

One server speaks gRPC, gRPC-Web, Connect, and REST.

Call the exact same mock service from backend gRPC clients, browser Connect or gRPC-Web apps, and standard HTTP/REST tools using OpenAPI specs or google.api.http annotations.

gRPC gRPC-Web ConnectRPC HTTP / REST
Multi-protocol support →
Terminal
# Call with fauxrpc curl (auto-generates request payloads)
$ fauxrpc curl --http2-prior-knowledge examples.demo.DemoService/GetItem

# Call with buf curl over Connect or gRPC-Web
$ buf curl --protocol=grpcweb --http2-prior-knowledge \
    http://127.0.0.1:6660/examples.demo.DemoService/GetItem

# Call OpenAPI or transcoded google.api.http routes with curl
$ curl http://127.0.0.1:6660/v1/items/550e8400-e29b-41d4-a716-446655440000
stubs.yaml fauxrpc run --stubs=stubs.yaml
stubs:
  - id: vip-greeting
    target: examples.protovalidate.GreetService/Greet
    active_if: 'req.name == "Ada Lovelace"'
    cel_content: '{"greeting": "Welcome back, " + req.name + "!"}'

  - id: rate-limited
    target: examples.demo.DemoService/GetItem
    active_if: 'req.id == "ffffffff-ffff-ffff-ffff-ffffffffffff"'
    error_code: 8
    error_message: "rate limit exceeded"

Pin specific responses with YAML and CEL rules.

Need deterministic responses or error states for tests? Write declarative stubs that match request fields with Common Expression Language (active_if), compute dynamic fields, or simulate gRPC and HTTP error codes.

Learn about stubs →

Proxy live services, record stubs, or load schemas from anywhere.

Place FauxRPC in front of an upstream service with --proxy-to to inspect calls, inject stubbed test scenarios, record real responses with --record-dir, and automatically fake UNIMPLEMENTED endpoints. Or start standalone from local .proto files, BSR modules, server reflection, and OpenAPI specs.

Terminal
# Proxy a live service, inject stubs, and record real traffic
$ fauxrpc run --proxy-to=127.0.0.1:8080 --record-dir=stubs/ --dashboard

# Serve directly from the Buf Schema Registry
$ fauxrpc run --schema=buf.build/connectrpc/eliza --dashboard

# Serve an OpenAPI 3.0 specification
$ fauxrpc run --schema=openapi.yaml --dashboard