>_ RESTERM
v1.17.2
GET200

An API-as-code workbench for the terminal.

Resterm is an open source API client that keeps requests in plain .http files next to your code. Use the keyboard-driven TUI, or run the same files in CI with resterm run.

brew install resterm
Quick start ▸Read the docs

HTTPGraphQLgRPCWebSocketSSEmacOS, Linux, WindowsApache-2.0

Take the tour

Click the screen and press the keys shown under it, or use the buttons.

Tour

Requests and their mocks live in one .http file.

Requests are plain text

Requests, mocks, workflows, environments: almost everything in Resterm is a file in your repo. Use your usual editor, or Resterm's terminal UI if you want autocomplete. Changes show up in git diff just like any other code. Below, requests.http holds both the requests and their mocks, so no real backend is needed.

requests.http
### Mock: say hello
# @mock method=POST path=/hello
# @match json={"kind":"greeting"}
HTTP/1.1 200 OK
Content-Type: application/json

{"message":"hello from the mock","name":{{json.body.name}}}

### Mock: create a member
# @mock method=POST path=/users
# @match headers={"Authorization":{"prefix":"Bearer "}}
# @match json={"role":"member"}
HTTP/1.1 201 Created
Content-Type: application/json

{"id":{{json.body.id}},"name":{{json.body.name}}}

### Say hello
# @name Hello
# @assert response.statusCode == 200
# @assert response.json("name") == "Resterm"
POST {{base.url}}/hello
Content-Type: application/json

{"kind":"greeting","name":"Resterm"}

### Create users from a list of names
# @name CreateUsers
# @for-each ["ada","linus","grace"] as name
# @auth bearer {{auth.token}}
# @assert response.statusCode == 201
# @assert response.json("name") == name
POST {{base.url}}/users
Content-Type: application/json

{"id":"user-{{= name }}","name":"{{= name }}","role":"member"}
Terminal
$ resterm mock requests.http &
Mock server listening on http://127.0.0.1:8080 (2 routes, 2 scenarios)
$ resterm run --env dev --all requests.http
Running 2 target(s) from requests.http with env dev
PASS POST Hello [200 OK in 12.5625ms]
  Source Target: {{base.url}}/hello
  Effective Target: http://127.0.0.1:8080/hello
PASS FOR-EACH POST CreateUsers [3 passed, 0 failed, 0 skipped in 2.807625ms]
  1. PASS POST CreateUsers (1/3) [201 Created in 958.5µs]
  2. PASS POST CreateUsers (2/3) [201 Created in 789.708µs]
  3. PASS POST CreateUsers (3/3) [201 Created in 928.375µs]
Summary: total=2 passed=2 failed=0 skipped=0

What it does

Pick a feature to see how it looks in a request file.

Files
request-files.http
# Requests are plain text in .http or .rest files.
# The # @ lines on top name the request, capture the token and check the status.

### Log in
# @name login
# @capture file auth.token {{response.json.token}}
# @assert response.statusCode == 200
POST {{base.url}}/login
Content-Type: application/json

{"user": "ada", "password": "{{password}}"}
request-files docs

Install

A single binary for macOS, Linux and Windows.

Install
brew install resterm

macOS and Linux

Release binaries for macOS, Linux and Windows are on the releases page. Installed without Homebrew? resterm --update updates in place.

Quick start
$ mkdir my-api && cd my-api$ resterm init$ resterm

resterm init writes a small project with local mocks. Press g Shift+M to start the mock server, then Ctrl+Enter to send the request under the cursor.

Response
Status
200 OK
Telemetry
none
Account
none
License
Apache-2.0

Free and open source. Your requests stay plain text in your repo.

Search

↑↓ moveEnter openEsc close

Help

These keys work like the ones in the TUI.

/
Search the docs (also Ctrl K)
j k
Scroll down and up
g g G
Jump to the top or the bottom
[ ]
Previous and next docs page
g d
Docs index
g h
Home page
t
Switch between dark and light
?
Show this help
Esc
Close a dialog