npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@mistweaverco/kulala-fmt

v4.5.0

Published

<div align="center">

Readme

Kulala-fmt Logo

kulala-fmt

npm Made with love Discord Development status Our manifesto AI Policty

InstallCheckFormat/FixConvertConfigurationDevelopment

An opinionated 🦄 .http and .rest 🐼 files linter 💄 and formatter ⚡.

Other tools 🔧 from the Kulala 🐼 family 🌈

Kulala for NeovimKulala CLIKulala DesktopKulala for Visual Studio CodeKulala Core Kulala Github Action


Install

You can install kulala-fmt globally using npm, bun, yarn or pnpm:

npm install -g @mistweaverco/kulala-fmt
bun add -g @mistweaverco/kulala-fmt
yarn global add @mistweaverco/kulala-fmt
pnpm add -g @mistweaverco/kulala-fmt

You can also run it directly without installation using

npx, bunx, yarn dlx or pnpx:

npx @mistweaverco/kulala-fmt fix file.http
bunx @mistweaverco/kulala-fmt fix file.http
yarn dlx @mistweaverco/kulala-fmt fix file.http
pnpx @mistweaverco/kulala-fmt fix file.http

On install, kulala-fmt downloads a matching kulala-core binary automatically. If install scripts are disabled (for example npm install --ignore-scripts), the binary is downloaded on first use instead.

To use your own kulala-core binary, set KULALA_CORE_PATH:

export KULALA_CORE_PATH=/path/to/kulala-core

Usage

kulala-fmt can fix(alias format) and check .http and .rest files.

It can also convert between .http files and other API formats (OpenAPI, Postman, Bruno).

Format / Fix

Format all .http and .rest files in the current directory and its subdirectories:

kulala-fmt fix

Format files in a specific directory:

kulala-fmt fix path/to/requests

or

kulala-fmt format

Format specific .http and .rest files:

kulala-fmt fix file1.http file2.rest http/*.http

Skip formatting request bodies:

kulala-fmt fix --no-body file.http

Format stdin input:

cat SOMEFILE.http | kulala-fmt fix --stdin

Check

Check if all .http and .rest files in the current directory and its subdirectories are formatted (shows a diff for files that need formatting):

kulala-fmt check

Check a specific directory:

kulala-fmt check path/to/requests

Check without diff output:

kulala-fmt check --quiet

Check if specific .http and .rest files are formatted:

kulala-fmt check file1.http file2.rest http/*.http

Check stdin input:

cat SOMEFILE.http | kulala-fmt check --stdin

Convert

kulala-fmt supports bidirectional conversion between .http files and several API formats. Use --from and --to to select the source and destination format (defaults: openapihttp).

OpenAPI / Swagger to .http

Convert OpenAPI 3.x or Swagger 2.0 .yaml, .yml or .json files to .http files. Query, path, header, and request body parameters are included; Swagger 2.0 definitions and in: body parameters are supported.

kulala-fmt convert --from openapi openapi.yaml
kulala-fmt convert swagger.json

Postman collection to .http

Convert Postman collection .json files to .http files:

kulala-fmt convert --from postman postman.json

.http to Postman collection

Convert one or more .http / .rest files (or a directory) to a Postman Collection v2.1 .json file. Directory structure is preserved as Postman folders.

kulala-fmt convert --from http --to postman requests.http
kulala-fmt convert --from http --to postman ./api/
kulala-fmt convert --from http --to postman *.http -o my-collection.json

Inject variables from an environment file:

kulala-fmt convert --from http --to postman requests.http --env .env
kulala-fmt convert --from http --to postman requests.http --env http-client.env.json

Bruno to .http

Convert Bruno collections to .http files. Request variables (vars:pre-request), environment variables, query/path params, and scripts are preserved.

kulala-fmt convert --from bruno path/to/bruno/collection

Configuration

kulala-fmt reads kulala-fmt.yaml from the current working directory. Create one with:

kulala-fmt init

Example configuration:

# yaml-language-server: $schema=https://kulala.app/kulala-fmt.schema.json
defaults:
  http_method: GET
  http_version: HTTP/1.1
body:
  format:
    indent: 2
    line_width: 80
    expand_tabs: true

All fields are optional. See config.schema.json or the published schema at https://kulala.app/kulala-fmt.schema.json for the full reference.

defaults.http_version can also be set to false to omit the HTTP version from request lines.

What does it do?

  • Checks if the file is formatted and valid
  • Removes extraneous newlines
  • Lowercases all headers (when HTTP/2 or HTTP/3) else it'll uppercase the first letter
  • Puts all metadata right before the request line

So a perfect request would look like this:

@SOME_DOCUMENT_VARIABLE1 = some value

### REQUEST_NAME_ONE

# This is a comment
# @kulala-curl--insecure
# This is another comment

POST https://echo.kulala.app/post HTTP/1.1
Content-Type: application/json

{
  "key": "{{ SOME_DOCUMENT_VARIABLE1 }}"
}

or this:

@SOME_DOCUMENT_VARIABLE1 = some value

### REQUEST_NAME_ONE

# This is a comment
# @kulala-curl--insecure
# This is another comment

POST https://echo.kulala.app/post HTTP/2
content-type: application/json

{
  "key": "{{ SOME_DOCUMENT_VARIABLE1 }}"
}

Development

Clone the repository and install dependencies with pnpm:

pnpm install
pnpm run build

Other useful commands:

pnpm run lint
node dist/cli.cjs --help

Use it with conform.nvim

return {
  "stevearc/conform.nvim",
  config = function()
    require("conform").setup({
      formatters_by_ft = {
        http = { "kulala-fmt" },
      },
      format_on_save = true,
    })
  end,
}