---
title: "n8n Breaking Changes"
description: "This list shows all the versions which include breaking changes and how to upgrade."
type: skill
canonical_url: https://claudary.paisolsolutions.com/skills/breaking-changes
source: "Claudary"
difficulty: intermediate
author: "Claude Code Knowledge Pack"
date: 2026-07-10T11:07:11.006Z
license: CC-BY-4.0
attribution: "n8n Breaking Changes — Claudary (https://claudary.paisolsolutions.com/skills/breaking-changes)"
---

# n8n Breaking Changes
This list shows all the versions which include breaking changes and how to upgrade.

## Overview

# n8n Breaking Changes

This list shows all the versions which include breaking changes and how to upgrade.

# 2.0.0

### What changed?

The `npm` command is no longer available in the `n8nio/runners` image. Only `pnpm` is available for package management.

### When is action necessary?

If you are extending the `n8nio/runners` image and using `npm` to install dependencies. Replace any `npm install` commands with `pnpm install` in your Dockerfile or scripts.

# 1.122.0

### What changed?

The way to add third-party dependencies to the `n8nio/runners` image has changed. More details [here](https://docs.n8n.io/hosting/configuration/task-runners/#adding-extra-dependencies).

### When is action necessary?

If you are adding third-party dependencies to the `n8nio/runners` image using `package.json` and `extras.txt` and building the image yourself, please extend the image as instructed in the link above.

# 1.113.0

### What changed?

Support for bare repositories in Git Node was dropped in the cloud version of n8n due to security reasons. Also, an environment variable `N8N_GIT_NODE_DISABLE_BARE_REPOS` was added that allows self-hosted users to disable bare repositories as well.

### When is action necessary?

If you have workflows that use the Git Node and work with bare git repositories.

# 1.109.0

### What changed?

Webhook HTML responses were sandboxed to an iframe starting from 1.103.1 due to security. The sandboxing mechanism is now changed to use `Content-Security-Policy` header instead of an `iframe`. The security guarantees stay the same, but the mechanism is less breaking.

### When is action necessary?

If you have workflows that return HTML responses from `Webhook Trigger` node or `Respond to Webhook` node.

# 1.107.0

## What changed?

The CLI flag `--reinstallMissingPackages`, deprecated a year ago in version 1.154.0, has been removed.

### When is action necessary?

If you are using this flag, please switch to the environment variable `N8N_REINSTALL_MISSING_PACKAGES`.

## 1.103.0

### What changed?

We will no longer be allowing users to use `responseData` within the Webhook node since this is now sandboxed in an iframe, which may break workflows relying on browser APIs like `localStorage` and `fetch` from within custom code.

### When is action necessary?

If your workflow is using the Webhook node and uses JavaScript in `responseData` to make `fetch` calls or access `localStorage`, you may need to refactor it due to the new iframe sandboxing.

## 1.102.0

### What changed?

The `N8N_RUNNERS_ALLOW_PROTOTYPE_MUTATION` flag has been replaced with `N8N_RUNNERS_INSECURE_MODE`. The new flag
disables all task runner security measures and is intended as an escape hatch for users who value compatibility
with libraries like `puppeteer` at the cost of security.

### When is action necessary?

If you are using the `N8N_RUNNERS_ALLOW_PROTOTYPE_MUTATION` flag, or if you find that the task runner does not
currently support an external module that you rely on, then consider setting `N8N_RUNNERS_INSECURE_MODE=true`,
at your own risk.

## 1.98.0

### What changed?

The `last_activity` metric included as a part of route metrics has been changed to output a Unix time in seconds from
the previous timestamp label approach. The labeling approach could result in high cardinality within Prometheus and
thus result in poorer performance.

Stricter parameters for `iframe`, `video`, and `source` tags when using the Form node.

### When is action necessary?

If you've been ingesting route metrics from your n8n instance (version 1.81.0 and newer), you should analyze
how the `last_activity` metric has affected your Prometheus instance and potentially clean up the old data. Future
metrics will also be served in a different format, which needs to be taken into account.

If you are using `iframe`, `video`, or `source` tags with attributes beyond those listed [here](https://github.com/n8n-io/n8n/blob/master/packages/nodes-base/nodes/Form/utils/utils.ts#L61-L71) or are using schemes which are neither `http` or `https`, you will need to update your node or workflow.

### What changed?

The minimum Node.js version required for n8n is now v20.

### When is action necessary?

If you're using n8n via npm or PM2 or if you're contributing to n8n.

### How to upgrade:

Update the Node.js version to v20 or above.

## 1.83.0

### What changed?

The Form nodes no longer allows `input` field types for custom HTML to prevent malicious javascript from being added.

### When is action necessary?

If you were previously using `input` in the custom HTML for a Form node.

## 1.82.1

### What changed?

The Form nodes no longer allows `input` field types for custom HTML to prevent malicious javascript from being added.

### When is action necessary?

If you were previously using `input` in the custom HTML for a Form node.

## 1.81.3

### What changed?

The Form nodes no longer allows `input` field types for custom HTML to prevent malicious javascript from being added.

### When is action necessary?

If you were previously using `input` in the custom HTML for a Form node.

## 1.65.0

### What changed?

Queue polling via the env var `QUEUE_RECOVERY_INTERVAL` has been removed.

### When is action necessary?

If you have set the env var `QUEUE_RECOVERY_INTERVAL`, so you can remove it as it no longer has any effect.

## 1.63.0

### What changed?

1. The worker server used to bind to IPv6 by default. It now binds to IPv4 by default.
2. The worker server's `/healthz` used to report healthy status based on database and Redis checks. It now reports healthy status regardless of database and Redis status, and the database and Redis checks are part of `/healthz/readiness`.

### When is action necessary?

1. If you experience a port conflict error when starting a worker server using its default port, set a different port for the worker server with `QUEUE_HEALTH_CHECK_PORT`.
2. If you are relying on database and Redis checks for worker health status, switch to checking `/healthz/readiness` instead of `/healthz`.

## 1.57.0

### What changed?

The `verbose` log level was merged into the `debug` log level.

### When is action necessary?

If you are setting the env var `N8N_LOG_LEVEL=verbose`, please update your log level to `N8N_LOG_LEVEL=debug`.

## 1.55.0

### What changed?

The `N8N_BLOCK_FILE_ACCESS_TO_N8N_FILES` environment variable now also blocks access to n8n's static cache directory at `~/.cache/n8n/public`.

### When is action necessary?

If you are writing to or reading from a file at n8n's static cache directory via a node, e.g. `Read/Write Files from Disk`, please update your node to use a different path.

## 1.52.0

### What changed?

Prometheus metrics enabled via `N8N_METRICS_INCLUDE_DEFAULT_METRICS` and `N8N_METRICS_INCLUDE_API_ENDPOINTS` were fixed to include the default `n8n_` prefix.

### When is action necessary?

If you are using Prometheus metrics from these categories and are using a non-empty prefix, please update those metrics to match their new prefixed names.

## 1.47.0

### What changed?

Calling `$(...).last()` (or `$(...).first()` or `$(...).all()` respectively) without arguments is returning the the last item (or first or all items) of the output that connects the two nodes. Before it was returning the item/items of the first output of that node.

### When is action necessary?

If you are using `$(...).last()` (or `$(...).first()` or `$(...)all()` respectively) without arguments for nodes that have multiple outputs (e.g. `If`, `Switch`, `Compare Datasets`, etc.) and you want it to default to the first output. In that case change it to `$(...).last(0)` (or `first` or `all` respectively).

This does not affect the Array functions `[].last()`, `[].first()`.

## 1.40.0

### What changed?

The default value for the `DB_POSTGRESDB_USER` environment variable was switched from `root` to `postgres`.

### When is action necessary?

If your Postgres connection is relying on the old default value `root` for the `DB_POSTGRESDB_USER` environment variable, you must now explicitly set `DB_POSTGRESDB_USER` to `root` in your environment.

## 1.37.0

### What changed?

The `--file` flag for the `execute` CLI command has been removed.

### When is action necessary?

If you have scripts relying on the `--file` flag for the `execute` CLI command, update them to first import the workflow and then execute it using the `--id` flag.

## 1.32.0

### What changed?

n8n auth cookie has `Secure` flag set by default now.

### When is action necessary?

If you are running n8n without HTTP**S** on a domain other than `localhost`, you need to either setup HTTPS, or you can disable the secure flag by setting the env variable `N8N_SECURE_COOKIE` to `false`.

## 1.27.0

### What changed?

The execution mode `own` was removed.
If `EXECUTIONS_PROCESS` is set to `main` or if `executions.process` in a config file is set to `main` n8n will print a warning, but start up normally.
If `EXECUTIONS_PROCESS` is set to `own` or if `executions.process` in a config file is set to `own` n8n will print an error message and refuse to start up.

### When is action necessary?

If you use `own` mode and need the isolation and performance gains, please consider using queue mode instead, otherwise switch to main mode by removing the environment variable or config field.
If you have the environment variable `EXECUTIONS_PROCESS` or the config field `executions.process` set, please remove them. The environment variable has no effect anymore and the configuration field will be removed in future releases, prevent n8n from starting if it is still set.

## 1.25.0

### What changed?

If the `N8N_ENCRYPTION_KEY` environment variable on a main instance does not match the `encryptionKey` in the config file, the main instance will not initialize. If the `N8N_ENCRYPTION_KEY` environment variable is missing on a worker, the worker will not initialize.

### When is action necessary?

If passing an `N8N_ENCRYPTION_KEY` environment variable to the main instance, make sure it matches the `encryptionKey` in the config file. If you are using workers, pass the `N8N_ENCRYPTION_KEY` environment variable to them.

## 1.24.0

### What changed?

The flag `N8N_CACHE_ENABLED` was removed. The cache is now always enabled.

Additionally, expressions in credentials now follow the paired item, so if you have multiple input items, n8n will try to pair the matching row to fill in the credential details.

In the Monday.com Node, due to API changes, the data structure of entries in `column_values` array has changed

### When is action necessary?

If you are using the flag `N8N_CACHE_ENABLED`, remove it from your settings.

In regards to credentials, if you use expression in credentials, you might want to revisit them. Previously, n8n would stick to the first item only, but now it will try to match the proper paired item.

If you are using the Monday.com node and refering to `column_values` property, check in table below if you are using any of the affected properties of its entries.

| Resource   | Operation           | Previous        | New                 |
| ---------- | ------------------- | --------------- | ------------------- |
| Board      | Get                 | owner           | owners              |
| Board      | Get All             | owner           | owners              |
| Board Item | Get                 | title           | column.title        |
| Board Item | Get All             | title           | column.title        |
| Board Item | Get By Column Value | title           | column.title        |
| Board Item | Get                 | additional_info | column.settings_str |
| Board Item | Get All             | additional_info | column.settings_str |
| Board Item | Get By Column Value | additional_info | column.settings_str |

\\*column.settings_str is not a complete equivalent additional_info

## 1.22.0

### What changed?

Hash algorithm `ripemd160` is dropped from `.hash()` expressions.
`sha3` hash algorithm now returns a valid sha3-512 has, unlike the previous implementation that returned a `Keccak` hash instead.

### When is action necessary?

If you are using `.hash` helpers in expressions with hash algorithm `ripemd160`, you need to switch to one of the other supported algorithms.

## 1.15.0

### What changed?

Until now, in main mode, n8n used to deregister webhooks at shutdown and reregister them at startup. Queue mode and the flag `N8N_SKIP_WEBHOOK_DEREGISTRATION_SHUTDOWN` skipped webhook deregistration.

As from now, in both main and queue modes, n8n no longer deregisters webhooks at startup and shutdown, and the flag `N8N_SKIP_WEBHOOK_DEREGISTRATION_SHUTDOWN` is removed. n8n assumes that third-party services will retry unhandled webhook requests.

### When is action necessary?

If using the flag `N8N_SKIP_WEBHOOK_DEREGISTRATION_SHUTDOWN`, note that it no longer has effect and can be removed from your settings.

## 1.9.0

### What changed?

In nodes, `this.helpers.getBinaryStream()` is now async.

### When is action necessary?

If your node uses `this.helpers.getBinaryStream()`, add `await` when calling it.

Example:

```typescript
const binaryStream = this.helpers.getBinaryStream(id); // until 1.9.0
const binaryStream = await this.helpers.getBinaryStream(id); // since 1.9.0
```

### What changed?

The env vars `N8N_BINARY_DATA_TTL` and `EXECUTIONS_DATA_PRUNE_TIMEOUT` no longer have any effect and can be safely removed. Instead of relying on a TTL system for binary data, n8n currently cleans up binary data together with executions during pruning.

### When is action necessary?

If using these flags, remove them from your settings and be mindful of the new behavior.

## 1.6.0

### What changed?

The env var `N8N_PERSISTED_BINARY_DATA_TTL` no longer has any effect and can be removed. This legacy flag was originally introduced to support ephemeral executions (see [details](https://github.com/n8n-io/n8n/pull/7046)), which are no longer supported.

### When is action necessary?

If using this flag, remove it from your settings.

## 1.5.0

### What changed?

In the Code node, `console.log` does not output to stdout by default.

### When is action necessary?

If you were relying on `console.log` for non-manual executions of a Code node, you need to set the env variable `CODE_ENABLE_STDOUT` to `true` to send Code node logs to process's stdout.

## 1.2.0

### What changed?

For the Linear node, priority in issue creation is `4` (previously incorrectly `3`) for `Low`.

### When is action necessary?

If you were using `Low`, you were setting a priority of `Normal`, so please double check you are setting the priority you intend.

## 1.0.0

### What changed?

The minimum Node.js version required for n8n is now v18.

### When is action necessary?

If you're using n8n via npm or PM2 or if you're contributing to n8n.

### How to upgrade:

Update the Node.js version to v18 or above.

## 0.234.0

### What changed?

This release

---

Source: [Claudary](https://claudary.paisolsolutions.com/skills/breaking-changes) · https://claudary.paisolsolutions.com
