Interactive HTTP shell for API workflows. Send HTTP requests, manage headers and base URLs, and rerun past commands from a terminal REPL.
- Interactive REPL with tab completion
- Send GET, POST, PUT, PATCH, DELETE requests (case-insensitive)
- Multi-line request input for custom headers and body
- Persistent session state (base URL, global headers, variables)
- Variable interpolation with
{{name}}syntax in paths, headers, and body - Query parameter support with
param: key=valuelines - Save and run requests in-session
- Response time displayed per request
- Full absolute URL support (base URL not required)
- JSON response pretty-printing
- Command history and rerun by index
- Colored terminal output
curl -fsSL https://raw.githubusercontent.com/hars-21/reqsh/main/install.sh | shDownload the latest binary for your platform from the releases page. macOS (Intel & Silicon), Linux (x86_64), and Windows (x86_64) are available.
git clone https://github.com/hars-21/reqsh.git
cd reqsh
cargo build --releaseThe binary will be at target/release/reqsh.
CLI Options:
reqsh --help
reqsh --versionStart the REPL:
reqshSet a base URL (optional — you can use absolute URLs directly):
reqsh> base https://api.example.comSend a GET request (relative path requires a base URL):
reqsh> GET /usersOr use an absolute URL directly:
reqsh> GET https://jsonplaceholder.typicode.com/postsSend a POST request with headers and body:
reqsh> POST /users
.....> Content-Type: application/json
.....> Authorization: Bearer token123
.....>
.....> {"name": "john"}
.....> ::send| Command | Description |
|---|---|
GET <url> |
Send GET request |
POST <url> |
Send POST request |
PUT <url> |
Send PUT request |
PATCH <url> |
Send PATCH request |
DELETE <url> |
Send DELETE request |
base <url> |
Set base URL for all requests |
header <key> <value> |
Set a global header for all requests |
set <name> <value> |
Set a session variable |
unset <name> |
Remove a session variable |
unset header <key> |
Remove a global header |
save <name> |
Save the last request to memory |
run <name> |
Execute a saved request |
requests |
List saved requests |
vars |
List session variables |
headers |
List global headers |
history |
Show command history |
rerun <index> |
Re-run a command from history |
help |
Show built-in help |
exit |
Exit the REPL |
When you type a method and path, the REPL enters multi-line mode (.....>). You can add headers as key: value pairs, followed by a blank line and the request body. End with ::send on its own line.
Query parameters can be added with param: lines:
reqsh> GET /users
.....> param: page=1
.....> param: limit=20
.....> ::sendVariables set with set are interpolated at request time using {{name}}:
reqsh> set token eyJhbGciOiJIUzI1NiJ9
reqsh> GET /users/{{token}}
.....> Authorization: Bearer {{token}}
.....> ::sendContributions are welcome. Please read CONTRIBUTING.md for guidelines on how to set up the project, run tests, and submit changes.
MIT. See LICENSE for details.