An opinionated π¦ .http and .rest πΌ files linter π and formatter β‘.
Via npm:
npm install -g @mistweaverco/kulala-fmtYou can also run it directly without installation using npx:
# From npm registry
npx @mistweaverco/kulala-fmt format file.http
# Directly from GitHub
npx github:mistweaverco/kulala-fmt format file.httpkulala-fmt can format and check .http and .rest files.
It can also convert OpenAPI .yaml, .yml or .json files to .http files.
Format all .http and .rest files in the current directory and its subdirectories:
kulala-fmt formatFormat specific .http and .rest files.
kulala-fmt format file1.http file2.rest http/*.httpFormat stdin input:
cat SOMEFILE.http | kulala-fmt format --stdinCheck if all .http and .rest files in the current directory and its subdirectories are formatted:
kulala-fmt checkCheck if specific .http and .rest files are formatted:
kulala-fmt check file1.http file2.rest http/*.httpCheck if all .http and .rest files in the current directory and
its subdirectories are formatted and
prints the desired output to the console:
kulala-fmt check --verboseCheck if specific .http and .rest files are formatted and
prints the desired output to the console:
kulala-fmt check --verbose file1.http file2.rest http/*.httpCheck stdin input:
cat SOMEFILE.http | kulala-fmt format --stdinConvert OpenAPI .yaml, .yml or .json files to .http files:
kulala-fmt convert --from openapi openapi.yamlConvert Postman collection .json files to .http files:
kulala-fmt convert --from postman postman.jsonConvert Bruno collections to .http files:
kulala-fmt convert --from bruno path/to/bruno/collection- Checks if the file is formatted and valid
- Removes extraneous newlines
- Makes sure document variables are at the top of the file
- Lowercases all headers (when HTTP/2 or HTTP/3) else it will uppercase the first letter
- Puts all metadata right before the request line
- Ensures all comments are at the top of the request
So a perfect request would look like this:
@variables1 = value1
### REQUEST_NAME_ONE
# This is a comment
# This is another comment
# @someother metatag
GET http://localhost:8080/api/v1/health HTTP/1.1
Content-Type: application/json
{
"key": "value"
}or this:
@variables1 = value1
### REQUEST_NAME_ONE
# This is a comment
# This is another comment
# @someother metatag
GET http://localhost:8080/api/v1/health HTTP/2
content-type: application/json
{
"key": "value"
}return {
"stevearc/conform.nvim",
config = function()
require("conform").setup({
formatters = {
kulala = {
command = "kulala-fmt",
args = { "format", "$FILENAME" },
stdin = false,
},
},
formatters_by_ft = {
http = { "kulala" },
},
format_on_save = true,
})
end,
}