<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>grpcmd | Blog</title><description/><link>https://grpc.md/</link><language>en</language><item><title>Introducing grpcmd-gui: A modern desktop app for gRPC API development and testing</title><link>https://grpc.md/blog/intro-grpcmd-gui/</link><guid isPermaLink="true">https://grpc.md/blog/intro-grpcmd-gui/</guid><pubDate>Thu, 02 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import { GITHUB_URL, PURCHASE_URL } from &amp;#39;../../../constants.ts&amp;#39;;
import { Steps } from &amp;#39;@astrojs/starlight/components&amp;#39;;&lt;/p&gt;
&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;With the new year comes the release of a new product: &lt;a href=&quot;https://github.com/grpcmd/grpcmd-gui&quot;&gt;grpcmd-gui&lt;/a&gt;! 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 &lt;a href=&quot;https://wails.io/&quot;&gt;Wails (Go)&lt;/a&gt; + &lt;a href=&quot;https://vite.dev/&quot;&gt;Vite&lt;/a&gt; + &lt;a href=&quot;https://react.dev/&quot;&gt;React (TypeScript)&lt;/a&gt; + &lt;a href=&quot;https://ui.shadcn.com/&quot;&gt;shadcn/ui&lt;/a&gt; + &lt;a href=&quot;https://tailwindcss.com/&quot;&gt;TailwindCSS&lt;/a&gt;. grpcmd-gui is also built on the same code behind the CLI tool: &lt;a href=&quot;https://github.com/grpcmd/grpcmd&quot;&gt;grpcmd&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Demo&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://grpc.md/blog/intro-grpcmd-gui/&quot;&gt;
            &lt;div&gt;&lt;img src=&quot;data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0MDAgMjUwIiB3aWR0aD0iNDAwIiBoZWlnaHQ9IjI1MCI+CiAgPHJlY3Qgd2lkdGg9IjQwMCIgaGVpZ2h0PSIyNTAiIGZpbGw9IiNCM0IwQjBGRiI+PC9yZWN0PgogIDx0ZXh0IHg9IjUwJSIgeT0iNTAlIiBkb21pbmFudC1iYXNlbGluZT0ibWlkZGxlIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0ibW9ub3NwYWNlIiBmb250LXNpemU9IjI1cHgiIGZpbGw9IiMyNjI2MjZGRiI+SW1hZ2U8L3RleHQ+ICAgCjwvc3ZnPg==&quot; alt=&quot;Demo&quot; /&gt;&lt;/div&gt;
            &lt;blockquote&gt;&lt;em&gt;Original image available in the blog post.&lt;/em&gt;&lt;/blockquote&gt;
          &lt;/a&gt;
          &lt;br /&gt;&lt;/p&gt;
&lt;h3&gt;Features&lt;/h3&gt;
&lt;p&gt;The initial release brings the essential functionality with support for:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fetching methods from reflection.&lt;/li&gt;
&lt;li&gt;Sending request headers.&lt;/li&gt;
&lt;li&gt;Viewing response headers and trailers.&lt;/li&gt;
&lt;li&gt;Generating a request template in JSON.&lt;/li&gt;
&lt;li&gt;Streaming request and response messages.&lt;/li&gt;
&lt;li&gt;Customization via multiple themes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;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 &lt;code&gt;amd64&lt;/code&gt; (&lt;code&gt;x86_64&lt;/code&gt;) and &lt;code&gt;arm64&lt;/code&gt; (&lt;code&gt;aarch64&lt;/code&gt;) 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 &lt;code&gt;.AppImage&lt;/code&gt;.&lt;/p&gt;
&lt;h3&gt;Homebrew&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;brew install --cask grpcmd/tap/grpcmd-gui
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The above command will install the &lt;code&gt;grpcmd-gui&lt;/code&gt; package from the tap &lt;a href=&quot;https://github.com/grpcmd/homebrew-tap&quot;&gt;&lt;code&gt;grpcmd/tap&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;Binary&lt;/h3&gt;
&lt;p&gt;You can also download the binary files for macOS, Linux, and Windows from the &lt;a href=&quot;https://github.com/grpcmd/grpcmd-gui/releases&quot;&gt;Releases&lt;/a&gt; page.&lt;/p&gt;
&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Stay tuned for the many more upcoming features, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ability to use .proto files by defining import proto paths.&lt;/li&gt;
&lt;li&gt;Multiple tabs and request sessions within one window.&lt;/li&gt;
&lt;li&gt;Support for workspaces and persisting request configuration.&lt;/li&gt;
&lt;li&gt;Layered configuration: Global -&amp;gt; Workspace -&amp;gt; Window Session.&lt;/li&gt;
&lt;li&gt;Several more custom themes for the window and code editor.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Happy New Year, and I wish you all a prosperous and joyful 2025!&lt;/p&gt;
</content:encoded></item><item><title>Introducing grpcmd-script: Powerful gRPC Testing with JavaScript</title><link>https://grpc.md/blog/intro-grpcmd-script/</link><guid isPermaLink="true">https://grpc.md/blog/intro-grpcmd-script/</guid><pubDate>Sun, 04 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;import { GITHUB_URL, PURCHASE_URL } from &amp;#39;../../../constants.ts&amp;#39;;
import { Steps } from &amp;#39;@astrojs/starlight/components&amp;#39;;&lt;/p&gt;
&lt;h2&gt;Introduction&lt;/h2&gt;
&lt;p&gt;I&amp;#39;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.&lt;/p&gt;
&lt;h3&gt;Key Features&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;h4&gt;JavaScript testing&lt;/h4&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;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 &lt;code&gt;chai&lt;/code&gt; assertion library.&lt;/p&gt;
&lt;ol start=&quot;2&quot;&gt;
&lt;li&gt;&lt;h4&gt;One binary; no dependencies&lt;/h4&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;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&amp;#39;t require any external dependency like the Node.js JavaScript runtime.&lt;/p&gt;
&lt;p&gt;Because of this, grpcmd-script can run almost anywhere and provide powerful flexibility with JavaScript while consuming minimal resources.&lt;/p&gt;
&lt;ol start=&quot;3&quot;&gt;
&lt;li&gt;&lt;h4&gt;Powered by grpcmd&lt;/h4&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Internally, the gRPC calls are executed using the same code as the &lt;a href=&quot;{GITHUB_URL}&quot; target=&quot;_blank&quot; class=&quot;plausible-event-name=GitHub+Repo plausible-event-position=Blog&quot;&gt;open-source grpcmd project&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Quick Demonstation&lt;/h2&gt;
&lt;p&gt;First, create a file to contain your test suite, such as &lt;code&gt;tests.js&lt;/code&gt;. Then, within the file:&lt;/p&gt;


