{"id":13471712,"url":"https://github.com/vadimi/grpc-client-cli","last_synced_at":"2026-04-10T05:18:45.981Z","repository":{"id":38313517,"uuid":"238736361","full_name":"vadimi/grpc-client-cli","owner":"vadimi","description":"generic gRPC command line client","archived":false,"fork":false,"pushed_at":"2026-02-11T05:00:17.000Z","size":639,"stargazers_count":303,"open_issues_count":2,"forks_count":23,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-02-11T11:13:13.951Z","etag":null,"topics":["eureka","grpc","grpc-client"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vadimi.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-02-06T16:44:25.000Z","updated_at":"2026-02-10T16:58:06.000Z","dependencies_parsed_at":"2026-02-11T07:07:25.924Z","dependency_job_id":null,"html_url":"https://github.com/vadimi/grpc-client-cli","commit_stats":null,"previous_names":[],"tags_count":45,"template":false,"template_full_name":null,"purl":"pkg:github/vadimi/grpc-client-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vadimi%2Fgrpc-client-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vadimi%2Fgrpc-client-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vadimi%2Fgrpc-client-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vadimi%2Fgrpc-client-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vadimi","download_url":"https://codeload.github.com/vadimi/grpc-client-cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vadimi%2Fgrpc-client-cli/sbom","scorecard":{"id":914451,"data":{"date":"2025-08-11","repo":{"name":"github.com/vadimi/grpc-client-cli","commit":"70678967fea3c21adeba3aa1095072559607b293"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.8,"checks":[{"name":"Code-Review","score":1,"reason":"Found 1/10 approved changesets -- score normalized to 1","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/build.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":10,"reason":"12 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/vadimi/grpc-client-cli/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/vadimi/grpc-client-cli/build.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:31: update your workflow using https://app.stepsecurity.io/secureworkflow/vadimi/grpc-client-cli/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:41: update your workflow using https://app.stepsecurity.io/secureworkflow/vadimi/grpc-client-cli/build.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build.yml:55: update your workflow using https://app.stepsecurity.io/secureworkflow/vadimi/grpc-client-cli/build.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build.yml:66: update your workflow using https://app.stepsecurity.io/secureworkflow/vadimi/grpc-client-cli/build.yml/main?enable=pin","Warn: goCommand not pinned by hash: scripts/regen-grpc.sh:42","Warn: goCommand not pinned by hash: scripts/regen-grpc.sh:43","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned","Info:   0 out of   2 goCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: MIT License: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v1.22.5 not signed: https://api.github.com/repos/vadimi/grpc-client-cli/releases/239428685","Warn: release artifact v1.22.4 not signed: https://api.github.com/repos/vadimi/grpc-client-cli/releases/228805637","Warn: release artifact v1.22.3 not signed: https://api.github.com/repos/vadimi/grpc-client-cli/releases/215569531","Warn: release artifact v1.22.2 not signed: https://api.github.com/repos/vadimi/grpc-client-cli/releases/212526695","Warn: release artifact v1.22.1 not signed: https://api.github.com/repos/vadimi/grpc-client-cli/releases/206692835","Warn: release artifact v1.22.5 does not have provenance: https://api.github.com/repos/vadimi/grpc-client-cli/releases/239428685","Warn: release artifact v1.22.4 does not have provenance: https://api.github.com/repos/vadimi/grpc-client-cli/releases/228805637","Warn: release artifact v1.22.3 does not have provenance: https://api.github.com/repos/vadimi/grpc-client-cli/releases/215569531","Warn: release artifact v1.22.2 does not have provenance: https://api.github.com/repos/vadimi/grpc-client-cli/releases/212526695","Warn: release artifact v1.22.1 does not have provenance: https://api.github.com/repos/vadimi/grpc-client-cli/releases/206692835"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/build.yml:12"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 21 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-24T20:28:12.340Z","repository_id":38313517,"created_at":"2025-08-24T20:28:12.340Z","updated_at":"2025-08-24T20:28:12.340Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29463646,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-15T01:01:38.065Z","status":"ssl_error","status_checked_at":"2026-02-15T01:01:23.809Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["eureka","grpc","grpc-client"],"created_at":"2024-07-31T16:00:48.551Z","updated_at":"2026-04-10T05:18:45.952Z","avatar_url":"https://github.com/vadimi.png","language":"Go","funding_links":[],"categories":["Go","Tools"],"sub_categories":["CLI"],"readme":"# Description\n\n`grpc-client-cli` is a generic `gRPC` command line client - call any `gRPC` service. If your service exposes [gRPC Reflection service](https://github.com/grpc/grpc-proto/blob/master/grpc/reflection/v1/reflection.proto) the tool will discover all services and methods automatically. If not, please specify `--proto` parameter with the path to proto files.\n\n![](images/demo.gif)\n\n## Installation\n\nDownload the binary and install it to `/usr/local` directory:\n\n- Linux: `curl -L https://github.com/vadimi/grpc-client-cli/releases/download/v1.24.3/grpc-client-cli_linux_x86_64.tar.gz | tar -C /usr/local/bin -xz` (you might need to add `sudo` before tar)\n- macOS: `curl -L https://github.com/vadimi/grpc-client-cli/releases/download/v1.24.3/grpc-client-cli_darwin_x86_64.tar.gz | tar -C /usr/local/bin -xz`\n\nFor go `1.17+` use this command to install the app to `$GOPATH/bin` directory:\n\n- `go install github.com/vadimi/grpc-client-cli/cmd/grpc-client-cli@v1.24.3`\n- `go install github.com/vadimi/grpc-client-cli/cmd/grpc-client-cli@latest`\n\n## Usage\n\nJust specify a connection string to a service in `host:port` format and follow instructions to select service, method and enter request message in `json` or `proto` text format.\n\n`grpc-client-cli localhost:4400` or `grpc-client-cli --address localhost:4400`\n\nIn this case the service needs to expose gRPC Reflection service.\n\nFor full list of supported command line args please run `grpc-client-cli -h`.\n\nTo provide the list of services to call specify `--proto` parameter and `--protoimports` in case an additional directory for imports is required:\n\n```\ngrpc-client-cli --proto /path/to/proto/files localhost:5050\n```\n\nThe tool also supports `:authority` header override.\n\n```\ngrpc-client-cli --authority localhost:9090 localhost:5050\n```\n\nIt's also possible to capture some of the diagnostic information like request and response sizes, call duration:\n\n```\ngrpc-client-cli -V localhost:4400\n```\n\nProto text format for input and output:\n\n```\ngrpc-client-cli --informat text --outformat text localhost:5050\n```\n\n### TLS\n\nConnect using TLS:\n\n```\ngrpc-client-cli --tls localhost:5050\n```\n\nConnect using TLS with a custom CA certificate:\n\n```\ngrpc-client-cli --tls --cacert /path/to/ca.crt localhost:5050\n```\n\nConnect using mutual TLS (mTLS):\n\n```\ngrpc-client-cli --tls --cert /path/to/client.crt --certkey /path/to/client.key localhost:5050\n```\n\nSkip server certificate verification (testing only):\n\n```\ngrpc-client-cli --tls --insecure localhost:5050\n```\n\n### Headers\n\nPass extra headers with `-H` (may be specified multiple times):\n\n```\ngrpc-client-cli -H \"authorization: Bearer token123\" -H \"x-request-id: abc\" localhost:5050\n```\n\n### Deadline\n\nSet a custom call deadline (default is `15s`):\n\n```\ngrpc-client-cli --deadline 30s localhost:5050\ngrpc-client-cli -d 5m localhost:5050\n```\n\n### Keepalive\n\nSend keepalive pings with a custom interval:\n\n```\ngrpc-client-cli --keepalive --keepalive-time 30s localhost:5050\n```\n\n### Max receive message size\n\nOverride the default 4 MB receive message size limit:\n\n```\ngrpc-client-cli --max-receive-message-size 16777216 localhost:5050\n```\n\n### JSON field names in output\n\nBy default, response fields are printed using their original proto field names (e.g. `user_id`, `first_name`). Use `--out-json-names` to instead use the `json_name` option from the proto definition, which typically produces camelCase names (e.g. `userId`, `firstName`):\n\n```\ngrpc-client-cli --out-json-names localhost:5050\n```\n\n### Reflection version\n\nBy default `v1alpha` reflection is used. To let the tool detect the version automatically:\n\n```\ngrpc-client-cli --reflect-version auto localhost:5050\n```\n\nTo force `v1`:\n\n```\ngrpc-client-cli --reflect-version v1 localhost:5050\n```\n\n### Eureka Support\n\ngrpc-client-cli provides integrated support for services published to a Eureka service registry.\n\nConnecting to a service published to Eureka running on http://localhost:8761/eureka/\n\n```\ngrpc-client-cli eureka://application-name/\n```\n\nConnecting to a service running remotely on http://example.com:8761/eureka/\n\n```\ngrpc-client-cli eureka://example.com/eureka/application-name/\n```\n\nConnecting to a service running remotely on http://example.com:9000/not-eureka/\n\n```\ngrpc-client-cli eureka://example.com:9000/not-eureka/application-name/\n```\n\nThe Eureka currently connects to services using the IP Addresses published in the service registry and the following published ports, in order:\n\n- Metadata key \"grpc\"\n- Metadata key \"grpc.port\"\n- Default insecure port\n\nIf you require a different default port, please file an issue, and that port will be considered for inclusion.\n\n### Subcommands\n\n**discover** - print service protobuf contract\n\n```\ngrpc-client-cli discover localhost:5050\ngrpc-client-cli -s User discover localhost:5050\n```\n\n**health** - call [health check service](https://github.com/grpc/grpc-proto/blob/master/grpc/health/v1/health.proto), this command returns non-zero exit code in case health check returns `NOT_SERVING` response or the call fails for any other reason, so it's useful for example in kubernetes health probes\n\n```\ngrpc-client-cli health localhost:5050\n```\n\n```\ngrpc-client-cli --address localhost:5050 health\n```\n\n### Non-interactive mode\n\nIn non-interactive mode `grpc-client-cli` expects all parameters to be passed to execute gRPC service. The address, service and method can also be provided through environment variables: `GRPC_CLIENT_CLI_ADDRESS` (or `GRPC_CLIENT_CLI_ADDR`), `GRPC_CLIENT_CLI_SERVICE`, `GRPC_CLIENT_CLI_METHOD`.\n\n**Pass message json through stdin**\n\n```\necho '{\"user_id\": \"12345\"}' | grpc-client-cli -service UserService -method GetUser localhost:5050\n```\n\n```\ncat message.json | grpc-client-cli -service UserService -method GetUser localhost:5050\n```\n\nOn windows this could be achieved using `type` command\n\n```\ntype message.json | grpc-client-cli -service UserService -method GetUser localhost:5050\n```\n\n**Input file**\n\nAnother option of providing a file with message json is `-input` (or `-i`) parameter:\n\n```\ngrpc-client-cli -service UserService -method GetUser -i message.json localhost:5050\n```\n\n### Autocompletion\n\nTo enable autocompletion in your terminal add the following commands to your `.bashrc` or `.zshrc` files.\n\n**ZSH**\n\n```\nPROG=grpc-client-cli\n_CLI_ZSH_AUTOCOMPLETE_HACK=1\nsource  autocomplete/zsh_autocomplete\n```\n\n**Bash**\n\n```\nPROG=grpc-client-cli\nsource autocomplete/bash_autocomplete\n```\n\n`autocomplete` directory is located in the root of the repo. Please find more details [here](https://github.com/urfave/cli/blob/master/docs/v2/manual.md#bash-completion).\n\n## JSON format specifics\n\nMost of the fields in proto message can be intuitively mapped to `json` types. There are some exclusions though:\n\n1. `Timestamp` mapped to a string in `ISO 8601` format.\n\nFor example:\n\n```json\n{\n  \"flight_start_date\": \"2018-03-19T00:00:00.0Z\"\n}\n```\n\n2. `Duration` mapped to a string representation in seconds.\n\nFor example:\n\n```json\n{\n  \"start_time\": \"72000s\",\n  \"some_other_duration\": \"1s\"\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvadimi%2Fgrpc-client-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvadimi%2Fgrpc-client-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvadimi%2Fgrpc-client-cli/lists"}