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."
Kulala CLI • Kulala Formatter (and converter) • Kulala Desktop • Kulala for Neovim • Kulala Core Kulala Github Action
- 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, Headers, timings, and script console output
- 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
- VS Code 1.105 or newer
- Network access on first run
(downloads
kulala-corefrom GitHub releases unlesskulala.corePathis set)
Install Kulala (mistweaverco.kulala) from the VS Code Marketplace.
cd kulala.vscode
pnpm install
pnpm run buildPress F5 in VS Code to launch an Extension Development Host.
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.
| 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 |
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:syntaxOptional 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) |
Create api.http:
### Get user
GET https://httpbin.org/get
Accept: application/jsonUse Kulala: Send Request or click the CodeLens above the request.
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.
MIT