Skip to content

Repository files navigation

restless

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.

CI Go Report Card License: MIT Latest Release

Browsing a collection, sending a request, and folding the JSON response in restless

Install

# Homebrew
brew tap shahadulhaider/tap && brew install restless

# Go
go install github.com/shahadulhaider/restless/cmd/restless@latest

# Binary — download from Releases

Quick Start

# 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

Features

  • 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
  • .http files — plain text, Git-friendly, JetBrains-compatible
  • Request/Response toggler/s to switch views, both with syntax highlighting, fold/scroll/search/yank
  • JSON folding — collapse/expand individual objects and arrays with za
  • Environmentsrestless.env.json with $shared + per-env variables, switch with Ctrl+E
  • Inline variables@baseUrl = http://localhost:8000 right in your .http file
  • Dynamic variables{{$uuid}}, {{$timestamp}}, {{$randomInt}}, {{$date}}, and more
  • Request chaining{{login.response.body.token}} passes data between requests
  • Response assertions# @assert status == 200 for CI/CD testing
  • Collection runner--data users.csv to run requests with parameterized data from CSV/JSON
  • Code generationyg + 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 e to edit in nvim/vim/code
  • Vim-style commandsza/zR/zM JSON folds, v/V visual selection, yb/yh/ya/yc/yf yank
  • 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, --proxy flags
  • Readline/emacs editingCtrl+A/E/W/U/K, arrow keys, word navigation, and paste (Ctrl/Cmd+V) in editor, search, and prompts

Demo

JSON folding and tabs — collapse nodes with za, jump tabs with 14 Folding JSON nodes and switching between the Body, Headers and Timing tabs
Visual selection and yankv/V to select, yb/yc to copy Selecting response lines in visual mode and copying the body and a curl command
Code generationyg then a language key The yg which-key popup listing languages, then generating JavaScript
Environment switchingCtrl+E to swap variables Switching environments and re-sending a request with the new variables resolved

Recorded with VHS. The tapes and demo collection live in docs/demo/ — run vhs docs/demo/hero.tape to regenerate.

Keyboard Shortcuts

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

Full keybinding reference →

CLI

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

Documentation

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

Contributing

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 ./...

License

MIT — Shahadul Haider

About

A terminal-native HTTP client with TUI. Uses .http files — the same format as JetBrains and VS Code REST Client. Import from Postman, Insomnia, Bruno, curl, OpenAPI. Response assertions for CI/CD. Code generation in 8 languages.

Topics

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages