RestRoom
A lightweight, local-only API client that lives inside VS Code — the most-used parts of Postman, with no account, no sign-in, and no cloud sync. Everything is stored on your machine using VS Code's own storage.
Features
- Send requests — GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS
- Params — query params two-way synced with the URL bar
- Headers — enable/disable individual headers
- Body — None, JSON (with a "Format JSON" beautifier), Text, HTML, XML, x-www-form-urlencoded, and multipart Form Data (text fields)
- Auth — No Auth, Basic Auth, Bearer Token (adds the
Authorization header for you)
- Response viewer — status, time, size, Pretty/Raw JSON with syntax highlighting, and response headers
- Collections — save requests into named collections, rename/duplicate/delete
- Environments — named variable sets plus a always-on Globals environment; use
{{variableName}} anywhere in the URL, params, headers, body, or auth fields
- History — every send is recorded; reopen, delete, or save any past request into a collection
- Copy as cURL
- Import & Export — Postman Collection v2.1 compatible, so files move freely between this extension and real Postman
- Ctrl/Cmd+Enter to send while the request tab is focused
No telemetry, no external servers, no login screen — requests go straight from your machine to the API you're calling.
Running it
This extension has no build step (plain JS), so you can run it straight from source:
- Open this folder in VS Code.
- Press F5 (or Run → Start Debugging). This launches an Extension Development Host window with the extension active.
- Click the plug/arrow icon in the Activity Bar to open the REST Client sidebar (Collections, Environments, History).
- Click New Request to open a request tab, enter a URL, and hit Send.
Packaging a .vsix you can install permanently (no marketplace needed)
npm install -g @vscode/vsce
cd rest-client-lite # this folder
vsce package
That produces a .vsix file. Install it via the Extensions view → ··· menu → Install from VSIX…, or:
code --install-extension rest-client-lite-0.1.0.vsix
This is enough to use the extension yourself or share the file with a few people — no account of any kind required.
Publishing it publicly
To make it installable by anyone from inside VS Code's Extensions view, it needs to go to a public registry. There are two, and you can do either or both — publishing doesn't require the extension's users to sign in to anything, only you as the publisher need an account.
Before publishing, edit three placeholders:
publisher in package.json (see step 2 below for how this is chosen)
repository.url and bugs.url in package.json (point at your own GitHub repo, or delete these two fields if you don't have one)
- the copyright name in
LICENSE
Option A — the official VS Code Marketplace
Install the CLI: npm install -g @vscode/vsce
Create a publisher: go to the Marketplace publisher management page, sign in with a Microsoft account, and create a publisher (you choose an ID — this is what goes in package.json's publisher field).
Get a Personal Access Token: in Azure DevOps, open your account → Personal Access Tokens → New Token. Set Organization to All accessible organizations and scope to Marketplace → Manage.
Log in and publish:
vsce login <your-publisher-id>
# paste the PAT when prompted
vsce publish
It's usually live within a few minutes at marketplace.visualstudio.com/items?itemName=<publisher>.rest-client-lite.
To ship an update later: bump the version and run vsce publish patch (or minor/major).
Heads-up: Microsoft is retiring the "All accessible organizations" (global) PAT type on December 1, 2026. If you're publishing after that date and a PAT no longer works, use Microsoft Entra ID–based auth instead — see Publishing Extensions for the current method.
Option B — Open VSX Registry (used by VSCodium, Cursor, Windsurf, Gitpod, and others)
No Microsoft account needed — sign in with GitHub instead.
npm install -g ovsx
npx ovsx create-namespace rest-client-lite # or your own namespace name, enter your token when prompted
vsce package # if you haven't already
ovsx publish rest-client-lite-0.1.0.vsix -p <your-open-vsx-token>
Get the token from your profile on open-vsx.org (Settings → Access Tokens) after signing in with GitHub.
Which one should I use?
- If your users are on plain VS Code → the official Marketplace (Option A).
- If some are on VS Code forks (VSCodium, Cursor, Windsurf, etc.) → Open VSX (Option B); those editors can't see the official Marketplace at all.
- Most public extensions do both — the steps don't conflict with each other.
Using variables
- Open the Environments view, click + to create one (e.g. "Staging"), and add variables like
baseUrl = https://staging.api.example.com.
- Click the environment in the sidebar (or pick it from the dropdown in a request tab) to make it active.
- Use
{{baseUrl}} in any URL, header, param, or body field.
- The Globals environment (top of the Environments list) is always applied, regardless of which environment is active — handy for things like a shared API key.
Import & Export
Files are written in the standard Postman Collection v2.1 format (*.postman_collection.json), so they open in real Postman too, and Postman exports can be imported here.
Export:
- Collection → hover it in the sidebar → the ↑ icon
- A single saved request → hover it → the ↑ icon
- An open (even unsaved) request tab → Export button next to Copy cURL
Import:
- Collections view title bar → the ↓ icon → pick a
.json file
- A whole Postman collection imports as a new collection here (nested folders are flattened into the request name, e.g. "Users / Get User")
- A single exported Postman request imports into a collection you pick (or a new one)
- Basic and Bearer auth carry over; other auth types (OAuth2, API Key, etc.) import as No Auth, with a warning telling you how many requests were affected
Project layout
package.json Extension manifest (commands, views, menus)
src/extension.js Activation: wires up tree views + commands
src/storage.js All persistence (globalState) — collections, environments, history
src/httpClient.js Performs the actual HTTP request (runs in the extension host, so no CORS issues)
src/utils.js Variable substitution, URL/params sync, cURL export, formatting
src/postmanFormat.js Converts between our request/collection model and Postman Collection v2.1
src/exportImport.js File-dialog side of import/export (save/open dialogs, read/write JSON)
src/panels/requestPanel.js Webview panel controller (one per open request tab)
src/providers/*.js TreeDataProviders for the three sidebar views
media/main.js Webview UI (vanilla JS, no framework/build step)
media/style.css Styling, built from VS Code's own theme variables
Known limitations (v1)
- Form Data supports text fields only — no file picker yet.
- Import brings in requests, headers, params, body, and Basic/Bearer auth; other auth types (OAuth2, API Key, AWS Sig v4, etc.) import as No Auth since they're not supported yet — you'll get a warning listing how many requests were affected.
- Nested Postman folders are flattened on import (a request under folder "Users" becomes "Users / Get User"), since collections here are a single flat list.
- No pre-request/test scripts.
- No GraphQL/WebSocket/gRPC support — REST only.
These were left out to keep the initial version focused on the features people reach for most often. The code is structured (see storage.js / httpClient.js) to make adding them later straightforward.
| |