resterm

module
v0.8.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 27, 2025 License: Apache-2.0

README

Resterm

a terminal-based REST/GraphQL/gRPC/WebSocket/SSE client.

Screenshot of resterm TUI base

Trace and Timeline

Screenshot of resterm with timeline

Workflow and WebSocket

Screenshot of resterm TUI with WebSocket and Workflow

Compare mode

Screenshot of resterm in zoomed mode

Profiler

Screenshot of resterm profiler

Resterm is a terminal client for working with HTTP, GraphQL, gRPC, WebSocket and SSE. No cloud sync, no signups, no heavy desktop app. If you live on the keyboard - this is your home.

TL;DR why resterm:

  • Resterm is keyboard first.
  • Works offline so everything lives in plain files - no accounts or cloud.
  • Built-in SSH tunnels for HTTP/gRPC/WebSocket/SSE with keep-alives and retries.
  • Fast iteration loop with explorer + history + diff/compare + captures/workflows.
  • Debuggable - timeline tracing, profiler, streaming transcripts and inline scripts/tests.

Index

Up & Running


Feature snapshots

Features

  • Workspace navigator that filters .http / .rest files, supports recursion and keeps request lists in sync as you edit.
  • Editor with inline syntax highlighting, search (Ctrl+F), clipboard motions, and inline metadata completions (type @ for contextual hints).
  • Variable scopes with @global (environment-wide), @var file (document), @var request (per-call), plus compile-time constants (@const), 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).
  • WebSockets and SSE with scripted @ws steps, automatic transcripts and an interactive console for ad-hoc frames.
  • OpenAPI importer converts OpenAPI specs into Resterm-ready .http collections from the CLI.
  • Inline requests and curl import for one-off calls (Ctrl+Enter on a URL or curl block).
  • Pretty/Raw/Header/Diff/History/Stream views with optional split panes, pinned comparisons, and live event playback.
  • Built-in OAuth 2.0 client plus support for basic, bearer, API key, and custom header auth.
  • Latency with @profile to benchmark endpoints and render histograms right inside the TUI.
  • Tracing and Timeline with @trace to enable request tracing.
  • Multi-step workflows compose several named requests (@workflow + @step) with per-step overrides and expectations.
  • Multi-environment compare via @compare directives or the global --compare flag.
  • SSH tunnels route HTTP/gRPC/WebSocket/SSE traffic through bastions with host key verification, keep-alives, retries, and persistent tunnels.
  • Custom theming & bindings if you want to make a resterm more alligned with your taste.

Installation

Quick Install

Linux / macOS:

[!IMPORTANT] Pre-built Linux binaries depend on glibc 2.32 or newer. If you run an older distro, build from source on a machine with a newer glibc toolchain or upgrade glibc before using the release archives.

curl -fsSL https://raw.githubusercontent.com/unkn0wn-root/resterm/main/install.sh | bash

or with wget:

wget -qO- https://raw.githubusercontent.com/unkn0wn-root/resterm/main/install.sh | bash

Windows (PowerShell):

iwr -useb https://raw.githubusercontent.com/unkn0wn-root/resterm/main/install.ps1 | iex

These scripts will automatically detect your architecture, download the latest release, and install the binary.

Manual Installation

[!NOTE] The manual install helper uses curl and jq. Install jq with your package manager (brew install jq, sudo apt install jq, etc.).

Linux / macOS
# 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
Windows (PowerShell)
$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"
From source
go install github.com/unkn0wn-root/resterm/cmd/resterm@latest

Update

resterm --check-update
resterm --update

The first command reports whether a newer release is available; the second downloads and installs it (Windows users receive a staged binary to swap on restart).

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
    
  2. Type a minimal request

    • Focus the editor pane (use Tab if needed).

    • Press i or a and type a simple request, for example:

      GET https://httpbin.org/status/204
      
  3. Send it

    • Press Ctrl+Enter to send the request.
    • The response appears in the response pane on the right.
  4. Move around

    • Tab / Shift+Tab - cycle focus between sidebar, editor, and response.
    • g+p - jump directly to the response pane.
    • g+i - jump back to the editor.

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

    • Create or open a directory that contains .http / .rest files (see _examples/ in this repo for samples).

    • Run:

      resterm
      # or
      resterm --workspace path/to/project
      
  2. Pick and send a request

    • Use the sidebar to select a request from your .http / .rest files.
    • Press Ctrl+Enter to send it.
    • The response shows up in the right pane.
  3. 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:

  • Pane focus & layout

    • Tab / Shift+Tab - move focus between sidebar, editor, and response.
    • g+r - jump to Requests (sidebar).
    • g+i - jump to Editor.
    • g+p - jump to Response.
    • g+h / g+l - adjust layout:
      • When the left pane (sidebar) is focused: change sidebar width.
      • Otherwise: change editor/response split.
    • g+v / g+s - toggle response pane between inline and stacked layout.
    • g+1, g+2, g+3 + minimize/restore sidebar, editor, response.
    • g+z / g+Z - zoom the focused pane / clear zoom.
  • Environments & globals

    • Ctrl+E - switch environments.
    • Ctrl+G - inspect captured globals.
  • Working with responses

    • Ctrl+V / Ctrl+U - split the response pane for side-by-side comparison.
    • When response pane is focused:
      • Ctrl+Shift+C or g y - copy the entire Pretty/Raw/Headers tab to the clipboard (no mouse selection needed).

[!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

  • Environments: JSON files (resterm.env.json) are auto-discovered in the request directory, workspace root, or CWD. Dotenv files (.env, .env.*) are opt-in via --env-file and are single-workspace; prefer JSON when you need multiple environments in one file.
  • Flags you probebly reach for most: --workspace, --file, --env, --env-file, --timeout, --insecure, --follow, --proxy, --recursive, --from-openapi, --http-out (see docs for the full list).
  • Config storage: $HOME/Library/Application Support/resterm, %APPDATA%\resterm, or $HOME/.config/resterm (override with RESTERM_CONFIG_DIR). Themes and keybindings live under this directory when you customize them.

Feature snapshots

Documentation

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

Directories

Path Synopsis
cmd
resterm command
internal
ssh
ui
ui/textarea
Package textarea provides a heavily changed multi-line text input component for Bubble Tea applications.
Package textarea provides a heavily changed multi-line text input component for Bubble Tea applications.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL