Include Nodes (whitelist) [GOT CREATED]

Background

I run an n8n instance via Docker in a closed network enclave with a small team of developers.

We have no access to the outside internet whatsoever but find the base node blocks and workflow system extremely useful for our day to day internal network wrangling activities. My team makes heavy use of the Execute Command/Workflow, Function, Request, and other general helper nodes, and we have developed a few of our own nodes to com with our internal/private API’s.

Problem

Currently, we are drowning in all the extra API nodes. The available options are overwhelming, and we stick to the filter most of the time.

I setup the config.json file to exclude some of the extra nodes we don’t use, but this is incredibly tedious to update every time I want to merge in the latest n8n changes.

I want to keep our version up to date, get all of the latest and greatest code, but every few months more and more changes are just extra nodes.

Proposed Solution

As a user/site admin, I would like to curate a list of the 20 or so helpful nodes we actually use.

This could be achieved with an ‘include’ (whitelist) option for nodes in the config.json file.

My current config.json looks like this:

// Configuration methods | n8n Docs
// https://github.com/n8n-io/n8n/blob/master/packages/cli/config/index.ts

{
“nodes”: {
“exclude”: “["n8n-nodes-base.activeCampaign","n8n-nodes-base.activeCampaignTrigger","n8n-nodes-base.affinityTrigger","n8n-nodes-base.agileCrm","n8n-nodes-base.airtable","n8n-nodes-base.acuityScheduling","n8n-nodes-base.acuitySchedulingTrigger","n8n-nodes-base.amqp","n8n-nodes-base.amqpTrigger","n8n-nodes-base.asana","n8n-nodes-base.asanaTrigger","n8n-nodes-base.affinity","n8n-nodes-base.automizy","n8n-nodes-base.aws","n8n-nodes-base.awsLambda","n8n-nodes-base.awsRekognition","n8n-nodes-base.awsS3","n8n-nodes-base.awsSes","n8n-nodes-base.awsSns","n8n-nodes-base.awsSnsTrigger","n8n-nodes-base.bannerbear","n8n-nodes-base.bitbucket","n8n-nodes-base.bitbucketTrigger","n8n-nodes-base.bitly","n8n-nodes-base.box","n8n-nodes-base.boxTrigger","n8n-nodes-base.calendly","n8n-nodes-base.calendlyTrigger","n8n-nodes-base.chargebee","n8n-nodes-base.chargebeeTrigger","n8n-nodes-base.circleCi","n8n-nodes-base.clearbit","n8n-nodes-base.clickUp","n8n-nodes-base.clickUpTrigger","n8n-nodes-base.clockify","n8n-nodes-base.clockifyTrigger","n8n-nodes-base.cockpit","n8n-nodes-base.coda","n8n-nodes-base.coinGecko","n8n-nodes-base.contentful","n8n-nodes-base.convertKit","n8n-nodes-base.convertKitTrigger","n8n-nodes-base.copper","n8n-nodes-base.copperTrigger","n8n-nodes-base.crateDb","n8n-nodes-base.crypto","n8n-nodes-base.customerIo","n8n-nodes-base.customerIoTrigger","n8n-nodes-base.discord","n8n-nodes-base.disqus","n8n-nodes-base.drift","n8n-nodes-base.dropbox","n8n-nodes-base.editImage","n8n-nodes-base.emailReadImap","n8n-nodes-base.emailSend","n8n-nodes-base.errorTrigger","n8n-nodes-base.eventbrite","n8n-nodes-base.eventbriteTrigger","n8n-nodes-base.facebook","n8n-nodes-base.facebookGraphApi","n8n-nodes-base.filemaker","n8n-nodes-base.freshdesk","n8n-nodes-base.flow","n8n-nodes-base.flowTrigger","n8n-nodes-base.getResponse","n8n-nodes-base.github","n8n-nodes-base.githubTrigger","n8n-nodes-base.gitlab","n8n-nodes-base.gitlabTrigger","n8n-nodes-base.gmail","n8n-nodes-base.google","n8n-nodes-base.googleBooks","n8n-nodes-base.googleCalendar","n8n-nodes-base.googleCloudNaturalLanguage","n8n-nodes-base.googleContacts","n8n-nodes-base.googleDrive","n8n-nodes-base.googleFirebaseCloudFirestore","n8n-nodes-base.googleFirebaseRealtimeDatabase","n8n-nodes-base.googleSheets","n8n-nodes-base.googleTasks","n8n-nodes-base.googleTranslate","n8n-nodes-base.gotify","n8n-nodes-base.graphql","n8n-nodes-base.gSuiteAdmin","n8n-nodes-base.gumroad","n8n-nodes-base.gumroadTrigger","n8n-nodes-base.hackerNews","n8n-nodes-base.harvest","n8n-nodes-base.helpScout","n8n-nodes-base.helpScoutTrigger","n8n-nodes-base.htmlExtract","n8n-nodes-base.hubspot","n8n-nodes-base.hubspotTrigger","n8n-nodes-base.humanticAi","n8n-nodes-base.hunter","n8n-nodes-base.intercom","n8n-nodes-base.invoiceNinja","n8n-nodes-base.invoiceNinjaTrigger","n8n-nodes-base.jira","n8n-nodes-base.jiraTrigger","n8n-nodes-base.jotForm","n8n-nodes-base.jotFormTrigger","n8n-nodes-base.kafka","n8n-nodes-base.keap","n8n-nodes-base.keapTrigger","n8n-nodes-base.line","n8n-nodes-base.lingvaNex","n8n-nodes-base.linkedIn","n8n-nodes-base.linkFish","n8n-nodes-base.mailchimp","n8n-nodes-base.mailchimpTrigger","n8n-nodes-base.mailerLite","n8n-nodes-base.mailgun","n8n-nodes-base.mailjet","n8n-nodes-base.mailjetTrigger","n8n-nodes-base.mandrill","n8n-nodes-base.matrix","n8n-nodes-base.mattermost","n8n-nodes-base.mautic","n8n-nodes-base.mauticTrigger","n8n-nodes-base.medium","n8n-nodes-base.messageBird","n8n-nodes-base.microsoft","n8n-nodes-base.microsoftExcel","n8n-nodes-base.microsoftOneDrive","n8n-nodes-base.microsoftSql","n8n-nodes-base.microsoftTeams","n8n-nodes-base.mindee","n8n-nodes-base.mocean","n8n-nodes-base.mondayCom","n8n-nodes-base.mongoDb","n8n-nodes-base.mQTT","n8n-nodes-base.mqttTrigger","n8n-nodes-base.msg91","n8n-nodes-base.mySql","n8n-nodes-base.nextCloud","n8n-nodes-base.openThesaurus","n8n-nodes-base.openWeatherMap","n8n-nodes-base.orbit","n8n-nodes-base.paddle","n8n-nodes-base.pagerDuty","n8n-nodes-base.payPal","n8n-nodes-base.payPalTrigger","n8n-nodes-base.pipedrive","n8n-nodes-base.pipedriveTrigger","n8n-nodes-base.postgres","n8n-nodes-base.postmark","n8n-nodes-base.postmarkTrigger","n8n-nodes-base.profitWell","n8n-nodes-base.pushBullet","n8n-nodes-base.pushover","n8n-nodes-base.philipsHue","n8n-nodes-base.questDb","n8n-nodes-base.quickbase","n8n-nodes-base.redis","n8n-nodes-base.rocketchat","n8n-nodes-base.rssFeedRead","n8n-nodes-base.rundeck","n8n-nodes-base.s3","n8n-nodes-base.salesforce","n8n-nodes-base.sendy","n8n-nodes-base.sentryIo","n8n-nodes-base.shopify","n8n-nodes-base.shopifyTrigger","n8n-nodes-base.signl4","n8n-nodes-base.slack","n8n-nodes-base.sms77","n8n-nodes-base.spontit","n8n-nodes-base.spotify","n8n-nodes-base.sseTrigger","n8n-nodes-base.storyblok","n8n-nodes-base.strapi","n8n-nodes-base.strava","n8n-nodes-base.stravaTrigger","n8n-nodes-base.stripe","n8n-nodes-base.stripeTrigger","n8n-nodes-base.switch","n8n-nodes-base.salesmate","n8n-nodes-base.segment","n8n-nodes-base.surveyMonkey","n8n-nodes-base.surveyMonkeyTrigger","n8n-nodes-base.taiga","n8n-nodes-base.taigaTrigger","n8n-nodes-base.telegram","n8n-nodes-base.telegramTrigger","n8n-nodes-base.todoist","n8n-nodes-base.toggl","n8n-nodes-base.togglTrigger","n8n-nodes-base.travisCi","n8n-nodes-base.trello","n8n-nodes-base.trelloTrigger","n8n-nodes-base.twilio","n8n-nodes-base.twitter","n8n-nodes-base.typeform","n8n-nodes-base.typeformTrigger","n8n-nodes-base.twake","n8n-nodes-base.unleashedSoftware","n8n-nodes-base.uplead","n8n-nodes-base.vero","n8n-nodes-base.vonage","n8n-nodes-base.webflow","n8n-nodes-base.wekan","n8n-nodes-base.webflowTrigger","n8n-nodes-base.wordpress","n8n-nodes-base.wooCommerce","n8n-nodes-base.wooCommerceTrigger","n8n-nodes-base.wufoo","n8n-nodes-base.wufooTrigger","n8n-nodes-base.xero","n8n-nodes-base.youTube","n8n-nodes-base.zendesk","n8n-nodes-base.zendeskTrigger","n8n-nodes-base.zoho","n8n-nodes-base.zohoCrm","n8n-nodes-base.zoom","n8n-nodes-base.zulip"]”
}
}

