Console / Log View

The Console is a chronological slide-up panel that logs every request, response, stream message, and channel event in the order they happen. It's distinct from History -- history is method-centric and persisted across reloads, the console is session-centric and ephemeral, optimized for watching sequences of activity in real time.

Opening it

Click the Console button at the right end of the action bar (it has a clock icon and shows a count badge once activity has been logged). Click it again -- or use the close button in the panel header -- to hide it.

The panel slides up from the bottom and takes 280 pixels of vertical space. Content above is not pushed -- the panel sits on top.

Anatomy of an entry

Each entry is a single line by default, expandable to show the full body:

14:32:18.412   REQ   todo.TodoService/GetTodo               { "id": 7 }
14:32:18.486   RES   todo.TodoService/GetTodo   OK   74 ms  { "id": 7, "title": "Buy milk", ... }
Column Meaning
Time Local time with millisecond precision
Type REQ / RES / STR / SND / CH / ERR (see below)
Method service/method of the call
Status gRPC status name (OK, NotFound, ...) when relevant
Duration Round-trip time in milliseconds
Preview First 80 characters of the body, single-line

Click the line to expand it -- the full body appears as pretty-printed JSON below the summary. Click again to collapse.

Entry types

Type Color When
REQ blue A request is about to be sent
RES (ok) green A successful response received (status OK / Completed / Connected)
RES (warn) yellow A response with a non-OK gRPC status (NotFound, InvalidArgument, ...)
STR accent A single message received over a server-streaming or channel SSE flow
SND accent A message sent over an open duplex / client-streaming channel
CH accent Channel lifecycle events (open, close)
ERR red Network errors, channel failures, send/connect errors

The left edge of each row is colored by type so you can scan the panel quickly without reading every cell.

Buffer behavior

The console keeps at most 200 entries in a ring buffer. Once full, the oldest entry is dropped to make room for the newest. The count badge in the header shows the current entry count.

The buffer:

  • Lives in memory only -- never persisted to disk
  • Resets on page reload -- there's no way to recover entries after a refresh
  • Auto-scrolls to the latest entry when the panel is open and a new event arrives
  • Stops auto-scrolling implicitly when the panel is closed (entries still accumulate, you'll see them on next open)

Clear

The Clear button in the panel header empties the buffer. There is no confirmation -- it's local-only state and easily reproducible by sending another request.

Use cases

Goal How the console helps
Debugging a request sequence (A → B → C) See all three calls with their bodies on a single timeline
Validating request chaining Expand the previous response and confirm the JSON shape before writing ${response.X}
Watching a stream's throughput Each STR row shows when a message arrived
Catching intermittent errors ERR entries are red and stay in the buffer until cleared
Understanding channel state CH rows mark open / close, SND / STR rows show every message in either direction

Differences from History

History Console
Storage localStorage (persists across reloads) In-memory only
Granularity One entry per completed call One entry per event (request, response, stream message, etc.)
Order Most recent first Chronological (oldest first, scrolls to latest)
Scope Per method Whole session, all methods, all protocols
Replay Click to replay the call with the same body Click to expand body (no replay)
Limit 50 entries 200 entries

History is for "call this same thing again". Console is for "what just happened, in what order?".

Tips

  • Keep it open while testing chains -- you can see the previous response shape and craft ${response.X} placeholders without leaving the request pane.
  • Filter visually with colors -- ERR is red, OK is green, anything else stands out at a glance.
  • Don't rely on it for audit logs -- it caps at 200 entries and disappears on reload. For real audit needs, capture at the server side.