Skip to main content

gRPC

Rostyman supports all four gRPC streaming patterns — Unary, Server Streaming, Client Streaming, and Bidirectional Streaming — with a visual Proto Explorer, a Monaco-based JSON request editor, metadata, authentication, TLS configuration, and a response panel that shows status codes, timing, and stream logs.

Opening a gRPC Tab

Click + New Tab and select gRPC, or open a saved gRPC request from the sidebar. Each tab has its own proto file, selected method, request body, metadata, auth, and TLS configuration.


Layout Overview

The gRPC tab is split into two panels:

  • Left panel (Proto Explorer, 220px) — import proto files and browse the package/service/method tree
  • Right panel — the URL bar, sub-tabs (Message, Metadata, Auth, TLS, Settings), and response area

Proto Explorer (Left Panel)

Loading a Proto File

The Proto Explorer header shows Proto Explorer in uppercase. Below it, a path input field and a load button let you import .proto files.

To load a proto file:

  1. Type or paste the absolute file path in the path input, e.g.:
    /home/user/api/user.proto
    C:\projects\api\user.proto
  2. Press Enter or click Import Proto

Rostyman parses the file using protobufjs. Relative imports in the proto file are resolved from the same directory as the loaded file, so if user.proto imports common/types.proto, it will be found automatically if it exists at the same path relative to user.proto.

While loading, the button shows Loading... and is disabled. Once parsed, the method tree populates immediately.

Method Tree

The tree shows the full hierarchy from the proto file:

▶ package.name
▶ ServiceName
MethodName UNARY
ListMethod SERVER STREAM
UploadMethod CLIENT STREAM
ChatMethod BIDI STREAM
  • Packages — top-level namespace from the package declaration
  • Services — each service block in the proto
  • Methods — each rpc in a service, with a method type badge

Method type badges identify the streaming mode with distinct colors:

BadgeColorPattern
UNARYGreenSingle request, single response
SERVER STREAMCyanSingle request, multiple responses
CLIENT STREAMYellowMultiple requests, single response
BIDI STREAMPurpleMultiple requests, multiple responses

Click any method to select it. Rostyman reads the request message's fields and pre-populates the JSON editor with a skeleton object where string fields default to "", booleans to false, and numeric fields to 0.


URL / Config Bar (Right Panel)

The config bar runs across the top of the right panel.

Status Badge

A pill on the left shows the current operation status:

StatusColorMeaning
idleGrayNo call in progress
callingAmberUnary or client-stream call in flight
streamingAmberServer/bidi streaming active
doneGreenCall completed successfully
errorRedCall failed

Server URL

The server address input accepts host:port without a scheme:

localhost:50051
grpc.api.example.com:443
192.168.1.10:9090

Do not include grpc:// or https:// — TLS is controlled separately in the TLS tab. Environment variables ({{variable}}) are resolved at invoke time.

Selected Method Display

When a method is selected in the Proto Explorer, a pill in the config bar shows ServiceName/MethodName and the streaming mode badge. This is a read-only indicator — to change the method, click a different one in the left panel.

Duration

After a completed Unary or Client Streaming call, the response duration in milliseconds (e.g., 42ms) appears next to the method display.

Invoke / Stop Button

  • Invoke (Play icon, accent color) — starts the call. Disabled if no method is selected or a unary call is already in flight.
  • Stop (Square icon, red) — available during Server Streaming or Bidi Streaming. Clicking it sends a disconnect and closes the stream.

Environment Selector

The Environment dropdown controls variable resolution for the server URL, request body, and metadata values.

Save / Save As

Press Ctrl+S (or Cmd+S on macOS) to save. The Save button highlights in the accent color when there are unsaved changes. If the tab has no saved request yet, the Save As dialog appears instead.


Sub-tabs

Five sub-tabs appear below the config bar:

Message Tab

The Message tab contains a full Monaco editor for composing the gRPC request body as JSON.

When you select a method from the Proto Explorer, the editor is pre-populated with a skeleton based on the method's input message fields:

{
"id": 0,
"name": "",
"active": false
}

Edit the skeleton with your actual values. Environment variables ({{variable}}) in string values are resolved at invoke time.

For Client Streaming, the request body should be a JSON array of message objects — each element is sent as one message in the stream:

[
{ "chunk": "part one" },
{ "chunk": "part two" },
{ "chunk": "part three" }
]

For Bidirectional Streaming, a separate Bidi Send input area appears below the main editor. Use it to send individual messages to the server while the stream is open, without ending it.

Monaco editor features available in the request editor:

  • JSON syntax highlighting and bracket matching
  • Line numbers, word wrap, code folding
  • 2-space indentation, no minimap

Metadata Tab

Metadata is the gRPC equivalent of HTTP headers — key-value pairs sent with every call on this request. Common uses include passing authentication tokens, request IDs, and tenant identifiers.

The metadata editor shows a table with three columns:

ColumnDescription
Enabled checkboxToggle a metadata entry without deleting it
KeyMetadata key name (lowercase recommended per gRPC spec)
ValueMetadata value — supports {{variable}} substitution

Click + Add to append a new row. Click × to remove a row.

When there are no rows, a "No metadata" placeholder is shown.

Authentication configured in the Auth tab is also injected as metadata at invoke time (see below). Auth metadata takes precedence over manually entered metadata with the same key.

Auth Tab

The Auth tab configures how authentication credentials are injected into the gRPC call. The selected auth type is applied as metadata at invoke time.

Auth Type selector:

