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.
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 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?
- The worker server used to bind to IPv6 by default. It now binds to IPv4 by default.
- The worker server's
/healthzused 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?
- 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. - If you are relying on database and Redis checks for worker health status, switch to checking
/healthz/readinessinstead 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 HTTPS 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:
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), 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