{"id":28673897,"url":"https://github.com/mistweaverco/kulala-fmt","last_synced_at":"2026-01-14T19:29:31.983Z","repository":{"id":249463122,"uuid":"830631516","full_name":"mistweaverco/kulala-fmt","owner":"mistweaverco","description":"An opinionated 🦄 .http and .rest 🐼 files linter 💄 and  formatter ⚡.","archived":false,"fork":false,"pushed_at":"2025-11-24T10:56:05.000Z","size":333,"stargazers_count":75,"open_issues_count":8,"forks_count":5,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-11-27T23:16:50.166Z","etag":null,"topics":["formatter","http-client","linter","rest-client"],"latest_commit_sha":null,"homepage":"https://fmt.getkulala.net","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mistweaverco.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-07-18T16:43:32.000Z","updated_at":"2025-11-24T10:55:29.000Z","dependencies_parsed_at":"2025-04-15T16:37:38.806Z","dependency_job_id":"4fc179b8-e052-470a-ad27-0f693e156128","html_url":"https://github.com/mistweaverco/kulala-fmt","commit_stats":null,"previous_names":["mistweaverco/kulala-fmt"],"tags_count":29,"template":false,"template_full_name":null,"purl":"pkg:github/mistweaverco/kulala-fmt","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mistweaverco%2Fkulala-fmt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mistweaverco%2Fkulala-fmt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mistweaverco%2Fkulala-fmt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mistweaverco%2Fkulala-fmt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mistweaverco","download_url":"https://codeload.github.com/mistweaverco/kulala-fmt/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mistweaverco%2Fkulala-fmt/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28432615,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T18:57:19.464Z","status":"ssl_error","status_checked_at":"2026-01-14T18:52:48.501Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["formatter","http-client","linter","rest-client"],"created_at":"2025-06-13T21:01:09.433Z","updated_at":"2026-01-14T19:29:31.975Z","avatar_url":"https://github.com/mistweaverco.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n![Kulala-fmt Logo](logo.svg)\n\n# kulala-fmt\n\n[![NPM](https://img.shields.io/npm/v/@mistweaverco/kulala-fmt?style=for-the-badge)](https://www.npmjs.com/package/@mistweaverco/kulala-fmt)\n[![TypeScript](https://img.shields.io/badge/TypeScript-3178C6.svg?style=for-the-badge\u0026logo=typescript\u0026logoColor=FFF)](https://www.typescriptlang.org/)\n[![Rollup](https://img.shields.io/badge/Rollup-bd0f0f.svg?style=for-the-badge\u0026logo=rollup.js\u0026logoColor=FFF)](https://rollupjs.org/)\n[![GitHub release (latest by date)](https://img.shields.io/github/v/release/mistweaverco/kulala-fmt?style=for-the-badge)](https://github.com/mistweaverco/kulala-fmt/releases/latest)\n[![Discord](https://img.shields.io/badge/discord-join-7289da?style=for-the-badge\u0026logo=discord)](https://discord.gg/QyVQmfY4Rt)\n\n[Install](#install) • [Usage](#usage)\n\n\u003cp\u003e\u003c/p\u003e\n\nAn opinionated 🦄 .http and .rest 🐼 files linter 💄 and formatter ⚡.\n\n\u003cp\u003e\u003c/p\u003e\n\n\u003c/div\u003e\n\n## Install\n\nVia npm:\n\n```sh\nnpm install -g @mistweaverco/kulala-fmt\n```\n\nYou can also run it directly without installation using npx:\n\n```sh\n# From npm registry\nnpx @mistweaverco/kulala-fmt format file.http\n\n# Directly from GitHub\nnpx github:mistweaverco/kulala-fmt format file.http\n```\n\n## Usage\n\nkulala-fmt can `format` and `check` `.http` and `.rest` files.\n\nIt can also `convert` OpenAPI `.yaml`, `.yml` or `.json` files to `.http` files.\n\n### Format\n\nFormat all `.http` and `.rest` files in the current directory and its subdirectories:\n\n```sh\nkulala-fmt format\n```\n\nFormat specific `.http` and `.rest` files.\n\n```sh\nkulala-fmt format file1.http file2.rest http/*.http\n```\n\nFormat stdin input:\n\n```sh\ncat SOMEFILE.http | kulala-fmt format --stdin\n```\n\n### Check\n\nCheck if all `.http` and `.rest` files in the current directory and its subdirectories are formatted:\n\n```sh\nkulala-fmt check\n```\n\nCheck if specific `.http` and `.rest` files are formatted:\n\n```sh\nkulala-fmt check file1.http file2.rest http/*.http\n```\n\nCheck if all `.http` and `.rest` files in the current directory and\nits subdirectories are formatted and\nprints the desired output to the console:\n\n```sh\nkulala-fmt check --verbose\n```\n\nCheck if specific `.http` and `.rest` files are formatted and\nprints the desired output to the console:\n\n```sh\nkulala-fmt check --verbose file1.http file2.rest http/*.http\n```\n\nCheck stdin input:\n\n```sh\ncat SOMEFILE.http | kulala-fmt format --stdin\n```\n\n### Convert\n\n#### OpenAPI to `.http`\n\nConvert OpenAPI `.yaml`, `.yml` or `.json` files to `.http` files:\n\n```sh\nkulala-fmt convert --from openapi openapi.yaml\n```\n\n#### Postman collection to `.http`\n\nConvert Postman collection `.json` files to `.http` files:\n\n```sh\nkulala-fmt convert --from postman postman.json\n```\n\n#### Bruno to `.http`\n\nConvert Bruno collections to `.http` files:\n\n```sh\nkulala-fmt convert --from bruno path/to/bruno/collection\n```\n\n## What does it do?\n\n- Checks if the file is formatted and valid\n- Removes extraneous newlines\n- Makes sure document variables are at the top of the file\n- Lowercases all headers (when HTTP/2 or HTTP/3) else it will uppercase the first letter\n- Puts all metadata right before the request line\n- Ensures all comments are at the top of the request\n\nSo a perfect request would look like this:\n\n```http\n@variables1 = value1\n\n\n### REQUEST_NAME_ONE\n\n# This is a comment\n# This is another comment\n# @someother metatag\nGET http://localhost:8080/api/v1/health HTTP/1.1\nContent-Type: application/json\n\n{\n  \"key\": \"value\"\n}\n```\n\nor this:\n\n```http\n@variables1 = value1\n\n\n### REQUEST_NAME_ONE\n\n# This is a comment\n# This is another comment\n# @someother metatag\nGET http://localhost:8080/api/v1/health HTTP/2\ncontent-type: application/json\n\n{\n  \"key\": \"value\"\n}\n```\n\n## Use it with conform.nvim\n\n```lua\nreturn {\n  \"stevearc/conform.nvim\",\n  config = function()\n    require(\"conform\").setup({\n      formatters = {\n        kulala = {\n          command = \"kulala-fmt\",\n          args = { \"format\", \"$FILENAME\" },\n          stdin = false,\n        },\n      },\n      formatters_by_ft = {\n        http = { \"kulala\" },\n      },\n      format_on_save = true,\n    })\n  end,\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmistweaverco%2Fkulala-fmt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmistweaverco%2Fkulala-fmt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmistweaverco%2Fkulala-fmt/lists"}