kulala.vscode
August 18, 2026 ยท View on GitHub
kulala.vscode
A fully-featured โก๏ธ HTTP/GraphQL/gRPC/Websocket-client ๐ผ interface ๐ฅ๏ธ for (Visual Studio) Code โค๏ธ, that supports the Jetbrains .http spec (with full scripting support).
Kulala is swahili for "rest" or "relax."
Other tools ๐ง from the Kulala ๐ผ family ๐
Kulala CLI โข Kulala Formatter (and converter) โข Kulala Desktop โข Kulala for Neovim โข Kulala Core Kulala Github Action
Features
- Send request at cursor (
Ctrl+Alt+R/Cmd+Alt+R) or via CodeLens / editor title - Send all requests in the file (
Ctrl+Alt+A/Cmd+Alt+A) - Response panel with Body (read-only Monaco, language-aware), Headers, timings, tests, and script console
- OpenAPI explorer for
# @kulala-openapi-explorerblocks (foldable tree, try-it-out, load values from files, copy as HTTP) - Environments from kulala-core (
http-client.env.json, kuba, etc.) - Completion & hover via kulala-core LSP helpers
- Diagnostics in
.httpfiles - Syntax highlighting via the
kulala_httptree-sitter grammar - Copy as cURL / paste from cURL
- Inspect request (resolved request preview)
- OAuth / custom prompts via kulala-core
continueflow
Requirements
- VS Code 1.105 or newer
- Network access on first run
(downloads
kulala-corefrom GitHub releases unlesskulala.corePathis set)
Install
Marketplace
Install Kulala (mistweaverco.kulala) from the VS Code Marketplace.
From source
cd kulala.vscode
pnpm install
pnpm run build
Press F5 in VS Code to launch an Extension Development Host.
LSP (kulala-core)
Kulala for Visual Studio Code uses kulala-core for editor intelligence (not a separate language-server binary):
| Feature | .http / .rest | *.http.js / *.http.ts / *.http.lua | Inside {% %} scripts |
|---|---|---|---|
| Completion | โ | โ (script API) | โ (script API + variables) |
| Hover | โ (resolved request / GraphQL) | โ (script API) | โ (script API) |
| Diagnostics | โ (parse errors) | - | - |
| Document symbols | โ (request names) | - | - |
External script files must be named something.http.ts (etc.) when kulala.enforceExternalScriptNamingConvention is true (default), matching Neovim.
Configuration
| Setting | Default | Description |
|---|---|---|
kulala.corePath | (empty) | Path to kulala-core binary; skips auto-download when set |
kulala.coreVersion | [current version] | Release version to download |
kulala.dataDir | (platform default) | KULALA_CORE_DATA_DIR for cookies, OAuth, globals |
kulala.defaultEnv | default | Default environment name |
kulala.timeout | 60000 | Subprocess timeout (ms) |
kulala.responseView | beside | Response panel: beside, below, or active |
kulala.enableLsp | true | kulala-core completion, hover, diagnostics, symbols |
kulala.enableDiagnostics | true | Parse diagnostics in .http / .rest |
kulala.enableCompletion | true | Completion in HTTP files and {% %} scripts |
kulala.enforceExternalScriptNamingConvention | true | LSP on *.http.js / *.http.ts / *.http.lua only |
kulala.syntaxHighlighting | true | Tree-sitter semantic highlighting for .http / .rest |
Syntax highlighting
Kulala bundles the kulala_http grammar from mistweaverco/tree-sitter-kulala-http (syntaxes/kulala_http.wasm + query files). Language injections (from upstream queries/kulala_http/injections.scm) re-highlight embedded content using additional grammars under syntaxes/grammars/ (json, javascript, typescript, lua, graphql, xml).
Inline {% %} scripts use short language tags on
the opening line (same as kulala-core):
lang=lua, lang=js, or lang=ts for TypeScript.
Omit the tag for JavaScript.
Use lang=ts (not lang=typescript)
so kulala-core runs the TypeScript transpiler.
It uses VS Code semantic highlighting (enable with a theme that supports it, e.g., Dark+).
Requires editor.semanticHighlighting.enabled
(on by default for http / rest via this extension).
pnpm run build runs pnpm install,
fetches grammars with git / curl,
and builds WASM with the tree-sitter CLI:
pnpm run build:syntax
Optional environment variables:
| Variable | Default | Purpose |
|---|---|---|
KULALA_HTTP_GRAMMAR_REPO | https://github.com/mistweaverco/tree-sitter-kulala-http.git | Host grammar clone URL |
KULALA_HTTP_GRAMMAR_REF | main | Host grammar branch or tag |
KULALA_HTTP_GRAMMAR_DIR | .cache/tree-sitter-kulala-http | Host grammar cache |
KULALA_GRAPHQL_GRAMMAR_REPO | https://github.com/joowani/tree-sitter-graphql.git | GraphQL grammar (npm package does not ship wasm) |
KULALA_LUA_GRAMMAR_REPO | https://github.com/tree-sitter-grammars/tree-sitter-lua.git | Lua wasm + highlights (must match) |
KULALA_XML_GRAMMAR_REPO | https://github.com/tree-sitter-grammars/tree-sitter-xml.git | XML grammar (build in xml/ subdir) |
Example
Create api.http:
### Get user
GET https://httpbin.org/get
Accept: application/json
Use Kulala: Send Request or click the CodeLens above the request.
OpenAPI explorer
Fetch a spec with the # @kulala-openapi-explorer directive, then explore and run operations from the OpenAPI panel:
### Petstore
# @kulala-openapi-explorer
GET https://petstore3.swagger.io/api/v3/openapi.json
- Running the block opens the OpenAPI explorer (not the normal response panel).
- Use Kulala: Open OpenAPI Explorer to reopen the last tree or load from the cursor.
- Use From file on a Try it out field to load that value from a file.
- Use Copy as HTTP on an operation (or Kulala: Copy OpenAPI Operation as HTTP)
to copy a standalone
.httprequest to the clipboard. - Use Kulala: Clear OpenAPI Schema Cache to drop cached specs.
- Operation runs open the standard response panel (Monaco body).
How it works
The extension talks to kulala-core over a JSON stdin protocol
(action: run, parse, lsp_completion, ...)
On first use it installs the
matching release binary into extension global storage,
or you can point kulala.corePath at your own build.
License
MIT