kulala.vscode

August 18, 2026 ยท View on GitHub

Kulala Logo

kulala.vscode

Made with love Discord Development status Our manifesto AI Policty Kulala on the Visual Code Marketplace Kulala on the Open VSX Registry

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-explorer blocks (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 .http files
  • Syntax highlighting via the kulala_http tree-sitter grammar
  • Copy as cURL / paste from cURL
  • Inspect request (resolved request preview)
  • OAuth / custom prompts via kulala-core continue flow

Requirements

  • VS Code 1.105 or newer
  • Network access on first run (downloads kulala-core from GitHub releases unless kulala.corePath is 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.luaInside {% %} 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

SettingDefaultDescription
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.defaultEnvdefaultDefault environment name
kulala.timeout60000Subprocess timeout (ms)
kulala.responseViewbesideResponse panel: beside, below, or active
kulala.enableLsptruekulala-core completion, hover, diagnostics, symbols
kulala.enableDiagnosticstrueParse diagnostics in .http / .rest
kulala.enableCompletiontrueCompletion in HTTP files and {% %} scripts
kulala.enforceExternalScriptNamingConventiontrueLSP on *.http.js / *.http.ts / *.http.lua only
kulala.syntaxHighlightingtrueTree-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:

VariableDefaultPurpose
KULALA_HTTP_GRAMMAR_REPOhttps://github.com/mistweaverco/tree-sitter-kulala-http.gitHost grammar clone URL
KULALA_HTTP_GRAMMAR_REFmainHost grammar branch or tag
KULALA_HTTP_GRAMMAR_DIR.cache/tree-sitter-kulala-httpHost grammar cache
KULALA_GRAPHQL_GRAMMAR_REPOhttps://github.com/joowani/tree-sitter-graphql.gitGraphQL grammar (npm package does not ship wasm)
KULALA_LUA_GRAMMAR_REPOhttps://github.com/tree-sitter-grammars/tree-sitter-lua.gitLua wasm + highlights (must match)
KULALA_XML_GRAMMAR_REPOhttps://github.com/tree-sitter-grammars/tree-sitter-xml.gitXML 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 .http request 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