TypeDescription
NoneNo authentication. No metadata is injected.
Bearer TokenInjects authorization: Bearer <token> as metadata.
API KeyInjects a custom header name with a custom value as metadata.
Basic AuthBase64-encodes username:password and injects authorization: Basic <encoded> as metadata.

Bearer Token fields:

  • Token — the raw token value. Supports {{variable}}.

API Key fields:

  • Header Name — the metadata key to use (default: x-api-key). Supports {{variable}}.
  • Value — the API key value. Supports {{variable}}.

Basic Auth fields:

  • Username — supports {{variable}}.
  • Password — supports {{variable}}.

All credential values are stored in the tab state and persisted when saved to a collection.

TLS Tab

The TLS tab controls whether the connection uses TLS and how certificates are handled.

Enable TLS (toggle)

When off, the connection is made over plain TCP (insecure). When on, TLS is used and additional options appear.

Default: off.

Skip Certificate Verification (toggle, visible when TLS is enabled)

When on, the client connects without verifying the server's certificate. Useful for local development with self-signed certificates. Do not use in production.

Default: on (when TLS is first enabled).

When Skip Certificate Verification is turned off, three path fields appear for mutual TLS:

FieldDescription
CA Certificate PathAbsolute path to the Certificate Authority file used to verify the server's certificate
Client Certificate PathAbsolute path to the client's TLS certificate (for mutual TLS)
Client Key PathAbsolute path to the client's private key (for mutual TLS)

All three path fields accept absolute file system paths. Leave Client Certificate and Client Key empty if you only need server-side TLS (not mutual TLS).

Example for a self-signed CA with client certs:

CA Path:   /etc/ssl/myapp/ca.crt
Cert Path: /etc/ssl/myapp/client.crt
Key Path: /etc/ssl/myapp/client.key

Settings Tab

The Settings tab provides call-level configuration options.

SettingDefaultDescription
Timeout30000 msMaximum time to wait for a unary or client-stream call to complete. 0 means no timeout. For streaming calls, this is the connection timeout.
CompressionOffEnable gzip compression for request messages.
Max Message Size4 MBMaximum size of a single received message. Messages larger than this cause a receive error.

Response Panel

After a Unary or Client Streaming call completes, the Response sub-tab becomes active automatically. For Streaming calls, a Stream Log panel appears below the main tab area.

Unary / Client Streaming Response

The Response tab shows:

  • Status — the gRPC status code and message (e.g., OK, NOT_FOUND, INTERNAL, UNAUTHENTICATED)
  • Duration — call duration in milliseconds, also shown in the config bar
  • Response body — the full JSON-formatted response message in a Monaco editor with syntax highlighting
  • Copy button — copies the response body to clipboard

If the call fails, the response area shows the error message from the gRPC status.

Streaming Response Log

For Server Streaming, Client Streaming, and Bidirectional Streaming calls, a collapsible Stream Log panel appears below the sub-tabs. It shows every stream event in chronological order.

Entry typeColorMeaning
receiveBlue/accentA message received from the server
sendGreenA message you sent (bidi streams)
infoMutedStream lifecycle events (started, ended, stream ID)
errorRedStream errors

Each row shows a timestamp and the full JSON-formatted message. The log auto-scrolls to the latest entry. Click the collapse/expand chevron in the log header to hide the log and give more space to the editor.


Streaming Modes in Detail

Unary

Single request, single response — the standard RPC pattern.

  1. Select a method with no streaming flags in the Proto Explorer
  2. Fill in the request body
  3. Click Invoke
  4. The response appears in the Response tab

Server Streaming

The server returns multiple messages over time after a single request.

  1. Select a method with SERVER STREAM badge
  2. Fill in the request body
  3. Click Invoke — the button changes to Stop
  4. Each response message appears in the Stream Log as it arrives
  5. The stream closes automatically when the server finishes, or click Stop to close early

Client Streaming

The client sends multiple messages, then the server responds once.

  1. Select a method with CLIENT STREAM badge
  2. Write a JSON array in the request body — each array element is one message
  3. Click Invoke
  4. Rostyman sends all array elements as a stream and then signals end-of-stream
  5. The single server response appears in the Response tab

Bidirectional Streaming

Both sides exchange messages simultaneously.

  1. Select a method with BIDI STREAM badge
  2. Fill in the initial request body in the editor
  3. Click Invoke — the connection opens, the initial message is sent, the button becomes Stop
  4. Received messages appear in the Stream Log
  5. Use the Bidi Send input below the editor to send additional messages while the stream is open
  6. Click Stop to close the stream and receive any final response

Saving to a Collection

Press Ctrl+S (or Cmd+S on macOS) to save the gRPC request.

What is persisted:

  • Server URL
  • Proto file path
  • Selected service and method
  • Request body (JSON)
  • Metadata rows
  • Auth type and credential fields
  • TLS configuration
  • Settings (timeout, compression, max message size)

Tips

  • If your proto has import statements, make sure all imported .proto files are in the same directory tree — relative imports are resolved from the loaded file's directory
  • Use Bearer Token auth with {{token}} and store tokens in your environments — no need to copy-paste tokens into the metadata table
  • For mutual TLS in development, generate a local CA and client cert with mkcert or openssl, then point the TLS tab at the generated files
  • The Stream Log retains up to 500 entries per session — long-running streams that produce many messages will rotate old entries out
  • Unary calls switch to the Response tab automatically; click the Stream Log tab to review streaming results from a previous call