Individual skill
n8n-code-nodes-official
Use when the user reaches for a Code node, mentions writing JavaScript or Python in n8n, or any custom logic comes up in workflow design. Triggers on "Code node", "Code", "JavaScript", "Python", "custom logic", "transform data", "$input", "$json transformation", "loop in code", "write a function", or any time the obvious answer seems to be "just put it in code."
skills/n8n-code-nodes-official/SKILL.md
Source commit 27b6b9f429ac0be90cae764512dbc579d7107e95
What was checked
- Matches the observed repository HEAD
- Yes
- Scanner rules are current
- No
- Repository scan complete
- No
- Skill scan complete
- No
- Observed behavior
- Not checked yet
- Last checked
- Nov 6, 2026
These are observations at the recorded commit, not a guarantee of safety. Review the source before running it.
Install this skill
Choose an agent in your Stack or copy a command below. Commands fetch the pinned commit and copy only this skill directory. Existing destinations are refused. Copying a command does not install anything.
An install command is unavailable: current rules, complete repository and skill scans, an eligible behavior level and a permitted license are required.
Repository context
- Repository stars (not skill ratings)
- 582
- Repository last updated
- Oct 30, 2026
- License
- Apache-2.0
Observed agent integration: No specific integration evidence. Standard SKILL.md installation does not imply verified compatibility.
- design Derived category
- operations Derived category
- writing Derived category
- data Derived category
Files and excerpt
File metadata and permitted, redacted excerpts come from the recorded scan. Source links are pinned to that commit.
Browse files
SKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesSKILL.mdcore · 12,238 bytesreferences/ARROW_FUNCTIONS_IN_EDIT_FIELDS.mddoc · 8,497 bytesreferences/DECISION_TREE.mddoc · 5,909 bytesreferences/JAVASCRIPT_PATTERNS.mddoc · 6,108 bytes
Read excerpt
# n8n Code Nodes
The Code node is powerful and often the wrong tool. The n8n equivalent of dropping into raw SQL when an ORM would do: real cases exist, but the moment a Code node handles logic an expression could, the workflow is harder to read, debug, and maintain. There's also a real perf gap: Code runs in a sandboxed JS runtime, expressions and Edit Fields run in-process, and the per-invocation overhead can be hundreds of times higher in Code (anecdotally ~2ms vs ~600ms for equivalent logic). For hot paths and large item counts, that compounds.
## Strong defaults
1. **Code node is a last resort.** Decision order: expression (`{{...}}`) → arrow function inside Edit Fields → Code node. The first two paths cover most "transform this data" tasks. Code earns its place for multi-source aggregation, external libraries, and a few specific patterns documented below.
2. **Default to JavaScript.** Write JS unless the user explicitly asked for Python ("use Python here," "I'm a Python shop," pasted Python code). Everywhere else in n8n (expressions, Edit Fields) is JS, JS has a curated library allowlist (`lodash`, `crypto`, `luxon`).
## Decision tree
```
Need custom logic?