Skip to content

Blog

Introducing grpcmd-gui: A modern desktop app for gRPC API development and testing

Introduction

With the new year comes the release of a new product: grpcmd-gui! grpcmd-gui is a modern cross-platform desktop app for gRPC API development and testing. Some of the qualities of the new API client include being: open-source, local-first, and privacy-focused. grpcmd-gui is built using Wails (Go) + Vite + React (TypeScript) + shadcn/ui + TailwindCSS. grpcmd-gui is also built on the same code behind the CLI tool: grpcmd.

Demo

Demo

Features

The initial release brings the essential functionality with support for:

  • Fetching methods from reflection.
  • Sending request headers.
  • Viewing response headers and trailers.
  • Generating a request template in JSON.
  • Streaming request and response messages.
  • Customization via multiple themes.

Installation

To install and try out the grpcmd-gui desktop app, you can download it via homebrew on macOS or on the releases page for Windows and Linux. For every operating system, there are downloads for both amd64 (x86_64) and arm64 (aarch64) architectures along with options to download the app as a standalone archive and as an installer. For Linux, the app is also downloadable as an .AppImage.

Homebrew

Terminal window
brew install --cask grpcmd/tap/grpcmd-gui

The above command will install the grpcmd-gui package from the tap grpcmd/tap.

Binary

You can also download the binary files for macOS, Linux, and Windows from the Releases page.

Conclusion

Stay tuned for the many more upcoming features, such as:

  • Ability to use .proto files by defining import proto paths.
  • Multiple tabs and request sessions within one window.
  • Support for workspaces and persisting request configuration.
  • Layered configuration: Global -> Workspace -> Window Session.
  • Several more custom themes for the window and code editor.

Happy New Year, and I wish you all a prosperous and joyful 2025!

Introducing grpcmd-script: Powerful gRPC Testing with JavaScript

Introduction

I’m excited to announce the release of grpcmd-script! grpcmd-script provides a powerful framework allowing you to easily test your gRPC endpoints using JavaScript from the command line.

Key Features

  1. JavaScript testing

grpcmd-script offers you the flexibility of crafting your tests in the JavaScript language. You are able to define all the parameters of the gRPC request and make test assertions on all the gRPC response fields such as the headers, data messages, and trailers. In addition, you can import and make use of the chai assertion library.

  1. One binary; no dependencies

You only need two files to perform tests: the grpcmd-script executable and a test suite in JavaScript. The grpcmd-script executable is natively available for multiple platforms (macOS, Windows, and Linux) and architectures (386, amd64, and arm64), has a size of only 20MB, and doesn’t require any external dependency like the Node.js JavaScript runtime.

Because of this, grpcmd-script can run almost anywhere and provide powerful flexibility with JavaScript while consuming minimal resources.

  1. Powered by grpcmd

Internally, the gRPC calls are executed using the same code as the open-source grpcmd project.

Quick Demonstation

First, create a file to contain your test suite, such as tests.js. Then, within the file:

  1. Import functions from the chai assertion library as well as our helper library:

    const { expect } = require('chai');
    const { call, test, runTests } = require('grpcmd-script/test');
  2. Define your tests containing gRPC requests and response assertions:

    test('UnaryMethod', () => {
    const res = call({
    address: 'localhost:50051',
    method: 'UnaryMethod',
    messages: [
    {
    name: 'Bob'
    }
    ]
    });
    expect(res.messages).to.have.length(1);
    expect(res.messages).to.deep.equal([
    {
    message: 'Hello, Bob!'
    }
    ]);
    expect(res.trailers).to.include({
    'status-code': '0'
    });
    });
  3. Finally, run all the tests:

    runTests();
$

grpc-script ./tests.js

┌──────────┬────────┬────────┬───────┬─────────┬──────┐ │ File │ Failed │ Passed │ Total │ Percent │ Time │ ├──────────┼────────┼────────┼───────┼─────────┼──────┤ │ tests.js │ 0 │ 1 │ 1 │ 100.00% │ 25ms │ └──────────┴────────┴────────┴───────┴─────────┴──────┘

Errors

In case of any errors, the assertion details will be printed along with any console output.

$

grpc-script ./tests.js

UnaryMethod     AssertionError: expected { ‘status-code’: ‘0’ } to have property ‘status-code’ of ‘1’, but got ‘0’          ├──at tests.js:21:36(48)        └──at tests.js:26:9(29) console.log output for debugging ┌──────────┬────────┬────────┬───────┬─────────┬──────┐ │ File │ Failed │ Passed │ Total │ Percent │ Time │ ├──────────┼────────┼────────┼───────┼─────────┼──────┤ │ tests.js │ 1 │ 0 │ 1 │ 0.00% │ 25ms │ └──────────┴────────┴────────┴───────┴─────────┴──────┘

Conclusion

I’m looking forward to seeing the different use cases being served from this product. grpcmd-script is now available for purchase at this checkout link. Stay tuned for more!