A simple and intuitive REST client VS Code extension for people who hate SaaS-ification of dev tools.
No login. No cloud. No telemetry.
Just send HTTP requests and save them as plain JSON files inside your workspace.
⚠️ Early Stage Project
rAPI is still in active development. Some features are incomplete and others are planned but not yet implemented. I work on this alongside academics and life, so progress may be slow — but contributions, suggestions, and pull requests are always welcome! 😀
There are already many excellent API tools out there. rAPI exists because I wanted something that better fit my personal workflow:
- I wanted to test APIs directly inside VS Code without switching to another app
- Some tools require login or cloud sync, which I prefer to avoid
- Some UI-heavy tools felt cluttered for quick testing
- Text-based solutions using .http files are powerful, but I wanted a more visual and interactive interface
So I decided to build a tool to fill in the gap for my personal pain points, something that is:
✅ Local-first
✅ Minimal and distraction-free
✅ Simple to use
✅ Free and open
No accounts. No platforms. Just requests and responses.
- Send HTTP requests — GET, POST, PUT, PATCH, DELETE, OPTIONS
- Request editor — method selector with color-coded verbs, URL, key-value headers table, raw JSON body
- Response viewer — status, timing, collapsible headers, syntax-highlighted JSON & HTML, raw view
- Theme-aware syntax highlighting — response body colors match your active VS Code theme, updates instantly on theme change
- Resizable split pane — drag the divider between request editor and response viewer
- Collections — save/load requests as
.rapi/collections/*.jsonin your workspace - Environments — define variables in
.rapi/environments/*.json, use{{var}}placeholders - Sidebar tree view — browse collections and click to open requests
- Keyboard shortcut —
Ctrl/Cmd+Enterto send - Local-first — everything stored as plain JSON files, version-control friendly
# Clone and open in VS Code
cd rapi-extension
npm install
npm run build # or: npm run watch
# Press F5 in VS Code → "Run Extension"
# This opens a new Extension Development Host window- Open the command palette (
Ctrl/Cmd+Shift+P) and runrAPI: Open rAPI - The rAPI panel opens with a request editor (left) and response viewer (right)
- Enter a URL (e.g.
https://httpbin.org/get) and click Send - Save requests to collections using the Save button
- Browse saved requests in the rAPI sidebar
- Command palette →
rAPI: Create Collection - Or save a request from the editor — choose a collection name from the dropdown
Create a JSON file in .rapi/environments/, e.g. .rapi/environments/dev.json:
{
"name": "dev",
"values": {
"baseUrl": "https://httpbin.org",
"token": "my-secret-token"
}
}Then in your requests, use {{baseUrl}} or {{token}} — they'll be replaced before sending.
Select the active environment from the dropdown in the request editor.
.rapi/
├── collections/
│ └── example.json # saved request collections
└── environments/
└── dev.json # environment variable sets
{
"name": "example",
"requests": [
{
"id": "unique-id",
"name": "Get httpbin",
"method": "GET",
"url": "{{baseUrl}}/get",
"headers": { "Accept": "application/json" },
"body": null
}
]
}{
"name": "dev",
"values": {
"baseUrl": "https://httpbin.org",
"token": "REPLACE_ME"
}
}Warning: Environment files are stored as plain JSON in your workspace. Do not commit secrets (API keys, tokens) to version control. Add
.rapi/environments/to your.gitignoreif your environments contain sensitive values.
Example .gitignore entry:
# Keep collections but ignore environments with secrets
.rapi/environments/
I might implement other ways to handle this sometime in the future but for now, this is as is.
- Extension host: TypeScript, VS Code Extension API
- Webview UI: React 18
- HTTP client: Node.js built-in
http/https(runs in extension host — no CORS issues) - Bundler: esbuild
- Persistence: Plain JSON files via
vscode.workspace.fs
| Command | Description |
|---|---|
rAPI: Open rAPI |
Open the rAPI request editor panel |
rAPI: Create Collection |
Create a new empty collection file |
| Shortcut | Action |
|---|---|
Ctrl/Cmd+Enter |
Send request |
- No OAuth flows or account-based sync
- No scripting or test runner
- No GraphQL or WebSocket support
- No analytics or crash reporting
- No cloud anything
MIT
