Open-source project
Huachao/vscode-restclient avatar
Huachao/vscode-restclient

REST Client for VS Code: HTTP Requests Without Leaving the Editor

REST Client Extension for Visual Studio Code

6,053 stars540 forksTypeScriptMIT

At a glance

What is it?
Huachao Mao's REST Client extension turns .http and .rest files into executable requests, with environments, variables and auth built in. It suits teams that want API calls versioned next to their code, and it is the wrong tool when you need a GUI collection runner.
Who is it for?
Adopt REST Client if your API calls belong in the repository next to the code that consumes them, and if plain text diffs are how your team reviews changes. Skip it if you need a graphical collection runner with shared team workspaces and scheduled runs; nothing in the README describes those.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 164 days ago.
What is it written in?
Mainly TypeScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 2, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The problem REST Client solves for API work inside VS Code

Most HTTP testing happens in a separate application. You copy a URL out of your editor, paste it into that application, adjust headers, send, then copy the response back. The request definition lives in that other tool's storage format, which means it does not travel with the repository and does not appear in a pull request.

REST Client takes the opposite position. A request is a text file with a .http or .rest extension, or a fenced code block in Markdown tagged http or rest. The README describes the extension as eliminating "the need for a separate tool to test REST APIs." That is the whole design premise: the request is source code, so it can be reviewed, diffed and committed alongside the service it calls.

The audience is narrow and specific. Backend engineers who already live in VS Code, teams that want request definitions in version control, and anyone who prefers typing a request to clicking through a form. It is less appealing if your workflow depends on a shared cloud workspace where non-engineers build and run requests.

How the extension executes a request

The extension contributes a language with the id http, aliased as HTTP, Http and http, mapped to the .http and .rest file extensions. A TextMate grammar at ./syntaxes/http.tmLanguage.json handles highlighting, and snippets come from ./snippets/http.json. The activation event listed in package.json is onLanguage:markdown, and the extension entry point is ./dist/extension, so the bundle is built by webpack from the TypeScript in src/.

When you trigger a send, the extension parses the request block under your cursor. Multiple requests in one file are separated by three or more consecutive # characters, which the README calls the delimiter. Variables are resolved before the request leaves the editor: environment, file, request and prompt variables, plus system dynamic variables such as {{$guid}}, {{$randomInt min max}}, {{$timestamp}} and {{$processEnv [%]envVarName}}. Resolution happens across the URL, headers and body, not just one of them.

The response arrives in a separate webview panel with syntax highlighting. The status bar shows a spinner while the request is in flight, and clicking that spinner cancels it. After the response lands, the status bar shows total duration and response size; hovering over the duration breaks it down into Socket, DNS, TCP, First Byte and Download, and hovering over the size splits headers from body. That timing breakdown is a debugging feature, not a benchmark, and it is the kind of detail that is easy to miss because it lives in a tooltip.

Authentication is handled by the extension rather than by you pasting tokens. The README lists Basic Auth, Digest Auth, SSL Client Certificates, Azure Active Directory, Microsoft Identity Platform, AWS Signature v4 and AWS Cognito. Cookies are remembered for subsequent requests.

Installing REST Client and sending a first request

The extension is published on the Visual Studio Code Marketplace under the identifier humao.rest-client, which is also the homepage link in the repository. The package.json declares "engines": { "vscode": "^1.81.0" }, so a VS Code older than 1.81.0 will not accept this version. The current package version is 0.26.0.

Install it from the Extensions view in VS Code by searching the Marketplace for humao.rest-client, which is the identifier shown on the extension's Marketplace page.

After installation, create a file ending in .http. The README's simplest example is a bare URL, which the extension treats as a GET:

http
https://example.com/comments/1

With the file's language mode set to HTTP, a Send Request link appears above the request. The README also lists Ctrl+Alt+R (Cmd+Alt+R on macOS), the editor context menu, and the command palette entry Rest Client: Send Request. The response opens in a webview panel.

For anything beyond a GET, write the request in RFC 2616 form with a method line, headers and a body. The README gives this shape:

http
POST https://example.com/comments HTTP/1.1
content-type: application/json

{
    "name": "sample",
    "time": "Wed, 21 Oct 2015 18:27:50 GMT"
}

The blank line between headers and body matters; it is what separates the two. If you would rather read the response in a normal editor tab where search and selection work, set rest-client.previewResponseInUntitledDocument to true. The README notes that the keyboard shortcuts only fire in the http and plaintext language modes, so a .txt file with an HTTP-looking first line will not respond to Ctrl+Alt+R.

Where the file-based model breaks down

The limitations follow from the design. A .http file is text, so it has no concept of a saved response history you can browse as a tree, no graphical assertion builder, and no scheduled run. The README mentions auto save and view/clear request history, but that is a record of what you sent, not a test harness.

