resterm is a free, open source api development & testing project written in Go and released under Apache-2.0. It has 1,925 GitHub stars, 54 forks and 0 open issues, and was last pushed 8 hours ago. On this registry it ranks #78 of 103 tracked projects in API Development & Testing, with 5 head-to-head comparisons available. It gained 1 stars over the last 3 tracked days.

What is resterm?

What it is

Resterm is a terminal API client for HTTP, GraphQL, and gRPC, with WebSocket and SSE support. It lives in the developer-tools and API-testing ecosystem, is written in Go, and is licensed under Apache-2.0. The project stores requests as plain-text .http and .rest files, so users can edit, send, diff, review, and version-control API work.

The concrete problem it solves is API work that is difficult to diff, review, track, and automate when it is not stored in plain-text request files. Resterm keeps request definitions, settings, assertions, workflows, captures, variables, mock scenarios, and execution output in files that can be versioned. It also provides local mock servers, OAuth flows, SSH tunnels, Kubernetes port-forwards, tracing, profiling, and a CLI runner, without accounts, cloud sync, or telemetry.

Key capabilities

  • Supports HTTP, GraphQL, gRPC, WebSocket, and SSE requests in the terminal, with plain-text .http and .rest files that can be diffed and tracked in version control.
  • Automates request files with @when, @if/@elif/@else, @for-each, @workflow, @step, @capture, @var, and @assert directives, and includes RestermScript with JavaScript hooks.
  • Provides OAuth 2.0 client credentials, password, and authorization code with PKCE, auth through existing CLIs, SSH tunnels, and Kubernetes port-forwards.
  • Runs requests from scripts and CI with resterm run, producing JSON and JUnit output, and declares mock servers next to requests with matching rules, sequences, call verification, and hot reload.
  • Provides timeline tracing, profiling, compare runs across environments, streaming transcripts, and an interactive console for WebSocket and SSE.

Who uses it and how

  • Developers use it as a local API workbench for editing, sending, and reviewing HTTP, GraphQL, gRPC, WebSocket, and SSE requests from .http or .rest files.
  • CI users run resterm run against selected requests and consume JSON or JUnit output, while teams can keep request files in version control because the format is plain text and supports directives.
  • Users test backend services with resterm mock or the TUI mock shortcut, connect private services through SSH tunnels or Kubernetes port-forwards, and authenticate with OAuth 2.0 or existing CLIs.

Getting started

The README shows installation with brew install resterm, plus scripts, Windows, and manual install paths, then resterm init to create a small local workspace and resterm to open the terminal UI. It also documents resterm run for CLI execution and resterm mock for starting the generated local mock server.

When to use it — and when not to

Use Resterm when you want API requests to live in plain-text files, run from a terminal, and execute in scripts or CI without accounts, cloud sync, or telemetry. Avoid it if you need a hosted service, a GUI-first workflow, or AI features, because the README states there is no AI integration and the provided facts do not mention Docker images, database, storage, SMTP, or paid-product replacements.

project readme (upstream, from github) — read inline


Resterm

An API-as-code workbench for the terminal.

Resterm is your API as code, stored in plain-text .http and .rest files that you can diff, review and track in version control. Edit and send requests in the terminal, or run them from scripts and CI. Request files support workflows, assertions, mock servers, tracing and profiling. No accounts, cloud sync or telemetry.

Quick links: Screenshots, Quick Start, Request files, Installation, Documentation.

Screenshot tour

See the UI in action (click to expand)

Workflows

Trace and Timeline

Profiler

Explain

RestermScript

Light Theme

OAuth browser demo (old UI design)

Why Resterm

  • HTTP, GraphQL, gRPC, WebSocket and SSE support.
  • Automation in request files: conditions (@when, @if/@elif/@else, @for-each), multi-step workflows (@workflow / @step), captures, variables and assertions (@capture, @var, @assert).
  • RestermScript, a small expression language built for Resterm, with JavaScript hooks when you want them.
  • Vim-style controls with shortcut hints, searchable offline help, Shift+k help under the cursor, / search and commands like :w, :q, :help and :docs.
  • Auth and tunneling: OAuth 2.0 (client credentials, password, authorization code with PKCE), auth through existing CLIs, SSH tunnels and Kubernetes port-forwards.
  • CLI runner: resterm run for scripted runs and CI, with JSON and JUnit output.
  • Mock servers declared next to the requests they mimic, with matching rules, sequences, call verification and hot reload.
  • Timeline tracing, profiling and compare runs across environments.
  • Streaming transcripts and an interactive console for WebSocket and SSE.
  • No AI integration, ever.

