a terminal-based REST/GraphQL/gRPC client.
Split panes with response diffing side-by-side
Split panes response and profiler
Workflow run with step-by-step validation
Resterm is a terminal-first client for working with HTTP, GraphQL, and gRPC services. No cloud sync, no signups, no heavy desktop app. Simple, yet feature rich, terminal client for .http/.rest files. 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.
- Editor with inline syntax highlighting, search (
Ctrl+F), clipboard motions, and inline metadata completions (type@for contextual hints). - Workspace navigator that filters
.http/.restfiles, supports recursion and keeps request lists in sync as you edit. - Inline requests and curl import for one-off calls (
Ctrl+Enteron a URL or curl block). - Pretty/Raw/Header/Diff/History views with optional split panes and pinned comparisons.
- Variable scopes, captures, JavaScript hooks, and multi-step workflows with per-step expectations and overrides.
- GraphQL helpers (
@graphql,@variables,@query) and gRPC directives (@grpc,@grpc-descriptor, reflection, metadata). - Built-in OAuth 2.0 client plus support for basic, bearer, API key, and custom header auth.
- Latency with
@profileto benchmark endpoints and render histograms right inside the TUI. - Multi-step workflows let you compose several named requests into one workflow (
@workflow+@step), override per-step variables, and review aggregated results in History.
Linux / macOS:
curl -fsSL https://raw.githubusercontent.com/unkn0wn-root/resterm/main/install.sh | bashor with wget:
wget -qO- https://raw.githubusercontent.com/unkn0wn-root/resterm/main/install.sh | bashWindows (PowerShell):
iwr -useb https://raw.githubusercontent.com/unkn0wn-root/resterm/main/install.ps1 | iexThese scripts will automatically detect your architecture, download the latest release, and install the binary.
Note
The manual install helper uses curl and jq. Install jq with your package manager (brew install jq, sudo apt install jq, etc.).
# Detect latest tag
LATEST_TAG=$(curl -fsSL https://api.github.com/repos/unkn0wn-root/resterm/releases/latest | jq -r .tag_name)
# Download the matching binary (Darwin/Linux + amd64/arm64)
curl -fL -o resterm "https://github.com/unkn0wn-root/resterm/releases/download/${LATEST_TAG}/resterm_$(uname -s)_$(uname -m)"
# Make it executable and move it onto your PATH
chmod +x resterm
sudo install -m 0755 resterm /usr/local/bin/resterm$latest = Invoke-RestMethod https://api.github.com/repos/unkn0wn-root/resterm/releases/latest
$asset = $latest.assets | Where-Object { $_.name -like 'resterm_Windows_*' } | Select-Object -First 1
Invoke-WebRequest -Uri $asset.browser_download_url -OutFile resterm.exe
# Optionally relocate to a directory on PATH, e.g.:
Move-Item resterm.exe "$env:USERPROFILE\bin\resterm.exe"go install github.com/unkn0wn-root/resterm/cmd/resterm@latest- Create or open a directory that contains
.http/.restfiles (see_examples/for samples). If you want to start right away without any .http - just open resterm... - ... or launch Resterm:
resterm --workspace path/to/project(or if your .http/.rest file is in the same dir. - just typerestermand it will be autodiscovered). - Pick a request from the sidebar and press
Ctrl+Enterto send it. Responses appear in the right pane. If you don't have any .http file, just switch to the editor (Tab) and typehttps://<some_url_dot_something>and pressCtrl+Enter. - Move between panes with
Tab/Shift+Tab, jump directly withg+r(requests),g+i(editor),g+p(response), and adjust the focused pane layout withg+h/g+l(sidebar width when the left pane is focused, editor/response split otherwise). - Use
Ctrl+Eto switch environments,Ctrl+Gto inspect captured globals, andCtrl+V/Ctrl+Uto split the response pane when comparing calls.
A minimal request file:
### 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/jsonDrop 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.
sudo 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 [email protected] \
--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.
- Combine existing requests with
@workflow+@stepblocks to build repeatable scenarios that run inside the TUI. - Set per-step assertions (
expect.status,expect.statuscode) and pass data between steps viavars.request.*andvars.workflow.*namespaces. - View progress in the sidebar, and inspect the aggregated summary in History after the run.
- See
docs/resterm.mdfor the full reference and_examples/workflows.httpfor a runnable sample workflow.
- Environment files:
resterm.env.json(or legacyrest-client.env.json) discovered in the file directory, workspace root, or current working directory. - CLI flags:
--workspace,--file,--env,--env-file,--timeout,--insecure,--follow,--proxy,--recursive. - Config directory:
$HOME/Library/Application Support/resterm,%APPDATA%\resterm, or$HOME/.config/resterm(override withRESTERM_CONFIG_DIR).
The full reference, including request syntax, metadata, directive tables, scripting APIs, transport settings and advanced workflows, lives in docs/resterm.md.