Response chaining is the sharper edge. The related searches around setting a variable from a response point at a real gap: the README's variable list covers environment, file, request and prompt variables plus the system dynamic variables, and none of them is described as capturing a value out of a previous response. If your workflow depends on logging in, extracting a token from the JSON body, and feeding it into the next call, the documented variable system does not cover that, and you would be scripting around the extension rather than using it.

There is also a maintenance signal worth weighing. The last push to the repository was on 2026-04-23, so the codebase is not dormant, but the most recent tagged release listed is v0.25.0 from 2022-06-21, while package.json already reads 0.26.0. That gap between the release tags and the working version is a real thing to check before you assume a fix you are waiting for has shipped to the Marketplace.

Finally, the shortcuts are scoped to the http and plaintext language modes. That is a deliberate choice and it prevents accidental sends, but it also means a request pasted into a .md file only works through the fenced code block path, and one pasted into a .js file does not work at all.

REST Client compared with a standalone HTTP client like Postman

The honest comparison is between a text file and an application. Postman stores requests in collections inside its own workspace, gives you a GUI for building them, and supports team sharing and automated runs as first-class features. REST Client stores requests in your repository as .http files and gives you a VS Code editor with syntax highlighting, snippets and a send link.

The practical difference shows up in review. A change to a request in REST Client appears as a diff in a pull request, which means a reviewer can see that someone added a header or changed a body. In a collection-based tool the same change lives outside the code review unless the team exports the collection into the repository, at which point you are maintaining two representations.

The difference also shows up in onboarding. A new engineer clones the repository, opens a .http file, and can send the request if the environment variables are configured. There is no separate application to install and no collection to import. That is the trade REST Client makes: less tooling, more dependence on the repository being set up correctly.

Choose Postman or a similar standalone client when the people writing requests are not the people writing code, when you need a shared workspace with role-based access, or when you need scheduled collection runs. Choose REST Client when the requests are part of the codebase and the people running them already have VS Code open.

Licence, upgrade cost and what the repository tells you

The project is MIT licensed, stated in both package.json and the LICENSE file at the repository root. MIT is permissive: it allows use, modification and redistribution with the licence text preserved, and it includes no warranty. That last part is the practical consequence for a team, since you are relying on the extension's behaviour as documented rather than on any contractual support. This is a description of the licence text, not legal advice; if your organisation has rules about third-party dependencies, route it through whoever handles that.

Upgrade cost is low in the normal case. The extension is installed from the Marketplace and updates like any other VS Code extension. The constraint to watch is the engine requirement: package.json pins "vscode": "^1.81.0", so an older editor blocks the install rather than failing at runtime. If your organisation pins VS Code versions, that number is the one to check.

The repository layout is conventional for a VS Code extension: src/ for TypeScript, syntaxes/ for the grammar, snippets/ for the snippet definitions, scripts/ and webpack.config.js for the build, and a CHANGELOG.md at the root. The CHANGELOG is where you would look for behaviour changes between versions, since the README describes current behaviour rather than what changed. The release cadence visible in the tagged releases (v0.25.0 in 2022, v0.24.6 in 2021, v0.24.5 in 2021) suggests you should not expect frequent version bumps, even though commits continue.

Editorial conclusion

Adopt REST Client if your API calls belong in the repository next to the code that consumes them, and if plain text diffs are how your team reviews changes. Skip it if you need a graphical collection runner with shared team workspaces and scheduled runs; nothing in the README describes those. Before committing to it, install version 0.26.0, confirm your VS Code is at least 1.81.0, and check that rest-client.previewResponseInUntitledDocument gives you the response view you actually want.

Frequently asked questions

How do I use REST Client in VS Code?

Install the humao.rest-client extension, create a file with a .http or .rest extension, and type a request. A bare URL like https://example.com/comments/1 is treated as a GET, and you send it by clicking the Send Request link above the request or pressing Ctrl+Alt+R (Cmd+Alt+R on macOS). The response opens in a separate webview panel.

What is REST Client used for?

It sends HTTP requests and displays the response inside Visual Studio Code, so you do not need a separate tool to test REST APIs. It also sends GraphQL queries, accepts cURL commands, and supports multiple requests per file separated by ###.

What is the difference between an HTTP client and REST Client?

In this extension the two overlap: REST Client contributes an HTTP language mode for .http and .rest files and sends the requests written in them. The distinction in the README is between REST Client and a standalone API testing tool, not between two features of the extension itself.

How does REST Client compare with Postman?

REST Client keeps requests as .http text files inside your repository, so they appear in code review, while Postman stores them as collections in its own workspace. REST Client has no documented collection runner or scheduled runs, so it is not a replacement for those parts of Postman.

Official sources

  1. Huachao/vscode-restclient on GitHub
  2. License: MIT
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/huachao-vscode-restclient.svg)](https://hysenlabs.com/projects/huachao-vscode-restclient)