Quick Start

  1. Install Resterm (see Installation for scripts, Windows and manual installs).

    brew install resterm
    
  2. Create a workspace.

    mkdir my-api && cd my-api
    resterm init
    

    resterm init gives you a small project that works without an internet connection. The generated requests.http includes local mock scenarios and a few requests that build on each other. They cover assertions, bearer auth, JSON matching, json-rules, and @for-each.

  3. Open Resterm and send your first request.

    resterm
    

    Press Ctrl+Enter in the editor to send the highlighted request.

No files yet? Just run resterm, type a URL and press Ctrl+Enter. A pasted curl command works too.

Request files

Resterm request files use standard HTTP syntax plus # @ directives for configuration and automation:

# @setting base-url https://api.example.com/v1/

### Create users
// Send this request once for each name in the list.
# @for-each ["david", "tom"] as name
# @when env.mode == "development"
# @assert response.statusCode == 201
POST users
Content-Type: application/json

{"name":"{{= name }}"}

Settings before the first request apply to the whole file. ### separates requests, and directives can repeat, limit or validate a request. More examples: _examples/.

CLI

Use resterm run to execute .http / .rest files from scripts or CI without opening the TUI.

resterm run --request CreateUser requests.http

The generated project talks to a local mock server. Start it in another terminal first:

resterm mock requests.http

In the TUI, press g Shift+m in normal mode to start the workspace mock server. Repeat to stop it.

The CLI documentation covers selectors, output formats and more examples.

Keyboard cheat sheet

These are the default bindings. + means hold keys together (Alt+v). A space means press them in sequence (g v: press g, release it, then press v). Letters are lowercase, and Shift is written explicitly when required (g Shift+z). Symbols such as ? and : mean type that character using your keyboard layout.

In the editor, i enters insert mode and Esc returns to normal mode. If completion is open, the first Esc dismisses it. Use normal mode for g sequences, Alt+v / Alt+h, ?, Shift+k, : and pane switching. Insert mode preserves character input, including text produced with Alt, and uses Tab for completion or indentation. Ctrl+Enter still sends requests in insert mode.

  • Pane focus and layout
    • Tab / Shift+Tab: move between sidebar, editor and response.
    • g r, g i, g p: jump to requests, editor normal mode or response.
    • g h / g l: shrink or grow the sidebar when it is focused. Otherwise, move the editor/response divider left or right in the side-by-side layout.
    • g j / g k: move the editor/response divider down or up when stacked, or collapse and expand branches when the navigator is focused.
    • g v / g s: place the response beside or below the editor.
    • g 1, g 2, g 3: minimize or restore sidebar, editor or response.
    • g z: toggle zoom for the focused editor or response pane. g Shift+z: clear zoom.
  • Environments and globals
    • Ctrl+e: switch environments.
    • Ctrl+g: inspect captured globals.
  • Help and commands
    • ?: open the searchable offline help index.
    • Shift+k (editor normal mode): open help for the directive, template or keyword under the cursor.
    • :help / :man : open an embedded topic; :docs opens the version-matched full manual.
    • Ctrl+o: open the file/workspace popup. Type to filter, scroll with Up / Down, and use Tab to descend into directories.
    • :: open the command line. Use Up / Down to select suggestions, Tab to complete one, or Enter to accept and run a selection. Path arguments such as :mock start --source and :edit browse the filesystem in the same popup.
    • g e: open the current file, or the file selected in the navigator, in your external editor.
  • Requests and responses
    • Ctrl+Enter: send the active request, including from editor insert mode.
    • Alt+v / Alt+h: split responses side by side or stack them for comparison. Repeat the same shortcut to close the split.
    • Ctrl+Shift+c or g y (response focused): copy the whole Pretty, Raw or Headers tab.
    • g x: show the Explain preview for the active request without sending it.

[!TIP] If you only remember three shortcuts:

  • Ctrl+Enter sends the request
  • Tab / Shift+Tab switches panes
  • g p jumps to the response

Installation

Linux / macOS (Homebrew)

brew install resterm

[!NOTE] Homebrew installs should be updated with Homebrew (brew upgrade resterm). The built-in resterm --update command is for binaries installed from GitHub releases or install scripts.

Linux / macOS (Shell script)

[!IMPORTANT] Pre-built Linux binaries depend on glibc 2.32 or newer. On an older distro, build from source 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

The scripts detect your architecture, download the latest release and install the binary.

Manual installation

[!NOTE] The manual install helper uses `cu

readme truncated — read the full docs on github

Frequently asked questions

Is resterm free to use?

resterm is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does resterm do?

Terminal API client for HTTP, GraphQL and gRPC. Plain .http files you can diff and version, with workflows, mocks, profiling, tracing, OpenAPI import, SSH tunne

What is resterm written in?

resterm is primarily written in Go. Its source is publicly available at https://github.com/unkn0wn-root/resterm, and it has 1,925 GitHub stars.