grpcurl is a command-line tool for interacting with gRPC servers.
The tool solves the problem that gRPC servers use binary protocol buffer encoding, making them impossible to interact with using standard HTTP tools like curl. grpcurl accepts JSON-encoded messages, which are human-friendly and script-friendly, and translates them into the binary protobuf format required by gRPC. It supports all RPC method types, including unary, server streaming, client streaming, and bidirectional streaming methods. For bidirectional streaming, users can interact interactively from a terminal using stdin as the request body.
The tool works with gRPC servers in multiple ways. If a server supports the gRPC reflection service, grpcurl can query it directly to discover the service schema. Alternatively, users can provide proto source files or protoset files containing compiled descriptors. The tool supports both plain-text and TLS-secured connections, including mutual TLS where the client must present a certificate. grpcurl is suitable for developers who need to test, debug, or manually invoke gRPC services during development and operations. It fills a gap for teams working with gRPC who lack a simple command-line interface comparable to curl for HTTP APIs.
The project maintains active development with regular updates and fixes. The codebase is written in Go and includes not only the command-line tool but also a library package that other tools can use to dynamically invoke gRPC endpoints. The project provides multiple installation methods including precompiled binaries, Homebrew on macOS, and Docker images, making it accessible across different development environments.