---
title: "code formatter & HubL linter for Zapier, n8n, Make - codefmt"
url: https://codefmt.dev/
updated: 2026-10-28
sources:
  - https://codefmt.dev/
licence: "© codefmt. Cite with attribution to https://codefmt.dev."
---

# code formatter and linter for automation platforms

codefmt formats and lints the code you write inside automation-platform code steps: JavaScript and Python for Zapier, n8n, Pipedream, Make, and HubSpot Data Hub, with opt-in TypeScript for Pipedream CLI components, plus HubL for HubSpot CMS templates. it wraps your snippet in the platform's runtime shell first, so top-level await, bare return, and injected globals like inputData or $input parse cleanly instead of breaking standard tools.

## what the tool does

- formats JavaScript and TypeScript with Biome and lints with oxlint
- formats and lints Python with Ruff (500+ rules, Black-compatible output)
- formats and lints HubL with a dedicated, zero-setup linter (28 rules, 7 one-click safe fixes)
- understands each platform's runtime shell and injected globals, and detects code pasted from a different platform
- formats client-side in your browser via WebAssembly; JavaScript lint diagnostics are the one server-assisted step
- ships 31+ curated code snippets, a diff view, and a command palette
- has no accounts, no sign-in, and no tracking cookies

## frequently asked questions

### what is codefmt?

codefmt is a free online code formatter and linter built for automation platforms. it formats and lints the javascript, typescript, python, and hubl you write inside code steps in Zapier, n8n, Pipedream, Make, and HubSpot. it runs in your browser, ships as a chrome and firefox extension, and has no accounts and no tracking cookies.

### why does my code break in Prettier but format fine in codefmt?

automation platforms wrap your code in an async function and inject runtime globals like inputData or $input, and they allow top-level await and bare return. standard formatters parse your snippet as a complete program, so they stop at the first bare return or top-level await, and standard linters flag those globals as undefined. codefmt wraps your snippet in the platform's runtime shell first, formats it, then strips the wrapper, so it parses cleanly.

### which automation platforms does codefmt support?

Zapier, n8n, Pipedream, Make, and HubSpot Data Hub for javascript and python code steps, plus HubL for HubSpot CMS templates. on Pipedream, typescript works for components built with its CLI, behind the typescript chip. select a platform tab to get its exact runtime shell, globals, and code examples.

### does codefmt lint, or just format?

both. javascript and typescript are linted with oxlint, python with Ruff (500+ rules), and HubL with a dedicated linter that catches unclosed blocks, unknown filters, deprecated tags, and js-mindset traps, with one-click safe fixes.

### how do I authenticate with the api? do I need an api key?

you don't authenticate at all. the format api, the mcp server, and the ask endpoint are all public, with no accounts, api keys, or oauth, so don't send an authorization header. calls are rate limited per ip instead. call the format api from a script, a server, or an mcp client: a browser page on another site gets a 403. the full statement is at https://codefmt.dev/auth.md.

### what are the api rate limits?

60 requests per minute per ip across format api calls, mcp and a2a tool calls, and /ask (mcp handshakes and listings are not counted). the count is kept per server instance, so treat it as a ceiling to stay under rather than an exact budget. the format api reports where you stand in RateLimit headers and its 429 carries Retry-After; /ask answers a 429 with the message in answer, and an mcp tool call over the limit returns a tool result saying to try again in a minute. a format api request takes code up to 51,200 characters, 50KB of ASCII (400 above it), request body up to 100KB, counted in bytes (413 above it).

### is codefmt free and private?

yes. codefmt is free, with no accounts and no sign-in. javascript and python format client-side in your browser via WebAssembly, and hubl with codefmt's own in-browser formatter. javascript lint is the one server step: your code is processed in memory, never stored, never logged. there are no tracking cookies, and analytics are anonymous and aggregate.

## for agents and automation

- format API: POST https://codefmt.dev/api/format (OpenAPI: https://codefmt.dev/api/openapi.json, code up to 51,200 characters, 50KB of ASCII (400 above it), request body up to 100KB, counted in bytes (413 above it), no authentication)
- MCP server: POST https://codefmt.dev/api/mcp (tools: format_code, format_json, ask_codefmt; manifest: https://codefmt.dev/.well-known/mcp.json)
- rate limit: 60 requests per minute per ip across format api calls, mcp and a2a tool calls, and /ask (mcp handshakes and listings are not counted). the count is kept per server instance, so treat it as a ceiling to stay under rather than an exact budget. the format api reports where you stand in RateLimit headers and its 429 carries Retry-After; /ask answers a 429 with the message in answer, and an mcp tool call over the limit returns a tool result saying to try again in a minute
- auth statement: https://codefmt.dev/auth.md (no accounts, api keys or oauth; send no authorization header)
- site index for agents: https://codefmt.dev/llms.txt
- full reference (request bodies for every language, a copy-paste curl command, platform globals, troubleshooting): https://codefmt.dev/llms-full.txt
