Your API workbench lives in the terminal.
A full-featured HTTP client that runs entirely in your terminal. Uses .http files — the same plain-text format supported by JetBrains IDEs and VS Code REST Client. No Electron. No cloud sync. No account required.
# Homebrew
brew tap shahadulhaider/tap && brew install restless
# Go
go install github.com/shahadulhaider/restless/cmd/restless@latest
# Binary — download from Releases# Create a request file
cat > api.http << 'EOF'
@baseUrl = https://httpbin.org
# @name health
GET {{baseUrl}}/get
Accept: application/json
###
# @name echo
POST {{baseUrl}}/post
Content-Type: application/json
{"message": "hello from restless", "time": "{{$isoTimestamp}}"}
# @assert status == 200
# @assert body.$.json.message == "hello from restless"
EOF
# Launch the TUI
restless .
# Or run headless (CI/CD)
restless run api.http- Interactive TUI — browse collections, send requests, inspect responses in a tabbed detail pane
- Mouse support — wheel-scroll, click to select/focus, click a tab to switch, click
▾/▸to fold JSON, drag the divider to resize .httpfiles — plain text, Git-friendly, JetBrains-compatible- Request/Response toggle —
r/sto switch views, both with syntax highlighting, fold/scroll/search/yank - JSON folding — collapse/expand individual objects and arrays with
za - Environments —
restless.env.jsonwith$shared+ per-env variables, switch withCtrl+E - Inline variables —
@baseUrl = http://localhost:8000right in your.httpfile - Dynamic variables —
{{$uuid}},{{$timestamp}},{{$randomInt}},{{$date}}, and more - Request chaining —
{{login.response.body.token}}passes data between requests - Response assertions —
# @assert status == 200for CI/CD testing - Collection runner —
--data users.csvto run requests with parameterized data from CSV/JSON - Code generation —
yg+ key to copy as Python, JavaScript, Go, Java, Ruby, HTTPie, curl, PowerShell - Import from anywhere — Postman, Insomnia, Bruno, curl commands, OpenAPI/Swagger
- $EDITOR integration — press
eto edit in nvim/vim/code - Vim-style commands —
za/zR/zMJSON folds,v/Vvisual selection,yb/yh/ya/yc/yfyank - Cookie jar — cookies persist per environment automatically
- Pre-request & post-response scripting — JavaScript (ES5.1) via
# @pre-request { ... }and# @post-response { ... }with crypto builtins (hmac, sha256, base64) - Proxy & SSL —
# @insecure,# @proxy,--insecure,--proxyflags - Readline/emacs editing —
Ctrl+A/E/W/U/K, arrow keys, word navigation, and paste (Ctrl/Cmd+V) in editor, search, and prompts
Recorded with VHS. The tapes and demo collection live in
docs/demo/— runvhs docs/demo/hero.tapeto regenerate.
Press ? in the TUI for the full reference. Press F1 for context-sensitive help.
| Key | Action |
|---|---|
j/k |
Navigate |
Enter |
Send request / select |
e |
Edit in $EDITOR |
r/s |
Request / Response view |
1/2/3 |
Select tab |
4 |
Assertions tab (response, when present) |
Space |
Next tab |
za |
Fold/unfold JSON node |
v/V |
Visual selection (character / line) |
| Mouse | Scroll, click, drag to resize |
yb/yh/ya/yc |
Copy body/headers/all/curl |
yf |
Copy JSON fold block |
yg + key |
Generate code |
p |
Pretty/raw toggle |
f |
Search in body |
? |
Help |
restless [directory] # Launch TUI
restless run <file> [--env name] # Run headless (CI/CD)
restless run <file> --data data.csv # Parameterized run with data file
restless import postman <file> # Import Postman collection
restless import insomnia <file> # Import Insomnia export
restless import bruno <dir> # Import Bruno collection
restless import curl "<command>" # Import curl command
restless import openapi <spec> # Import OpenAPI/Swagger| Guide | Description |
|---|---|
| Getting Started | First collection, environments, CI/CD |
| .http File Format | Full syntax reference, variables, assertions |
| All Keybindings | Complete keyboard reference |
| Environments | Inline vars, env files, dynamic vars |
| Assertions | Response assertions for CI/CD |
| Scripting | Pre-request & post-response JavaScript |
| Collection Runner | Parameterized runs with CSV/JSON data |
| Importing Collections | Postman, Insomnia, Bruno, curl, OpenAPI |
| Code Generation | Python, JS, Go, Java, Ruby, HTTPie, curl, PowerShell |
| FAQ | Common questions and troubleshooting |
Contributions welcome. Please open an issue first for non-trivial changes.
git clone https://github.com/shahadulhaider/restless.git
cd restless
go build ./cmd/restless
go test ./...MIT — Shahadul Haider



