Desktop HTTP client

Write requests. Run everywhere.

A code-first HTTP client for developers who think in text. Write .http files, run from GUI, terminal, or AI.

macOS + Windows
requests.http
# Environments
@env.dev.baseUrl = http://localhost:3000
@env.prod.baseUrl = https://api.example.com

# Globals (optional)
@contentType = application/json

### Login
@name login
@timeout 15000
POST {{baseUrl}}/auth/login
Content-Type: {{contentType}}
{
  "email": "dev@rawrequest.dev",
  "password": "{{secret:password}}"
}
> {
  assert(response.status === 200, `Expected 200, got ${response.status}`);
  setVar('token', response.json.token);
}

### Get Profile
@depends login
GET {{baseUrl}}/profile
Authorization: Bearer {{token}}
Accept: application/json

Screenshots

A quick look at the editor, load testing, and results.

RawRequest main window
Request editor with syntax highlighting, linting, and response viewer
Load test running
Live load test with real-time progress and metrics
Load test results
Detailed load test results with percentile breakdowns

Features

Practical tooling for day-to-day API work.

Code-first editor

CodeMirror 6 with syntax highlighting, folding, linting, and variable diagnostics. Write requests the way you think — in text — with viewport-optimized performance for large files.

### Login
@name login
@timeout 15000
POST {{baseUrl}}/auth/login
Content-Type: application/json
{
  "email": "dev@rawrequest.dev",
  "password": "{{secret:password}}"
}
> {
  assert(response.status === 200);
  setVar('token', response.json.token);
}

Request chaining

Chain requests with @depends and reference prior responses. Build full workflows — login, then fetch data using the returned token — all in a single file.

### Get Profile
@name getProfile
@depends login
GET {{baseUrl}}/profile
Authorization: Bearer {{response.login.token}}
Accept: application/json

Built-in load testing

Turn any request into a load test with the @load directive. Configure duration, virtual users, ramp-up, and target RPS. Watch progress live and get percentile breakdowns.

### Stress Test API
@name stressTest
POST {{baseUrl}}/api/data
Content-Type: application/json

@load
duration: 60s
users: 100
rampUp: 10s
targetRPS: 500

Secrets & Environments

Store secrets in an encrypted OS keyring vault and reference them with {{secret:key}}. Define per-environment variables with @env syntax and switch contexts with a single click.

# Environment variables
@env.dev.baseUrl = http://localhost:3000
@env.staging.baseUrl = https://staging.example.com
@env.prod.baseUrl = https://api.example.com

# Secret reference
Authorization: Bearer {{secret:apiToken}}

CLI Mode

Run named requests from your terminal with rawrequest run. JSON, body, or quiet output. Secrets resolve automatically.

MCP Server

Let AI assistants like GitHub Copilot and Claude discover and execute requests from .http files via chat.

Portable History

History and responses live beside your .http file. Predictable, reviewable, and easy to share or version control.

Pre & Post Scripts

JavaScript pre/post scripts with setVar, assert, and console.log. Automate auth flows and validate responses.

Request Navigation

Outline panel and command palette for fuzzy search. Jump to any request in large files instantly.

Workflow

Keep requests in text, keep outputs nearby, and make changes you can review.

✏️

Author .http files

Use ### separators, env placeholders, and scripts. Run any request instantly.

🔐

Wire secrets + envs

Use the vault + per-environment vars; lint catches missing placeholders before you hit send.

📋

Keep history nearby

Responses and history sit beside your file so it’s easy to inspect and share.

MCP Server

Let AI assistants discover and run your HTTP requests via chat.

RawRequest acts as an MCP server, giving AI assistants like GitHub Copilot, Claude, and others direct access to your .http files. Configure it once — it works across all your projects.

list_requests Discover all requests in a file
run_request Execute a request and get the full response
list_environments See available environments and their variables
set_variable Set variables for subsequent requests

Secrets resolve automatically from the same encrypted vault as the GUI. Tell the AI which file to use via copilot-instructions.md or in conversation.

VS Code / Copilot  —  .vscode/mcp.json
{
  "servers": {
    "rawrequest": {
      "type": "stdio",
      "command": "rawrequest",
      "args": ["mcp"]
    }
  }
}
Copilot CLI  —  ~/.copilot/mcp-config.json
{
  "mcpServers": {
    "rawrequest": {
      "command": "rawrequest",
      "args": ["mcp"]
    }
  }
}
Claude Desktop
{
  "mcpServers": {
    "rawrequest": {
      "command": "rawrequest",
      "args": ["mcp"]
    }
  }
}

Install

Grab a release, or use the macOS installer script/Homebrew.

macOS

Quick install:

curl -fsSL https://raw.githubusercontent.com/portablesheep/RawRequest/main/scripts/install.sh | bash

Or Homebrew cask:

brew tap portablesheep/rawrequest https://github.com/portablesheep/homebrew-rawrequest
brew install --cask rawrequest

Windows

Download RawRequest-*-windows-portable.zip, extract it, and run RawRequest.exe.

If SmartScreen warns you, choose “More info” → “Run anyway”.

CLI & MCP

Run requests from the terminal:

rawrequest run api.http -n login -e prod
rawrequest run api.http -n getData -o body | jq .
rawrequest list api.http

Start MCP server for AI assistants:

rawrequest mcp
rawrequest help

License

RawRequest is licensed under the PolyForm Noncommercial License 1.0.0.

Read the license

Ready to write requests?