&lt;div class=&quot;w-full&quot;&gt;
  &lt;div class=&quot;coding inverse-toggle px-5 pt-4 shadow-lg text-gray-100 text-sm font-mono subpixel-antialiased 
              bg-gray-800  pb-6 pt-4 rounded-lg leading-normal overflow-scroll&quot;&gt;
      &lt;span class=&quot;absolute top mb-2 flex&quot;&gt;
          &lt;span class=&quot;h-3 w-3 bg-red-500 rounded-full&quot;&gt;&lt;/span&gt;
          &lt;span class=&quot;ml-2 h-3 w-3 bg-orange-300 rounded-full&quot;&gt;&lt;/span&gt;
          &lt;span class=&quot;ml-2 h-3 w-3 bg-green-500 rounded-full&quot;&gt;&lt;/span&gt;
      &lt;/span&gt;
      &lt;span class=&quot;mt-7 flex&quot;&gt;
          &lt;span&gt;$&lt;/span&gt;
          &lt;p class=&quot;flex-1 typing items-center pl-2&quot;&gt;grpc-script ./tests.js&lt;/p&gt;
      &lt;/span&gt;
      &lt;pre class=&quot;!border-0&quot;&gt;
            ┌──────────┬────────┬────────┬───────┬─────────┬──────┐
            │   File   │ Failed │ Passed │ Total │ Percent │ Time │
            ├──────────┼────────┼────────┼───────┼─────────┼──────┤
            │ tests.js │      0 │      &lt;em class=&quot;not-italic text-green-400&quot;&gt;1&lt;/em&gt; │     1 │ &lt;em class=&quot;not-italic text-green-400&quot;&gt;100.00%&lt;/em&gt; │ 25ms │
            └──────────┴────────┴────────┴───────┴─────────┴──────┘
      &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Errors&lt;/h3&gt;
&lt;p&gt;In case of any errors, the assertion details will be printed along with any console output.&lt;/p&gt;
&lt;div class=&quot;w-full&quot;&gt;
  &lt;div class=&quot;coding inverse-toggle px-5 pt-4 shadow-lg text-gray-100 text-sm font-mono subpixel-antialiased 
              bg-gray-800  pb-6 pt-4 rounded-lg leading-normal overflow-scroll&quot;&gt;
      &lt;span class=&quot;absolute top mb-2 flex&quot;&gt;
          &lt;span class=&quot;h-3 w-3 bg-red-500 rounded-full&quot;&gt;&lt;/span&gt;
          &lt;span class=&quot;ml-2 h-3 w-3 bg-orange-300 rounded-full&quot;&gt;&lt;/span&gt;
          &lt;span class=&quot;ml-2 h-3 w-3 bg-green-500 rounded-full&quot;&gt;&lt;/span&gt;
      &lt;/span&gt;
      &lt;span class=&quot;mt-7 flex&quot;&gt;
          &lt;span&gt;$&lt;/span&gt;
          &lt;p class=&quot;flex-1 typing items-center pl-2&quot;&gt;grpc-script ./tests.js&lt;/p&gt;
      &lt;/span&gt;
      &lt;pre class=&quot;!border-0&quot;&gt;
        &lt;em class=&quot;not-italic text-red-500&quot;&gt;✕&lt;/em&gt; UnaryMethod&amp;NewLine;
        &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AssertionError: expected &amp;lcub; &apos;status-code&apos;: &apos;0&apos; &amp;rcub; to have property &apos;status-code&apos; of &apos;1&apos;, but got &apos;0&apos;&amp;nbsp;&amp;nbsp;
        &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;├──at tests.js:21:36(48)
        &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;└──at tests.js:26:9(29)&amp;NewLine;
            console.log output for debugging&amp;NewLine;
            ┌──────────┬────────┬────────┬───────┬─────────┬──────┐
            │   File   │ Failed │ Passed │ Total │ Percent │ Time │
            ├──────────┼────────┼────────┼───────┼─────────┼──────┤
            │ tests.js │      &lt;em class=&quot;not-italic text-red-500&quot;&gt;1&lt;/em&gt; │      0 │     1 │   &lt;em class=&quot;not-italic text-red-500&quot;&gt;0.00%&lt;/em&gt; │ 25ms │
            └──────────┴────────┴────────┴───────┴─────────┴──────┘
        &lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;I&amp;#39;m looking forward to seeing the different use cases being served from this product. grpcmd-script is now available for purchase at &lt;a href=&quot;{PURCHASE_URL}&quot; target=&quot;_blank&quot; class=&quot;plausible-event-name=Purchase plausible-event-position=Blog&quot;&gt;this checkout link&lt;/a&gt;. Stay tuned for more!&lt;/p&gt;
</content:encoded></item></channel></rss>