gRPC, Globals, and Menu Filter

Version 2024.3.0

Great news! Yaak now speaks gRPC, adding yet another tool to the toolkit of REST and GraphQL.

That’s not all you get today though. Be sure to stay ‘till the end of the changelog so you don’t miss the other goodies that came along for the ride.

🚀 gRPC Support

gRPC is a performance-focused RPC framework, mostly used for internal communication in microservice architectures. There’s actually 4 types of gRPC calls, all of which are supported in this release of Yaak.

  • Unary → A single request and response, similar to a traditional HTTP request
  • Server Streaming → A single client request resulting in a stream of server messages
  • Client Streaming → A stream of client messages resulting in a single server response
  • Bidirectional Streaming → A stream of client messages server messages intermingled

Protocol Buffers and Reflection

Unlike text-based formats like JSON or XML, gRPC uses binary protocol buffers (protobuf), making it faster to encode and decode, and more compact. The downside is that humans like you and me can’t read or write protobuf messages, making manually debugging difficult. This is where Yaak comes in.

Field and value autocompletion

To construct a protobuf message Yaak must know the correct structure. For servers with reflection enabled, Yaak will automatically fetch the type descriptions. 🪄 Otherwise, you’ll be prompted to select the *.proto definitions manually.

Like GraphQL, these definitions provide autocomplete and linting to help construct message bodies. To get around the binary format, messages are defined in JSON, which getsn converted to protobuf behind the scenes. Cool, right? gRPC, as easy as JSON.

Authentication and Metadata

gRPC uses HTTP/2 for transport so, naturally, also supports standard authentication techniques like Basic Auth and Bearer tokens.

Metadata is also supported and is sent via HTTP/2 headers on the initial client request. Yaak will also show the response metadata from the initial server response, as well as the trailers (like headers, but at the end) on connection close.

Missing In This Release

There’s a lot to cover with gRPC, and Yaak doesn’t support everything yet. Two notable missing features are:

  • Binary Metadata → A compliment to the text-based metadata Yaak currently supports
  • Client Certificates → Authenticate using TLS client certificates

Be sure to submit some Feedback if you require these and so they can be prioritized.

Fixes and Improvements

It’s been amazing to see all the feedback, bugs, and feature requests coming in! Yaak is clearly striking a chord with many of you, so let’s keep it coming!

Here’s the full list of changes in this release, linked to the original feedback items where applicable.

🌍 Global Environment Variables

Environments are great for defining things like authentication tokens that differ between development and production. However, sometimes you only need one environment or have something like user_role that has the same value no matter which environment.

Now you can define variables in a global environment any use them anywhere, independent of which “sub environment” is active. Note that conflicting variables within sub-environments will get priority.

Variables defined in the global environment

🕵️ Filterable Menus

Inspired by the wonderful JetBrains IDEs, you can start typing in any dropdown menu to filter. This came about because the CmdOrCtrl+N hotkey now opens the “create” menu instead of creating a new HTTP request. Simply type a few characters to select between HTTP, GraphQL, gRPC, or folder, and continue on your way.

Yet another step towards ditching the mouse 🤘🐭

Also don’t worry, HTTP is still the first option so you can simply hit Enter to quickly create a new HTTP request like before.

Features

Tweaks

  • Show request method to sidebar
  • Add “other” text body type
  • Add Import/Create actions to initial empty state
  • CmdOrCtrl+N now opens create dropdown
  • More clear highlighting of variables
  • Prompt for name on folder creation

Fixes