| Feature | VS Code | JetBrains | httpyac | VS 2022 | kulala |
|---|---|---|---|---|---|
| Response handler scripts (> {% %}) httpyac supports for JetBrains compatibility. | |||||
| Response handler scripts ({{ }}) httpyac-native syntax with full Node.js require() access. | |||||
| Pre-request scripts (< {% %}) | |||||
| Pre-request scripts ({{ }} before request) | |||||
| Assertion syntax (?? status == 200) Supports status, header, body, duration, js, xpath assertions. | |||||
| client.test() API | |||||
| Crypto API in scripts crypto.hmac.sha256(), crypto.sha256(), etc. | |||||
| Lua scripting > {% --lua ... %}. Unique to kulala.nvim. | |||||
| External response handler file (> filepath.js) | |||||
| Event-specific script hooks {{@request}}, {{@streaming}}, {{@response}}, {{@responseLogging}}, {{@after}}. | |||||
| Global script registration ({{+...}}) Registers scripts to execute across all requests. {{+after}} runs after every request. | |||||
| Built-in test helpers (test.status(), test.header()) test.status(), test.totalTime(), test.header(), test.headerContains(), test.responseBody(), etc. |
The scripting divide
Section titled “The scripting divide”The most significant split in the .http ecosystem is between clients that support scripting and those that don't:
Limited Support Supported by 2 implementations.
VS Code REST Client and Visual Studio 2022 offer no scripting at all. Response data is accessed only through named request variables (dot-path syntax). There are no assertions, no pre-request logic, no response handlers.
Response handler syntax comparison
Section titled “Response handler syntax comparison”The JetBrains response handler syntax has become the de facto standard for scripting — adopted by httpyac (for compatibility) and kulala.nvim.
JetBrains
GET https://api.example.com/users
> {%
client.test("Status is 200", function() {
client.assert(response.status === 200);
});
client.global.set("count", response.body.length);
%}
httpyac (JetBrains compat)
GET https://api.example.com/users
> {%
client.test("Status is 200", function() {
client.assert(response.status === 200);
});
%}
httpyac (native)
GET https://api.example.com/users
{{
const { equal } = require('assert');
test('status is 200', () => {
equal(response.statusCode, 200);
});
}}
httpyac (assertions)
GET https://api.example.com/users
?? status == 200
?? header content-type includes json
?? duration < 500
httpyac additions
Section titled “httpyac additions”httpyac supports JetBrains scripts for compatibility but adds:
- Native double-brace blocks with full Node.js
require()access ??assertion syntax for concise, readable tests- Event hooks for request, streaming, response, and after events
GET https://api.example.com/users
?? status == 200?? header content-type includes json?? duration < 500kulala.nvim: Lua scripting
Section titled “kulala.nvim: Lua scripting”kulala.nvim uniquely supports Lua alongside JavaScript in response handler scripts.