n8n 3.0 removes the Function node, and published workflows stop activating
n8n 3.0.0 shipped as a beta on 27 October, stable lands in early December, and it is an operational release rather than a feature release. Around three dozen legacy nodes go away, including Function, Function Item, Item Lists, Cron and Interval. The dangerous sentence is in n8n's own docs: "Workflow

s that use a removed node fail when they run. If such a workflow is published, it doesn't activate when n8n 3.0 starts, so its triggers stop firing." No red execution. No retry. No email.
The workflow is simply not active, and you find out from a customer. Removed in 3.0 Use instead -------------------- ---------------------------------------------- Function Code node, Run Once for All Items Function Item Code node, Run Once for Each Item Item Lists Split Out, Aggregate, Sort, Limit, Remove Duplicates, Summarize Cron, Interval Schedule Trigger HTML Extract current node version iCalendar current node version Binary file nodes current node versions Some migrations are automatic (the AI Transform node becomes a Code node with the same generated JavaScript). Function and Function Item are not. You replace those yourself.
Settings, then Migration Report. Exists from 2.39 onwards, and it lists the affected workflows, nodes and settings on your own instance. Save a copy. On an older version, upgrade to 2.39 first.
The report is worth one small, reversible upgrade. Count the node types yourself. Export workflows through /api/v1/workflows or the CLI and search the JSON for n8n-nodes-base.function, functionItem, itemLists, n8n-nodes-base.cron, n8n-nodes-base.interval. Write the list down with workflow name, node and purpose.
That list is your upgrade plan and your rollback argument. The Function to Code conversion is the only real work, because the execution model changes: // Function (legacy): input is items, you return an array of items return items.map(item => ({ json: { ...item.json, seen: true } })); // Code, Run Once for All Items: read all input, return an array const items = $input.all(); return items.map(item => ({ json: { ...item.json, seen: true } })); For Function Item, use Code with Run Once for Each Item: the input is a single item and you return that item's new data. Test each migrated workflow on 2.x, run it once manually, check the output shape the next node expects, then publish. Then upgrade, with a backup, because 3.0 cannot be rolled back.
Open the workflow list and look at the active toggle on every workflow, not only the ones you migrated. A workflow that lost activation looks identical to a healthy one in a screenshot. The list is the only place the difference shows, and only if you look. Full guide with the audit steps and sources: voxahq.in.
No affiliate links.
Key Takeaways
- โขIf such a workflow is published, it doesn't activate when n8n 3.0 starts, so its triggers stop firing." No red execution.
- โขThis story was reported by Dev.to, covering developments in the dev space.
- โขAI advancements continue to reshape industries โ read the full article on Dev.to for complete coverage.
๐ Continue reading the full article:
Read Full Article on Dev.to โShare this article



