grpcexp is an interactive explorer for interacting with grpc servers. It's basically a tui on top of grpcurl.
You can install the latest version of grpcexp by running the following command in your terminal.
bash -c "$(curl -fsSL https://raw.githubusercontent.com/prnvbn/grpcexp/main/installer.sh)"Move the binary to a directory in your PATH. For e.g. /usr/local/bin on linux.
You can install grpcexp using the prnvbn/homebrew-tap.
brew install prnvbn/tap/grpcexpgo install github.com/prnvbn/grpcexp/cmd/grpcexp@latestWindows installation instructions are a WIP. In the meantime, you can download the latest release from the releases page
Note
To update grpcexp to the latest version, simply re-run any of the installation methods above.
They always install the most recent release.
To enable autocomplete, add the following to your .bashrc or .bash_profile file:
# you can also generate completions for zsh and fish shells by replacing bash with zsh or fish
source <(grpcexp completion bash)Let me preface this by saying, I really like grpcurl but have a few nits:
I have to run ~5 commands to make one grpc call
$ grpcurl -plaintext :50051 list
grpc.reflection.v1.ServerReflection
grpc.reflection.v1alpha.ServerReflection
helloworld.Greeter$ grpcurl -plaintext :50051 list helloworld.Greeter
helloworld.Greeter.SayHello$ grpcurl -plaintext :50051 describe helloworld.Greeter.SayHello
helloworld.Greeter.SayHello is a method:
rpc SayHello ( .helloworld.HelloRequest ) returns ( .helloworld.HelloReply );$ grpcurl -plaintext :50051 describe helloworld.HelloRequest
helloworld.HelloRequest is a message:
message HelloRequest {
string name = 1;
}$ grpcurl -plaintext -d '{"name": "joe"}' :50051 helloworld.Greeter.SayHello
{
"message": "Hello joe"
}the lack of POSIX/GNU-style --flags
personal taste.
manual JSON construction for complex types
With grpcurl, you have to manually construct JSON for nested messages, maps, lists, and oneofs which is very tedious.
Feel free to open an issue or submit a pull request. I'm always open to suggestions and improvements :)