1 Like

Excellent idea! We are also in the same boat - our users get overwhelmed with the amount of nodes available so we update our EXCLUDE list to remove any nodes that would never need to be used in our environment and it’s a very long statement (like the one you posted above). Not to mention the amount of time required to track down the proper “name” of the node to exclude.

Yes, that makes sense. We can have a look.

1 Like

Created that functionality. Is now possible to define NODES_INCLUDE.

Will be released with the next version. I will update here once it got released.

3 Likes

We just released [email protected] which includes the NODES_INCLUDE functionality.

2 Likes

Pulling now. Thank You!

Hey @Ryan_Baxter, we’ve also updated the documentation for that here: Configuration | Docs :slight_smile:

2 Likes

You guys are awesome! Thanks for the quick turn around, this works great!

“include”: “["n8n-nodes-base.cron","n8n-nodes-base.crypto","n8n-nodes-base.dateTime","n8n-nodes-base.executeCommand","n8n-nodes-base.executeWorkflow","n8n-nodes-base.ftp","n8n-nodes-base.function","n8n-nodes-base.functionItem","n8n-nodes-base.httpRequest","n8n-nodes-base.if","n8n-nodes-base.interval","n8n-nodes-base.merge","n8n-nodes-base.moveBinaryData","n8n-nodes-base.noOp","n8n-nodes-base.readBinaryFile","n8n-nodes-base.readBinaryFiles","n8n-nodes-base.readPDF","n8n-nodes-base.renameKeys","n8n-nodes-base.runAt","n8n-nodes-base.set","n8n-nodes-base.splitInBatches","n8n-nodes-base.spreadsheetFile","n8n-nodes-base.start","n8n-nodes-base.switch","n8n-nodes-base.webhook","n8n-nodes-base.writeBinaryFile","n8n-nodes-base.xml"]”

2 Likes

Great to hear! Have fun!

2 Likes

Ditto to Ryan’s comments - appreciate the excellent customer support and turnaround time on these features that you add. Thank you!!

2 Likes

Thank you very much! Could see how important this feature is for these use cases and knew it was fast to implement. So more than happy to jump on such things directly.

1 Like