Source | Docs


Resterm is a terminal client for working with HTTP, GraphQL, and gRPC services. No cloud sync, no signups, no heavy desktop app, no bullshit.
It pairs a Vim-like-style editor with a workspace explorer, response diff, history, profiler and scripting so you can iterate on requests without leaving the keyboard (no mouse support is a feature here).

Highlights

Quick Start

If you just want to hit an API right now, you don’t need any files.

  1. Start Resterm
# In a project directory (no files required)
resterm

# Or explicitly point to a workspace
resterm --workspace path/to/project
  1. Type a minimal request
  1. Send it
  1. Move around

That’s enough to be productive: open Resterm, type a URL, hit Ctrl+Enter, see the response.


Quick Start (but with files)

If you work with .http / .rest files, Resterm will discover and use them.

  1. Open a directory with request files
  1. Pick and send a request
  1. Minimal request file example
### Status check
# @name status
GET https://httpbin.org/status/204
User-Agent: resterm

### Authenticated echo
# @name bearerEcho
# @auth bearer {{auth.token}}
GET https://httpbin.org/bearer
Accept: application/json

Navigation & Layout Cheat Sheet

A few keys that make Resterm feel “native” quickly:


[!TIP]
If you only remember three shortcuts...
- Ctrl+Enter - send request
- Tab / Shift+Tab - switch panes
- g+p - jump to response

Inline curl import

Drop a curl command into the editor and press Ctrl+Enter anywhere inside to turn it into a structured request. Resterm understands common flags (-X, -H, --data*, --json, --url, --user, --compressed, -F/--form, etc.), merges repeated data segments, and respects multipart uploads.

curl \
  --compressed \
  --url "https://httpbin.org/post?source=resterm&case=multipart" \
  --request POST \
  -H "Accept: application/json" \
  -H "X-Client: resterm-dev" \
  --user resterm:test123 \
  -F file=@README.md \
  --form-string memo='Testing resterm inline curl
with multiline value' \
  --form-string meta='{"env":"test","attempt":1}'

If you copied the command from a shell, prefixes like sudo or $ are ignored automatically. Resterm loads the file attachment, preserves multiline form fields, and applies compression/auth headers without extra tweaks.

Quick Configuration Overview

Workflows

Compare Runs

Try _examples/compare.http to see @compare directives and the g+c shortcut in action (pair it with resterm --compare dev,stage,prod for instant multi-environment sweeps).

Modern API work rarely stops at a single environment, so Resterm bakes in a compare workflow that takes seconds to use:

  1. Add # @compare dev stage prod base=stage to any request (or launch the app with --compare dev,stage,prod --compare-base stage).
  2. Press g+c (or Enter if you mapped the command) to send the current request to every listed environment. Resterm flips into a split view automatically so you can watch progress live.
  3. When the run finishes, move to the Compare tab and use the arrow keys (PgUp/PgDn/Home/End work too) to highlight any environment. Press Enter and the primary pane shows that environment, the secondary pane pins the baseline and you land in the Diff tab so Pretty/Raw/Headers all reflect selected ↔ baseline.
  4. Loading a compare entry from History gives the same experience even if you are offline. Resterm rehydrates the snapshots so you can keep auditing deltas without rerunning requests.

For more info. about compare runs, see docs/resterm.md#compare-runs.

Tracing & Timeline

Deep dive into budgets, keyboard shortcuts, and trace scripting in docs/resterm.md#timeline--tracing.

OpenAPI imports

Resterm can translate an OpenAPI 3 specification into a .http collection directly from the CLI.

resterm \
  --from-openapi openapi-test.yml \
  --http-out openapi-test.http \
  --openapi-base-var apiBase \
  --openapi-resolve-refs \
  --openapi-server-index 1

The repository ships with openapi-specs.yml, an intentionally full-featured spec that covers array/object query parameters, callbacks, and unsupported constructs (for example OpenID Connect). Those unsupported pieces surface as Warning: lines within the generated header comment so you can verify warning handling end-to-end.

[!NOTE]
Resterm relies on kin-openapi, which currently supports OpenAPI documents up to v3.0.1. Work on v3.1 support is tracked in getkin/kin-openapi#1102.

More about OpenAPI importer and available flags in docs/resterm.md#importing-openapi-specs.

Streaming (WebSocket & SSE)

Streaming requests are first-class citizens in Resterm. Enable the Stream response tab to watch events in real time. See docs/resterm.md#streaming-sse--websocket for the complete directive list.

Server-Sent Events

Annotate any HTTP request with # @sse to keep the connection open and capture events:

### Notification feed
# @name streamNotifications
# @sse duration=1m idle=5s max-events=50
GET https://api.example.com/notifications
Accept: text/event-stream

@sse accepts:

The Pretty/Raw/Headers tabs collapse into a JSON transcript when a stream finishes and the history entry exposes a summary (events, bytes, reason). More SSE options and transcript fields live in docs/resterm.md#server-sent-events-sse.

WebSockets

Switch any request to WebSocket mode with # @websocket and describe scripted steps with # @ws lines:

### Chat handshake
# @name websocketChat
# @websocket timeout=10s receive-timeout=5s subprotocols=chat.v2,json
# @ws send {"type":"hello"}
# @ws wait 1s
# @ws send-json {"type":"message","text":"Hi"}
# @ws close 1000 "client done"
wss://chat.example.com/stream

or if you prefer just to open websocket connection:

### Chat
# @name websocketChat
# @websocket
ws://chat.example.com/stream

WebSocket options mirror runtime controls:

Each @ws directive emits a step:

The transcript records sender/receiver, opcode, sizes, close metadata and elapsed time. History entries keep the conversation for later review or scripted assertions. See docs/resterm.md#websockets-websocket-ws.

Stream viewer & console

Custom themes

Resterm ships with a default palette, but you can provide your own by dropping theme definitions into the themes directory mentioned above. Each theme can be written in TOML or JSON and only needs to override the parts you care about.

A ready-to-use sample lives in _examples/themes/aurora.toml. Point RESTERM_THEMES_DIR env var at that folder to try it immediately.

[metadata]
name = "Oceanic"
author = "You"

[styles.header_title]
foreground = "#5fd1ff"
bold = true

[colors]
pane_active_foreground = "#5fd1ff"
pane_border_focus_file = "#1f6feb"

Save the file as ~/.config/resterm/themes/oceanic.toml (or to your RESTERM_THEMES_DIR) and press Ctrl+Alt+T (or type g then t) inside Resterm to pick it as the default. The selected theme is persisted to settings.toml so it is restored on the next launch. The theming primer (directory layout, schema, and testing tips) lives in docs/resterm.md#theming.

Custom bindings

Resterm looks for ${RESTERM_CONFIG_DIR}/bindings.toml first (and bindings.json second). Each entry maps an action ID to one or more bindings:

[bindings]
save_file = ["ctrl+shift+s"]
set_main_split_horizontal = ["g s", "ctrl+alt+s"]
send_request = ["ctrl+enter", "cmd+enter"]

The complete action catalog and a binding reference live in docs/resterm.md#custom-bindings.

Check out the sample in _examples/bindings/bindings.toml

Documentation

The full reference, including request syntax, metadata, directive tables, scripting APIs, transport settings and advanced workflows, lives in docs/resterm.md.


Tags: tool   distribution   http   console  

Last modified 06 December 2025