Versioning
n8n supports node versioning. You can make changes to existing nodes without breaking the existing behavior by introducing a new version.
Be aware of how n8n decides which node version to load:
If a user builds and saves a workflow using version 1, n8n continues to use version 1 in that workflow, even if you create and publish a version 2 of the node.
When a user creates a new workflow and browses for nodes, n8n always loads the latest version of the node.
Light versioning
This is available for all node types.
One node can contain more than one version, allowing small version increments without code duplication. To use this feature:
Change the main
versionparameter to an array, and add your version numbers, including your existing version.You can then access the version parameter with
@versionin yourdisplayOptionsin any object (to control which versions n8n displays the object with). You can also query the version from a function usingconst nodeVersion = this.getNode().typeVersion;.
As an example, say you want to add versioning to the NasaPics node from the Declarative node tutorial, then configure a resource so that n8n only displays it in version 2 of the node. In your base NasaPics.node.ts file:
{
displayName: 'NASA Pics',
name: 'NasaPics',
icon: 'file:nasapics.svg',
// List the available versions
version: [1,2,3],
// More basic parameters here
properties: [
// Add a resource that's only displayed for version2
{
displayName: 'Resource name',
// More resource parameters
displayOptions: {
show: {
'@version': 2,
},
},
},
],
}Feature-based versioning
Feature flags let you control parameter visibility and execution logic based on named features tied to node versions.
Defining features
Add a features object to your node type description. Each feature uses @version conditions to specify which versions enable it:
Available conditions: gte, lte, gt, lt. Pass a plain version number to match a specific version.
Using @feature in displayOptions
Use @feature in displayOptions to control parameter visibility based on feature flags:
To show a parameter when a feature is not enabled, use the condition syntax:
You can combine @feature with other display conditions:
Checking features in code
Use this.isNodeFeatureEnabled() in execution contexts (such as IExecuteFunctions or IWebhookFunctions):
Full versioning
This isn't available for declarative-style nodes.
As an example, refer to the Mattermost node.
Full versioning summary:
The base node file should extend
NodeVersionedTypeinstead ofINodeType.The base node file should contain a description including the
defaultVersion(usually the latest), other basic node metadata such as name, and a list of versions. It shouldn't contain any node functionality.n8n recommends using
v1,v2, and so on, for version folder names.
Related resources
Last updated
Was this helpful?