Node BuilderDocs
Open the builder
The definition format

The definition format

One JSON document describes the whole node. It contains no n8n concepts at all, which is what lets the builder be designed around how people think about APIs rather than how n8n stores them.

The shape

A definition is resources, operations, fields

There are no displayOptions, no routing blocks, and no flat properties array. The compiler generates all of that.

{
  "nodesterVersion": 1,
  "node": {
    "name": "example",
    "displayName": "Example",
    "baseUrl": "https://api.example.com"
  },
  "resources": [
    {
      "name": "post",
      "displayName": "Post",
      "operations": [
        {
          "name": "get",
          "method": "GET",
          "path": "/posts/{postId}",
          "fields": [
            {
              "name": "postId",
              "displayName": "Post ID",
              "type": "number",
              "target": "path",
              "required": true,
              "default": 1
            }
          ]
        }
      ]
    }
  ]
}
The idea that matters

A field is a binding

This is the idea most likely to be lost. A field is not just a form input; it is a binding between a form input and part of an HTTP request. target is what encodes that.

  • path puts the value into the URL, replacing a placeholder.
  • query appends it as a query parameter.
  • body makes it a property of the JSON body.
  • header sends it as a request header.

Strip the bindings and you have a settings panel that does nothing. It is why the builder shows the request as a line with drop zones underneath: moving a field from Body to Query literally sets target.

Names are derived, not typed

Machine names must be camelCase and match ^[a-z][a-zA-Z0-9]*$. The builder derives them from the display name and keeps them behind an advanced disclosure, so nobody has to know that rule exists.

Credentials

Authentication

Three kinds, and the honest limit is that OAuth2 is not one of them. It is absent deliberately: it can be generated easily enough, but not tested properly yet, and a credential type that cannot be verified is worse than one that does not exist.

  • none for public APIs.
  • apiKey in a header or the query string, with an optional prefix.
  • basic for HTTP basic auth.
Output

What the compiler adds

Given the document above, the emitted package is six files and about 2.5 kB. n8n's own TypeScript template produces 68.6 kB across 50 files and needs roughly 600 MB of dependencies to build. The difference is that a declarative node never actually required a compiler.

The only JavaScript in the output is a four line shim that reads the JSON and hands it to n8n. It is byte identical in every node except the class name.