Skip to main content
httpmon automatically detects gRPC, gRPC-Web, and Protobuf content types and decodes binary bodies into readable JSON.
httpmon gRPC-Web decoded body

Supported content types

httpmon decodes bodies with these content types:
Content typeDecoder
application/grpcProtobuf (no frame stripping)
application/grpc+protoProtobuf
application/grpc-webgRPC-Web (strips 5-byte frames, then Protobuf)
application/grpc-web+protogRPC-Web
application/protobufRaw Protobuf
application/x-protobufRaw Protobuf
application/x-google-protobufRaw Protobuf

Named decoding with proto files

Use --proto-path to point httpmon at your .proto files. Field names appear in the decoded JSON instead of field numbers.
httpmon --proto-path ./api/protos
httpmon --proto-path ./api/user.proto --proto-path ./api/order.proto
The flag accepts files or directories (recursively scans for *.proto). You can repeat it multiple times. Cross-file imports are resolved automatically. With proto files, a SayHello response decodes as:
{
  "message": "Hello, Alice! You are 30 years old.",
  "success": true
}

Raw wire decoding

Without --proto-path, httpmon still decodes Protobuf bodies using raw wire format. Field numbers appear as JSON keys instead of names:
{
  "1": "Hello, Alice! You are 30 years old.",
  "2": true
}
This works with any Protobuf payload — no proto files needed.

gRPC-Web framing

gRPC-Web responses use 5-byte length-prefixed frames. httpmon strips these automatically before decoding the Protobuf payload. Compressed frames are noted but not decoded. Trailer frames are silently skipped.

Import search paths

Use --proto-include to add import search directories, similar to protoc’s -I flag. This is needed when your .proto files import definitions from other directories.
httpmon --proto-path ./api/protos --proto-include ./vendor/protos

Persisting proto paths

Save proto paths in ~/.httpmon/config.json so you don’t need --proto-path on every run:
{
  "proto_paths": ["./api/protos"],
  "proto_includes": ["./vendor/protos"]
}
CLI --proto-path and --proto-include flags are appended to any paths already in the config file.

Per-host proto registries

If different services use different .proto definitions, configure per-host registries in ~/.httpmon/config.json:
{
  "proto_hosts": {
    "api.example.com": {
      "paths": ["./protos/example"],
      "includes": ["./protos/common"]
    },
    "*.internal.dev": {
      "paths": ["./protos/internal"]
    }
  }
}
Host patterns support * wildcards. Per-host registries take precedence over the global proto_paths for matching hosts. Requests to hosts that don’t match any pattern fall back to the global registry.

Keyboard shortcuts

KeyAction
pToggle between pretty-printed and raw JSON
eOpen decoded body in external editor