@n8n-as-code/skills 2.0.0-next.117 → 2.0.0-next.119

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,18 +1,18 @@
1
1
  {
2
- "generatedAt": "2026-05-05T21:30:24.454Z",
2
+ "generatedAt": "2026-05-05T22:09:14.387Z",
3
3
  "version": "1.0.0",
4
4
  "sourceUrl": "https://docs.n8n.io/llms.txt",
5
5
  "totalPages": 1272,
6
6
  "statistics": {
7
7
  "byCategory": {
8
- "other": 513,
8
+ "other": 514,
9
9
  "tutorials": 27,
10
10
  "advanced-ai": 28,
11
11
  "api": 6,
12
12
  "code": 20,
13
13
  "data": 38,
14
14
  "flow-logic": 8,
15
- "hosting": 86,
15
+ "hosting": 85,
16
16
  "integrations": 308,
17
17
  "cluster-nodes": 104,
18
18
  "trigger-nodes": 107,
@@ -21,12 +21,12 @@
21
21
  },
22
22
  "withNodeNames": 471,
23
23
  "withUseCases": 39,
24
- "withCodeExamples": 181
24
+ "withCodeExamples": 180
25
25
  },
26
26
  "categories": {
27
27
  "other": {
28
28
  "description": "General documentation and guides",
29
- "totalPages": 513,
29
+ "totalPages": 514,
30
30
  "pages": [
31
31
  "page-0001",
32
32
  "page-0002",
@@ -35,6 +35,7 @@
35
35
  "page-0005",
36
36
  "page-0006",
37
37
  "page-0007",
38
+ "page-0008",
38
39
  "page-0009",
39
40
  "page-0010",
40
41
  "page-0011",
@@ -708,7 +709,7 @@
708
709
  },
709
710
  "hosting": {
710
711
  "description": "Self-hosting, deployment, and infrastructure",
711
- "totalPages": 86,
712
+ "totalPages": 85,
712
713
  "pages": [
713
714
  "page-0145",
714
715
  "page-0146",
@@ -718,7 +719,6 @@
718
719
  "page-0150",
719
720
  "page-0151",
720
721
  "page-0152",
721
- "page-0153",
722
722
  "page-0154",
723
723
  "page-0155",
724
724
  "page-0156",
@@ -2307,6 +2307,107 @@
2307
2307
  ]
2308
2308
  }
2309
2309
  },
2310
+ {
2311
+ "id": "page-0008",
2312
+ "title": "Keyboard shortcuts",
2313
+ "url": "https://docs.n8n.io/keyboard-shortcuts/index.md",
2314
+ "urlPath": "keyboard-shortcuts/index.md",
2315
+ "category": "other",
2316
+ "subcategory": null,
2317
+ "nodeName": null,
2318
+ "nodeType": null,
2319
+ "content": {
2320
+ "markdown": "# Keyboard shortcuts and controls\n\nn8n provides keyboard shortcuts for some actions.\n\n## Workflow controls\n\n- **Ctrl** + **Alt** + **n**: create new workflow\n- **Ctrl** + **o**: open workflow\n- **Ctrl** + **s**: save the current workflow\n- **Ctrl** + **z**: undo\n- **Ctrl** + **shift** + **z**: redo\n- **Ctrl** + **Enter**: execute workflow\n\n## Canvas\n\n### Move the canvas\n\n- **Ctrl** + **Left Mouse Button** + drag: move node view\n- **Ctrl** + **Middle mouse button** + drag: move node view\n- **Space** + drag: move node view\n- **Middle mouse button** + drag: move node view\n- Two fingers on a touch screen: move node view\n\n### Canvas zoom\n\n- **+** or **=**: zoom in\n- **-** or **\\_**: zoom out\n- **0**: reset zoom level\n- **1**: zoom to fit workflow\n- **Ctrl** + **Mouse wheel**: zoom in/out\n\n### Nodes on the canvas\n\n- **Double click** on a node: open the node details\n- **Ctrl/Cmd** + **Double click** on a sub-workflow node: open the sub-workflow in a new tab\n- **Ctrl** + **a**: select all nodes\n- **Ctrl** + **v**: paste nodes\n- **Shift** + **s**: add sticky note\n\n### With one or more nodes selected in canvas\n\n- **ArrowDown**: select sibling node below the current one\n- **ArrowLeft**: select node left of the current one\n- **ArrowRight**: select node right of the current one\n- **ArrowUp**: select sibling node above the current one\n- **Ctrl** + **c**: copy\n- **Ctrl** + **x**: cut\n- **D**: deactivate\n- **Delete**: delete\n- **Enter**: open\n- **F2**: rename\n- **P**: pin data in node. Refer to [Data pinning](../data/data-pinning/) for more information.\n- **Shift** + **ArrowLeft**: select all nodes left of the current one\n- **Shift** + **ArrowRight**: select all nodes right of the current one\n- **Ctrl/Cmd** + **Shift** + **o** on a sub-workflow node: open the sub-workflow in a new tab\n\n## Node panel\n\n- **N**: open the Node Panel\n- **Enter**: insert selected node into workflow\n- **Escape**: close Node panel\n\n### Node panel categories\n\n- **Enter**: insert node into workflow, collapse/expand category, open subcategory\n- **ArrowRight**: expand category, open subcategory\n- **ArrowLeft**: collapse category, close subcategory view\n\n## Within nodes\n\n- **=**: in an empty parameter input, this switches to [expressions](../glossary/#expression-n8n) mode.\n\n## Command bar\n\nThe Command Bar provides quick access to actions and navigation throughout n8n. Access it using **Ctrl/Cmd + K**, or click the magnifying glass icon on the canvas. Commands adapt based on your current view and permissions.\n\n- **Workflow actions:** Add nodes, save, test, tidy up, publish/unpublish, duplicate, import/export, archive, delete\n- **Resource navigation:** Create and open workflows, credentials, data tables, projects; access recent resources\n- **Execution actions:** Debug, copy, retry, stop, or delete executions\n- **General navigation:** Access Templates, Variables, Insights, Settings, Help resources, and Documentation\n",
2321
+ "excerpt": "# Keyboard shortcuts and controls n8n provides keyboard shortcuts for some actions. ## Workflow controls - **Ctrl** + **Alt** + **n**: create new workflow - **Ctrl** + **o**: open workflow - **Ctrl** + **s**: save the current workflow - **Ctrl** + **z**: undo - **Ctrl** + **shift** + **z**: redo - **Ctrl** + **Enter**: execute workflow ## Canvas ### Move the canvas - **Ctrl** + **Left Mouse Button** + drag: move node view - **Ctrl** + **Middle mouse button** + drag: move node view - **Spac...",
2322
+ "sections": [
2323
+ {
2324
+ "title": "Keyboard shortcuts and controls",
2325
+ "level": 1,
2326
+ "content": "n8n provides keyboard shortcuts for some actions."
2327
+ }
2328
+ ]
2329
+ },
2330
+ "metadata": {
2331
+ "keywords": [
2332
+ "keyboard",
2333
+ "shortcuts",
2334
+ "controls",
2335
+ "workflow",
2336
+ "canvas",
2337
+ "move",
2338
+ "zoom",
2339
+ "nodes",
2340
+ "with",
2341
+ "more",
2342
+ "selected",
2343
+ "node",
2344
+ "panel",
2345
+ "categories",
2346
+ "within",
2347
+ "command"
2348
+ ],
2349
+ "useCases": [],
2350
+ "operations": [
2351
+ "** add nodes",
2352
+ "save",
2353
+ "test",
2354
+ "tidy up",
2355
+ "publish",
2356
+ "unpublish",
2357
+ "duplicate",
2358
+ "import",
2359
+ "export",
2360
+ "archive",
2361
+ "delete",
2362
+ "** debug",
2363
+ "copy",
2364
+ "retry",
2365
+ "stop",
2366
+ "or delete executions"
2367
+ ],
2368
+ "codeExamples": 0,
2369
+ "complexity": "beginner",
2370
+ "readingTime": "3 min",
2371
+ "contentLength": 2921,
2372
+ "relatedPages": []
2373
+ },
2374
+ "searchIndex": {
2375
+ "fullText": "keyboard shortcuts # keyboard shortcuts and controls\n\nn8n provides keyboard shortcuts for some actions.\n\n## workflow controls\n\n- **ctrl** + **alt** + **n**: create new workflow\n- **ctrl** + **o**: open workflow\n- **ctrl** + **s**: save the current workflow\n- **ctrl** + **z**: undo\n- **ctrl** + **shift** + **z**: redo\n- **ctrl** + **enter**: execute workflow\n\n## canvas\n\n### move the canvas\n\n- **ctrl** + **left mouse button** + drag: move node view\n- **ctrl** + **middle mouse button** + drag: move node view\n- **space** + drag: move node view\n- **middle mouse button** + drag: move node view\n- two fingers on a touch screen: move node view\n\n### canvas zoom\n\n- **+** or **=**: zoom in\n- **-** or **\\_**: zoom out\n- **0**: reset zoom level\n- **1**: zoom to fit workflow\n- **ctrl** + **mouse wheel**: zoom in/out\n\n### nodes on the canvas\n\n- **double click** on a node: open the node details\n- **ctrl/cmd** + **double click** on a sub-workflow node: open the sub-workflow in a new tab\n- **ctrl** + **a**: select all nodes\n- **ctrl** + **v**: paste nodes\n- **shift** + **s**: add sticky note\n\n### with one or more nodes selected in canvas\n\n- **arrowdown**: select sibling node below the current one\n- **arrowleft**: select node left of the current one\n- **arrowright**: select node right of the current one\n- **arrowup**: select sibling node above the current one\n- **ctrl** + **c**: copy\n- **ctrl** + **x**: cut\n- **d**: deactivate\n- **delete**: delete\n- **enter**: open\n- **f2**: rename\n- **p**: pin data in node. refer to [data pinning](../data/data-pinning/) for more information.\n- **shift** + **arrowleft**: select all nodes left of the current one\n- **shift** + **arrowright**: select all nodes right of the current one\n- **ctrl/cmd** + **shift** + **o** on a sub-workflow node: open the sub-workflow in a new tab\n\n## node panel\n\n- **n**: open the node panel\n- **enter**: insert selected node into workflow\n- **escape**: close node panel\n\n### node panel categories\n\n- **enter**: insert node into workflow, collapse/expand category, open subcategory\n- **arrowright**: expand category, open subcategory\n- **arrowleft**: collapse category, close subcategory view\n\n## within nodes\n\n- **=**: in an empty parameter input, this switches to [expressions](../glossary/#expression-n8n) mode.\n\n## command bar\n\nthe command bar provides quick access to actions and navigation throughout n8n. access it using **ctrl/cmd + k**, or click the magnifying glass icon on the canvas. commands adapt based on your current view and permissions.\n\n- **workflow actions:** add nodes, save, test, tidy up, publish/unpublish, duplicate, import/export, archive, delete\n- **resource navigation:** create and open workflows, credentials, data tables, projects; access recent resources\n- **execution actions:** debug, copy, retry, stop, or delete executions\n- **general navigation:** access templates, variables, insights, settings, help resources, and documentation\n keyboard shortcuts and controls",
2376
+ "importantTerms": [
2377
+ "node",
2378
+ "ctrl",
2379
+ "workflow",
2380
+ "open",
2381
+ "current",
2382
+ "nodes",
2383
+ "view",
2384
+ "select",
2385
+ "canvas",
2386
+ "move",
2387
+ "zoom",
2388
+ "shift",
2389
+ "data",
2390
+ "keyboard",
2391
+ "shortcuts",
2392
+ "actions",
2393
+ "enter",
2394
+ "mouse",
2395
+ "drag",
2396
+ "delete",
2397
+ "panel",
2398
+ "access",
2399
+ "controls",
2400
+ "left",
2401
+ "button",
2402
+ "click",
2403
+ "arrowleft",
2404
+ "arrowright",
2405
+ "category",
2406
+ "subcategory",
2407
+ "navigation"
2408
+ ]
2409
+ }
2410
+ },
2310
2411
  {
2311
2412
  "id": "page-0009",
2312
2413
  "title": "Learning path",
@@ -13433,13 +13534,18 @@
13433
13534
  "nodeName": null,
13434
13535
  "nodeType": null,
13435
13536
  "content": {
13436
- "markdown": "# External hooks\n\nExternal hooks let you run custom code whenever n8n performs a specific operation. Use them to log data, change data, or forbid an action by throwing an error.\n\nThere are two types:\n\n- **Backend hooks**: run server-side, registered using the `EXTERNAL_HOOK_FILES` environment variable.\n- **Frontend hooks**: run in the browser, loaded with a script tag.\n\nFor the environment variables used to register hooks, refer to [External hooks environment variables](../environment-variables/external-hooks/).\n\n## Backend hooks\n\n### Available hooks\n\n| Hook | Arguments | Description |\n| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |\n| `credentials.create` | `[credentialData: ICredentialsDb]` | Called before new credentials get created. Use to restrict the number of credentials. |\n| `credentials.delete` | `[id: credentialId]` | Called before credentials get deleted. |\n| `credentials.update` | `[credentialData: ICredentialsDb]` | Called before n8n saves existing credentials. |\n| `frontend.settings` | `[frontendSettings: IN8nUISettings]` | Gets called on n8n startup. Allows you to, for example, overwrite frontend data like the displayed OAuth URL. |\n| `n8n.ready` | `[app: App]` | Called once n8n is ready. Use to, for example, register custom API endpoints. |\n| `n8n.stop` | | Called when an n8n process gets stopped. Allows you to save some process data. |\n| `oauth1.authenticate` | `[oAuthOptions: clientOAuth1.Options, oauthRequestData: {oauth_callback: string}]` | Called before an OAuth1 authentication. Use to overwrite an OAuth callback URL. |\n| `oauth2.callback` | `[oAuth2Parameters: {clientId: string, clientSecret: string \\| undefined, accessTokenUri: string, authorizationUri: string, redirectUri: string, scopes: string[]}]` | Called in an OAuth2 callback. Use to overwrite an OAuth callback URL. |\n| `workflow.activate` | `[workflowData: IWorkflowDb]` | Called before a workflow gets activated. Use to restrict the number of active workflows. |\n| `workflow.afterCreate` | `[workflowId: string]` | Called after a workflow gets created. |\n| `workflow.afterDelete` | `[workflowId: string]` | Called after a workflow gets deleted. |\n| `workflow.afterUpdate` | `[workflowData: IWorkflowBase]` | Called after an existing workflow gets saved. |\n| `workflow.create` | `[workflowData: IWorkflowBase]` | Called before a workflow gets created. Use to restrict the number of saved workflows. |\n| `workflow.delete` | `[workflowId: string]` | Called before a workflow gets deleted. |\n| `workflow.postExecute` | `[run: IRun, workflowData: IWorkflowBase]` | Called after a workflow gets executed. |\n| `workflow.preExecute` | `[workflow: Workflow: mode: WorkflowExecuteMode]` | Called before a workflow gets executed. Allows you to count or limit the number of workflow executions. |\n| `workflow.update` | `[workflowData: IWorkflowBase]` | Called before an existing workflow gets saved. |\n| `workflow.afterArchive` | `[workflowId: string]` | Called after you archive a workflow. |\n| `workflow.afterUnarchive` | `[workflowId: string]` | Called after you restore a workflow from the archive. |\n\n### Registering hooks\n\nSet hooks by registering a hook file that contains the hook functions. To register a hook, set the environment variable `EXTERNAL_HOOK_FILES`.\n\nYou can set the variable to a single file:\n\n`EXTERNAL_HOOK_FILES=/data/hook.js`\n\nOr to contain multiple files separated by a colon:\n\n`EXTERNAL_HOOK_FILES=/data/hook1.js:/data/hook2.js`\n\n### Hook files\n\nHook files are regular JavaScript files that have the following format:\n\n```\nmodule.exports = {\n \"frontend\": {\n \"settings\": [\n async function (settings) {\n settings.oauthCallbackUrls.oauth1 = 'https://n8n.example.com/oauth1/callback';\n settings.oauthCallbackUrls.oauth2 = 'https://n8n.example.com/oauth2/callback';\n }\n ]\n },\n \"workflow\": {\n \"activate\": [\n async function (workflowData) {\n const activeWorkflows = await this.dbCollections.Workflow.count({ active: true });\n\n if (activeWorkflows > 1) {\n throw new Error(\n 'Active workflow limit reached.'\n );\n }\n }\n ]\n }\n}\n```\n\n### Hook functions\n\nA hook or a hook file can contain multiple hook functions, with all functions executed one after another.\n\nIf the parameters of the hook function are objects, it's possible to change the data of that parameter to change the behavior of n8n.\n\nYou can also access the database in any hook function using `this.dbCollections` (refer to the code sample in [Hook files](#hook-files) above).\n\n## Frontend external hooks\n\nLike backend external hooks, it's possible to define external hooks in the frontend code that get executed by n8n whenever a user performs a specific operation. You can use them, for example, to log data and change data.\n\n### Available hooks\n\n| Hook | Description |\n| ------------------------------------------ | --------------------------------------------------------------------------- |\n| `credentialsEdit.credentialTypeChanged` | Called when an existing credential's type changes. |\n| `credentials.create` | Called when someone creates a new credential. |\n| `credentialsList.dialogVisibleChanged` | |\n| `dataDisplay.nodeTypeChanged` | |\n| `dataDisplay.onDocumentationUrlClick` | Called when someone selects the help documentation link. |\n| `execution.open` | Called when an existing execution opens. |\n| `executionsList.openDialog` | Called when someone selects an execution from existing Workflow Executions. |\n| `expressionEdit.itemSelected` | |\n| `expressionEdit.dialogVisibleChanged` | |\n| `nodeCreateList.filteredNodeTypesComputed` | |\n| `nodeCreateList.nodeFilterChanged` | Called when someone makes any changes to the node panel filter. |\n| `nodeCreateList.selectedTypeChanged` | |\n| `nodeCreateList.mounted` | |\n| `nodeCreateList.destroyed` | |\n| `nodeSettings.credentialSelected` | |\n| `nodeSettings.valueChanged` | |\n| `nodeView.createNodeActiveChanged` | |\n| `nodeView.addNodeButton` | |\n| `nodeView.mount` | |\n| `pushConnection.executionFinished` | |\n| `showMessage.showError` | |\n| `runData.displayModeChanged` | |\n| `workflow.activeChange` | |\n| `workflow.activeChangeCurrent` | |\n| `workflow.afterUpdate` | Called when someone updates an existing workflow. |\n| `workflow.open` | |\n| `workflowRun.runError` | |\n| `workflowRun.runWorkflow` | Called when a workflow executes. |\n| `workflowSettings.dialogVisibleChanged` | |\n| `workflowSettings.saveSettings` | Called when someone saves the settings of a workflow. |\n\n### Registering frontend hooks\n\nYou can set hooks by loading the hooks script on the page. One way to do this is by creating a hooks file in the project and adding a script tag in your `editor-ui/public/index.html` file:\n\n```\n<script src=\"frontend-hooks.js\"></script>\n```\n\n### Frontend hook files\n\nFrontend external hook files are regular JavaScript files which have the following format:\n\n```\nwindow.n8nExternalHooks = {\n nodeView: {\n mount: [\n function (store, meta) {\n // do something\n },\n ],\n createNodeActiveChanged: [\n function (store, meta) {\n // do something\n },\n function (store, meta) {\n // do something else\n },\n ],\n addNodeButton: [\n function (store, meta) {\n // do something\n },\n ],\n },\n};\n```\n\n### Frontend hook functions\n\nYou can define multiple hook functions per hook. n8n calls each hook function with the following arguments:\n\n- `store`: The Vuex store object. You can use this to change or get data from the store.\n- `metadata`: The object that contains any data provided by the hook. To see what's passed, search for the hook in the `editor-ui` package.\n",
13437
- "excerpt": "# External hooks External hooks let you run custom code whenever n8n performs a specific operation. Use them to log data, change data, or forbid an action by throwing an error. There are two types: - **Backend hooks**: run server-side, registered using the `EXTERNAL_HOOK_FILES` environment variable. - **Frontend hooks**: run in the browser, loaded with a script tag. For the environment variables used to register hooks, refer to [External hooks environment variables](../environment-variables/...",
13537
+ "markdown": "# Supported databases\n\nBy default, n8n uses SQLite to save credentials, past executions, and workflows. n8n also supports PostgresDB (only [actively maintained versions](https://www.postgresql.org/support/versioning/)).\n\n## Database type by n8n installation\n\nThe database type used varies depending on your n8n installation:\n\n### Self-hosted n8n\n\nBy default, self-hosted installations use **SQLite**. You can optionally configure PostgreSQL by setting the appropriate environment variables (see [PostgresDB configuration](#postgresdb)).\n\n### n8n Cloud\n\nn8n Cloud installations use different databases depending on your plan tier:\n\n- **SQLite**: Trial, Starter, and Pro plans, as well as legacy Enterprise plans\n- **PostgreSQL**: Enterprise Scaling plans only\n\n## Shared settings\n\nThe following environment variables get used by all databases:\n\n- `DB_TABLE_PREFIX` (default: -) - Prefix for table names\n\n## PostgresDB\n\nTo use PostgresDB as the database, you can provide the following environment variables:\n\n- `DB_TYPE=postgresdb`\n- `DB_POSTGRESDB_DATABASE` (default: 'n8n')\n- `DB_POSTGRESDB_HOST` (default: 'localhost')\n- `DB_POSTGRESDB_PORT` (default: 5432)\n- `DB_POSTGRESDB_USER` (default: 'postgres')\n- `DB_POSTGRESDB_PASSWORD` (default: empty)\n- `DB_POSTGRESDB_SCHEMA` (default: 'public')\n- `DB_POSTGRESDB_SSL_CA` (default: undefined): Path to the server's CA certificate used to validate the connection (opportunistic encryption isn't supported)\n- `DB_POSTGRESDB_SSL_CERT` (default: undefined): Path to the client's TLS certificate\n- `DB_POSTGRESDB_SSL_KEY` (default: undefined): Path to the client's private key corresponding to the certificate\n- `DB_POSTGRESDB_SSL_REJECT_UNAUTHORIZED` (default: true): If TLS connections that fail validation should be rejected\n\n```\nexport DB_TYPE=postgresdb\nexport DB_POSTGRESDB_DATABASE=n8n\nexport DB_POSTGRESDB_HOST=postgresdb\nexport DB_POSTGRESDB_PORT=5432\nexport DB_POSTGRESDB_USER=n8n\nexport DB_POSTGRESDB_PASSWORD=n8n\nexport DB_POSTGRESDB_SCHEMA=n8n\n\n# optional:\nexport DB_POSTGRESDB_SSL_CA_FILE=$(pwd)/ca.crt\nexport DB_POSTGRESDB_SSL_REJECT_UNAUTHORIZED=false\n\nn8n start\n```\n\n### Required permissions\n\nn8n needs to create and modify the schemas of the tables it uses.\n\nRecommended permissions:\n\n```\nCREATE DATABASE n8n-db;\nCREATE USER n8n-user WITH PASSWORD 'random-password';\nGRANT ALL PRIVILEGES ON DATABASE n8n-db TO n8n-user;\n```\n\n### TLS\n\nYou can choose between these configurations:\n\n- Not declaring (default): Connect with `SSL=off`\n- Declaring only the CA and unauthorized flag: Connect with `SSL=on` and verify the server's signature\n- Declaring `_{CERT,KEY}` and the above: Use the certificate and key for client TLS authentication\n\n## SQLite\n\nThis is the default database that gets used if nothing is defined.\n\nThe database file is located at: `~/.n8n/database.sqlite`\n | Called when an n8n process gets stopped. Allows you to save some process data. |\n| `oauth1.authenticate` | `[oAuthOptions: clientOAuth1.Options, oauthRequestData: {oauth_callback: string}]` | Called before an OAuth1 authentication. Use to overwrite an OAuth callback URL. |\n| `oauth2.callback` | `[oAuth2Parameters: {clientId: string, clientSecret: string \\| undefined, accessTokenUri: string, authorizationUri: string, redirectUri: string, scopes: string[]}]` | Called in an OAuth2 callback. Use to overwrite an OAuth callback URL. |\n| `workflow.activate` | `[workflowData: IWorkflowDb]` | Called before a workflow gets activated. Use to restrict the number of active workflows. |\n| `workflow.afterCreate` | `[workflowId: string]` | Called after a workflow gets created. |\n| `workflow.afterDelete` | `[workflowId: string]` | Called after a workflow gets deleted. |\n| `workflow.afterUpdate` | `[workflowData: IWorkflowBase]` | Called after an existing workflow gets saved. |\n| `workflow.create` | `[workflowData: IWorkflowBase]` | Called before a workflow gets created. Use to restrict the number of saved workflows. |\n| `workflow.delete` | `[workflowId: string]` | Called before a workflow gets deleted. |\n| `workflow.postExecute` | `[run: IRun, workflowData: IWorkflowBase]` | Called after a workflow gets executed. |\n| `workflow.preExecute` | `[workflow: Workflow: mode: WorkflowExecuteMode]` | Called before a workflow gets executed. Allows you to count or limit the number of workflow executions. |\n| `workflow.update` | `[workflowData: IWorkflowBase]` | Called before an existing workflow gets saved. |\n| `workflow.afterArchive` | `[workflowId: string]` | Called after you archive a workflow. |\n| `workflow.afterUnarchive` | `[workflowId: string]` | Called after you restore a workflow from the archive. |\n\n### Registering hooks\n\nSet hooks by registering a hook file that contains the hook functions. To register a hook, set the environment variable `EXTERNAL_HOOK_FILES`.\n\nYou can set the variable to a single file:\n\n`EXTERNAL_HOOK_FILES=/data/hook.js`\n\nOr to contain multiple files separated by a colon:\n\n`EXTERNAL_HOOK_FILES=/data/hook1.js:/data/hook2.js`\n\n### Hook files\n\nHook files are regular JavaScript files that have the following format:\n\n```\nmodule.exports = {\n \"frontend\": {\n \"settings\": [\n async function (settings) {\n settings.oauthCallbackUrls.oauth1 = 'https://n8n.example.com/oauth1/callback';\n settings.oauthCallbackUrls.oauth2 = 'https://n8n.example.com/oauth2/callback';\n }\n ]\n },\n \"workflow\": {\n \"activate\": [\n async function (workflowData) {\n const activeWorkflows = await this.dbCollections.Workflow.count({ active: true });\n\n if (activeWorkflows > 1) {\n throw new Error(\n 'Active workflow limit reached.'\n );\n }\n }\n ]\n }\n}\n```\n\n### Hook functions\n\nA hook or a hook file can contain multiple hook functions, with all functions executed one after another.\n\nIf the parameters of the hook function are objects, it's possible to change the data of that parameter to change the behavior of n8n.\n\nYou can also access the database in any hook function using `this.dbCollections` (refer to the code sample in [Hook files](#hook-files) above).\n\n## Frontend external hooks\n\nLike backend external hooks, it's possible to define external hooks in the frontend code that get executed by n8n whenever a user performs a specific operation. You can use them, for example, to log data and change data.\n\n### Available hooks\n\n| Hook | Description |\n| ------------------------------------------ | --------------------------------------------------------------------------- |\n| `credentialsEdit.credentialTypeChanged` | Called when an existing credential's type changes. |\n| `credentials.create` | Called when someone creates a new credential. |\n| `credentialsList.dialogVisibleChanged` | |\n| `dataDisplay.nodeTypeChanged` | |\n| `dataDisplay.onDocumentationUrlClick` | Called when someone selects the help documentation link. |\n| `execution.open` | Called when an existing execution opens. |\n| `executionsList.openDialog` | Called when someone selects an execution from existing Workflow Executions. |\n| `expressionEdit.itemSelected` | |\n| `expressionEdit.dialogVisibleChanged` | |\n| `nodeCreateList.filteredNodeTypesComputed` | |\n| `nodeCreateList.nodeFilterChanged` | Called when someone makes any changes to the node panel filter. |\n| `nodeCreateList.selectedTypeChanged` | |\n| `nodeCreateList.mounted` | |\n| `nodeCreateList.destroyed` | |\n| `nodeSettings.credentialSelected` | |\n| `nodeSettings.valueChanged` | |\n| `nodeView.createNodeActiveChanged` | |\n| `nodeView.addNodeButton` | |\n| `nodeView.mount` | |\n| `pushConnection.executionFinished` | |\n| `showMessage.showError` | |\n| `runData.displayModeChanged` | |\n| `workflow.activeChange` | |\n| `workflow.activeChangeCurrent` | |\n| `workflow.afterUpdate` | Called when someone updates an existing workflow. |\n| `workflow.open` | |\n| `workflowRun.runError` | |\n| `workflowRun.runWorkflow` | Called when a workflow executes. |\n| `workflowSettings.dialogVisibleChanged` | |\n| `workflowSettings.saveSettings` | Called when someone saves the settings of a workflow. |\n\n### Registering frontend hooks\n\nYou can set hooks by loading the hooks script on the page. One way to do this is by creating a hooks file in the project and adding a script tag in your `editor-ui/public/index.html` file:\n\n```\n<script src=\"frontend-hooks.js\"></script>\n```\n\n### Frontend hook files\n\nFrontend external hook files are regular JavaScript files which have the following format:\n\n```\nwindow.n8nExternalHooks = {\n nodeView: {\n mount: [\n function (store, meta) {\n // do something\n },\n ],\n createNodeActiveChanged: [\n function (store, meta) {\n // do something\n },\n function (store, meta) {\n // do something else\n },\n ],\n addNodeButton: [\n function (store, meta) {\n // do something\n },\n ],\n },\n};\n```\n\n### Frontend hook functions\n\nYou can define multiple hook functions per hook. n8n calls each hook function with the following arguments:\n\n- `store`: The Vuex store object. You can use this to change or get data from the store.\n- `metadata`: The object that contains any data provided by the hook. To see what's passed, search for the hook in the `editor-ui` package.\n",
13538
+ "excerpt": "# Supported databases By default, n8n uses SQLite to save credentials, past executions, and workflows. n8n also supports PostgresDB (only [actively maintained versions](https://www.postgresql.org/support/versioning/)). ## Database type by n8n installation The database type used varies depending on your n8n installation: ### Self-hosted n8n By default, self-hosted installations use **SQLite**. You can optionally configure PostgreSQL by setting the appropriate environment variables (see [Post...",
13438
13539
  "sections": [
13439
13540
  {
13440
- "title": "External hooks",
13541
+ "title": "Supported databases",
13542
+ "level": 1,
13543
+ "content": "By default, n8n uses SQLite to save credentials, past executions, and workflows. n8n also supports PostgresDB (only [actively maintained versions](https://www.postgresql.org/support/versioning/))."
13544
+ },
13545
+ {
13546
+ "title": "optional:",
13441
13547
  "level": 1,
13442
- "content": "External hooks let you run custom code whenever n8n performs a specific operation. Use them to log data, change data, or forbid an action by throwing an error.\n\nThere are two types:\n\n- **Backend hooks**: run server-side, registered using the `EXTERNAL_HOOK_FILES` environment variable.\n- **Frontend hooks**: run in the browser, loaded with a script tag.\n\nFor the environment variables used to register hooks, refer to [External hooks environment variables](../environment-variables/external-hooks/)."
13548
+ "content": "export DB_POSTGRESDB_SSL_CA_FILE=$(pwd)/ca.crt\nexport DB_POSTGRESDB_SSL_REJECT_UNAUTHORIZED=false\n\nn8n start\n```"
13443
13549
  }
13444
13550
  ]
13445
13551
  },
@@ -13457,143 +13563,65 @@
13457
13563
  ],
13458
13564
  "useCases": [],
13459
13565
  "operations": [],
13460
- "codeExamples": 3,
13566
+ "codeExamples": 5,
13461
13567
  "complexity": "intermediate",
13462
13568
  "readingTime": "6 min",
13463
13569
  "contentLength": 14055,
13464
13570
  "relatedPages": []
13465
13571
  },
13466
13572
  "searchIndex": {
13467
- "fullText": "external hooks # external hooks\n\nexternal hooks let you run custom code whenever n8n performs a specific operation. use them to log data, change data, or forbid an action by throwing an error.\n\nthere are two types:\n\n- **backend hooks**: run server-side, registered using the `external_hook_files` environment variable.\n- **frontend hooks**: run in the browser, loaded with a script tag.\n\nfor the environment variables used to register hooks, refer to [external hooks environment variables](../environment-variables/external-hooks/).\n\n## backend hooks\n\n### available hooks\n\n| hook | arguments | description |\n| ------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |\n| `credentials.create` | `[credentialdata: icredentialsdb]` | called before new credentials get created. use to restrict the number of credentials. |\n| `credentials.delete` | `[id: credentialid]` | called before credentials get deleted. |\n| `credentials.update` | `[credentialdata: icredentialsdb]` | called before n8n saves existing credentials. |\n| `frontend.settings` | `[frontendsettings: in8nuisettings]` | gets called on n8n startup. allows you to, for example, overwrite frontend data like the displayed oauth url. |\n| `n8n.ready` | `[app: app]` | called once n8n is ready. use to, for example, register custom api endpoints. |\n| `n8n.stop` | | called when an n8n process gets stopped. allows you to save some process data. |\n| `oauth1.authenticate` | `[oauthoptions: clientoauth1.options, oauthrequestdata: {oauth_callback: string}]` | called before an oauth1 authentication. use to overwrite an oauth callback url. |\n| `oauth2.callback` | `[oauth2parameters: {clientid: string, clientsecret: string \\| undefined, accesstokenuri: string, authorizationuri: string, redirecturi: string, scopes: string[]}]` | called in an oauth2 callback. use to overwrite an oauth callback url. |\n| `workflow.activate` | `[workflowdata: iworkflowdb]` | called before a workflow gets activated. use to restrict the number of active workflows. |\n| `workflow.aftercreate` | `[workflowid: string]` | called after a workflow gets created. |\n| `workflow.afterdelete` | `[workflowid: string]` | called after a workflow gets deleted. |\n| `workflow.afterupdate` | `[workflowdata: iworkflowbase]` | called after an existing workflow gets saved. |\n| `workflow.create` | `[workflowdata: iworkflowbase]` | called before a workflow gets created. use to restrict the number of saved workflows. |\n| `workflow.delete` | `[workflowid: string]` | called before a workflow gets deleted. |\n| `workflow.postexecute` | `[run: irun, workflowdata: iworkflowbase]` | called after a workflow gets executed. |\n| `workflow.preexecute` | `[workflow: workflow: mode: workflowexecutemode]` | called before a workflow gets executed. allows you to count or limit the number of workflow executions. |\n| `workflow.update` | `[workflowdata: iworkflowbase]` | called before an existing workflow gets saved. |\n| `workflow.afterarchive` | `[workflowid: string]` | called after you archive a workflow. |\n| `workflow.afterunarchive` | `[workflowid: string]` | called after you restore a workflow from the archive. |\n\n### registering hooks\n\nset hooks by registering a hook file that contains the hook functions. to register a hook, set the environment variable `external_hook_files`.\n\nyou can set the variable to a single file:\n\n`external_hook_files=/data/hook.js`\n\nor to contain multiple files separated by a colon:\n\n`external_hook_files=/data/hook1.js:/data/hook2.js`\n\n### hook files\n\nhook files are regular javascript files that have the following format:\n\n```\nmodule.exports = {\n \"frontend\": {\n \"settings\": [\n async function (settings) {\n settings.oauthcallbackurls.oauth1 = 'https://n8n.example.com/oauth1/callback';\n settings.oauthcallbackurls.oauth2 = 'https://n8n.example.com/oauth2/callback';\n }\n ]\n },\n \"workflow\": {\n \"activate\": [\n async function (workflowdata) {\n const activeworkflows = await this.dbcollections.workflow.count({ active: true });\n\n if (activeworkflows > 1) {\n throw new error(\n 'active workflow limit reached.'\n );\n }\n }\n ]\n }\n}\n```\n\n### hook functions\n\na hook or a hook file can contain multiple hook functions, with all functions executed one after another.\n\nif the parameters of the hook function are objects, it's possible to change the data of that parameter to change the behavior of n8n.\n\nyou can also access the database in any hook function using `this.dbcollections` (refer to the code sample in [hook files](#hook-files) above).\n\n## frontend external hooks\n\nlike backend external hooks, it's possible to define external hooks in the frontend code that get executed by n8n whenever a user performs a specific operation. you can use them, for example, to log data and change data.\n\n### available hooks\n\n| hook | description |\n| ------------------------------------------ | --------------------------------------------------------------------------- |\n| `credentialsedit.credentialtypechanged` | called when an existing credential's type changes. |\n| `credentials.create` | called when someone creates a new credential. |\n| `credentialslist.dialogvisiblechanged` | |\n| `datadisplay.nodetypechanged` | |\n| `datadisplay.ondocumentationurlclick` | called when someone selects the help documentation link. |\n| `execution.open` | called when an existing execution opens. |\n| `executionslist.opendialog` | called when someone selects an execution from e",
13573
+ "fullText": "external hooks # supported databases\n\nby default, n8n uses sqlite to save credentials, past executions, and workflows. n8n also supports postgresdb (only [actively maintained versions](https://www.postgresql.org/support/versioning/)).\n\n## database type by n8n installation\n\nthe database type used varies depending on your n8n installation:\n\n### self-hosted n8n\n\nby default, self-hosted installations use **sqlite**. you can optionally configure postgresql by setting the appropriate environment variables (see [postgresdb configuration](#postgresdb)).\n\n### n8n cloud\n\nn8n cloud installations use different databases depending on your plan tier:\n\n- **sqlite**: trial, starter, and pro plans, as well as legacy enterprise plans\n- **postgresql**: enterprise scaling plans only\n\n## shared settings\n\nthe following environment variables get used by all databases:\n\n- `db_table_prefix` (default: -) - prefix for table names\n\n## postgresdb\n\nto use postgresdb as the database, you can provide the following environment variables:\n\n- `db_type=postgresdb`\n- `db_postgresdb_database` (default: 'n8n')\n- `db_postgresdb_host` (default: 'localhost')\n- `db_postgresdb_port` (default: 5432)\n- `db_postgresdb_user` (default: 'postgres')\n- `db_postgresdb_password` (default: empty)\n- `db_postgresdb_schema` (default: 'public')\n- `db_postgresdb_ssl_ca` (default: undefined): path to the server's ca certificate used to validate the connection (opportunistic encryption isn't supported)\n- `db_postgresdb_ssl_cert` (default: undefined): path to the client's tls certificate\n- `db_postgresdb_ssl_key` (default: undefined): path to the client's private key corresponding to the certificate\n- `db_postgresdb_ssl_reject_unauthorized` (default: true): if tls connections that fail validation should be rejected\n\n```\nexport db_type=postgresdb\nexport db_postgresdb_database=n8n\nexport db_postgresdb_host=postgresdb\nexport db_postgresdb_port=5432\nexport db_postgresdb_user=n8n\nexport db_postgresdb_password=n8n\nexport db_postgresdb_schema=n8n\n\n# optional:\nexport db_postgresdb_ssl_ca_file=$(pwd)/ca.crt\nexport db_postgresdb_ssl_reject_unauthorized=false\n\nn8n start\n```\n\n### required permissions\n\nn8n needs to create and modify the schemas of the tables it uses.\n\nrecommended permissions:\n\n```\ncreate database n8n-db;\ncreate user n8n-user with password 'random-password';\ngrant all privileges on database n8n-db to n8n-user;\n```\n\n### tls\n\nyou can choose between these configurations:\n\n- not declaring (default): connect with `ssl=off`\n- declaring only the ca and unauthorized flag: connect with `ssl=on` and verify the server's signature\n- declaring `_{cert,key}` and the above: use the certificate and key for client tls authentication\n\n## sqlite\n\nthis is the default database that gets used if nothing is defined.\n\nthe database file is located at: `~/.n8n/database.sqlite`\n | called when an n8n process gets stopped. allows you to save some process data. |\n| `oauth1.authenticate` | `[oauthoptions: clientoauth1.options, oauthrequestdata: {oauth_callback: string}]` | called before an oauth1 authentication. use to overwrite an oauth callback url. |\n| `oauth2.callback` | `[oauth2parameters: {clientid: string, clientsecret: string \\| undefined, accesstokenuri: string, authorizationuri: string, redirecturi: string, scopes: string[]}]` | called in an oauth2 callback. use to overwrite an oauth callback url. |\n| `workflow.activate` | `[workflowdata: iworkflowdb]` | called before a workflow gets activated. use to restrict the number of active workflows. |\n| `workflow.aftercreate` | `[workflowid: string]` | called after a workflow gets created. |\n| `workflow.afterdelete` | `[workflowid: string]` | called after a workflow gets deleted. |\n| `workflow.afterupdate` | `[workflowdata: iworkflowbase]` | called after an existing workflow gets saved. |\n| `workflow.create` | `[workflowdata: iworkflowbase]` | called before a workflow gets created. use to restrict the number of saved workflows. |\n| `workflow.delete` | `[workflowid: string]` | called before a workflow gets deleted. |\n| `workflow.postexecute` | `[run: irun, workflowdata: iworkflowbase]` | called after a workflow gets executed. |\n| `workflow.preexecute` | `[workflow: workflow: mode: workflowexecutemode]` | called before a workflow gets executed. allows you to count or limit the number of workflow executions. |\n| `workflow.update` | `[workflowdata: iworkflowbase]` | called before an existing workflow gets saved. |\n| `workflow.afterarchive` | `[workflowid: string]` | called after you archive a workflow. |\n| `workflow.afterunarchive` | `[workflowid: string]` | called after you restore a workflow from the archive. |\n\n### registering hooks\n\nset hooks by registering a hook file that contains the hook functions. to register a hook, set the environment variable `external_hook_files`.\n\nyou can set the variable to a single file:\n\n`external_hook_files=/data/hook.js`\n\nor to contain multiple files separated by a colon:\n\n`external_hook_files=/data/hook1.js:/data/hook2.js`\n\n### hook files\n\nhook files are regular javascript files that have the following format:\n\n```\nmodule.exports = {\n \"frontend\": {\n \"settings\": [\n async function (settings) {\n settings.oauthcallbackurls.oauth1 = 'https://n8n.example.com/oauth1/callback';\n settings.oauthcallbackurls.oauth2 = 'https://n8n.example.com/oauth2/callback';\n }\n ]\n },\n \"workflow\": {\n \"activate\": [\n async function (workflowdata) {\n const activeworkflows = await this.dbcollections.workflow.count({ active: true });\n\n if (activeworkflows > 1) {\n throw new error(\n 'active workflow limit reached.'\n );\n }\n }\n ]\n }\n}\n```\n\n### hook functions\n\na hook or a hook file can contain multiple hook functions, with all functions executed one after another.\n\nif the parameters of the hook function are objects, it's possible to change the data of that parameter to change the behavior of n8n.\n\nyou can also access the database in any hook function using `this.dbcollections` (refer to the code sample in [hook files](#hook-files) above).\n\n## frontend external hooks\n\nlike backend external hooks, it's possible to define external hooks in the frontend code that get executed by n8n whenever a user performs a specific operation. you can use them, for example, to log data and change data.\n\n### available hooks\n\n| hook | description |\n| ------------------------------------------ | --------------------------------------------------------------------------- |\n| `credentialsedit.credentialtypechanged` | called when an existing credential's type changes. |\n| `credentials.create` | called when someone creates a new credential. |\n| `credentialslist.dialogvisiblechanged` | |\n| `datadisplay.nodetypechanged` | |\n| `datadisplay.ondocumentationurlclick` | called when someone selects the help documentation link. |\n| `execution.open` | called when an existing execution opens. |\n| `executionslist.opendialog` | called when someone selects an execution from e",
13468
13574
  "importantTerms": [
13469
13575
  "workflow",
13470
13576
  "called",
13471
13577
  "hook",
13578
+ "default",
13472
13579
  "hooks",
13473
- "data",
13474
13580
  "string",
13475
- "frontend",
13476
13581
  "gets",
13477
- "external",
13478
13582
  "when",
13479
- "before",
13583
+ "database",
13584
+ "export",
13585
+ "data",
13480
13586
  "files",
13481
13587
  "function",
13482
- "credentials",
13483
- "existing",
13588
+ "postgresdb",
13589
+ "frontend",
13590
+ "that",
13484
13591
  "after",
13485
13592
  "store",
13486
13593
  "settings",
13594
+ "file",
13595
+ "before",
13487
13596
  "callback",
13488
13597
  "workflowdata",
13598
+ "existing",
13489
13599
  "functions",
13490
13600
  "someone",
13491
- "change",
13492
- "environment",
13493
- "script",
13494
- "example",
13601
+ "external",
13602
+ "sqlite",
13603
+ "following",
13604
+ "create",
13605
+ "with",
13606
+ "this",
13495
13607
  "workflowid",
13496
- "file",
13497
- "that",
13498
13608
  "nodecreatelist",
13499
- "number",
13609
+ "databases",
13610
+ "used",
13611
+ "environment",
13612
+ "undefined",
13613
+ "certificate",
13614
+ "user",
13500
13615
  "iworkflowbase",
13501
13616
  "executed",
13502
- "this",
13617
+ "change",
13503
13618
  "nodeview",
13619
+ "script",
13504
13620
  "meta",
13505
13621
  "something",
13506
- "code",
13507
- "backend",
13508
- "variable",
13509
- "with",
13510
- "variables",
13511
- "register",
13512
- "create",
13513
- "created",
13514
- "restrict",
13515
- "deleted",
13516
- "allows",
13517
- "overwrite",
13518
- "oauth"
13519
- ]
13520
- }
13521
- },
13522
- {
13523
- "id": "page-0153",
13524
- "title": "Supported databases and settings",
13525
- "url": "https://docs.n8n.io/hosting/configuration/supported-databases-settings/index.md",
13526
- "urlPath": "hosting/configuration/supported-databases-settings/index.md",
13527
- "category": "hosting",
13528
- "subcategory": null,
13529
- "nodeName": null,
13530
- "nodeType": null,
13531
- "content": {
13532
- "markdown": "# Supported databases\n\nBy default, n8n uses SQLite to save credentials, past executions, and workflows. n8n also supports PostgresDB (only [actively maintained versions](https://www.postgresql.org/support/versioning/)).\n\n## Database type by n8n installation\n\nThe database type used varies depending on your n8n installation:\n\n### Self-hosted n8n\n\nBy default, self-hosted installations use **SQLite**. You can optionally configure PostgreSQL by setting the appropriate environment variables (see [PostgresDB configuration](#postgresdb)).\n\n### n8n Cloud\n\nn8n Cloud installations use different databases depending on your plan tier:\n\n- **SQLite**: Trial, Starter, and Pro plans, as well as legacy Enterprise plans\n- **PostgreSQL**: Enterprise Scaling plans only\n\n## Shared settings\n\nThe following environment variables get used by all databases:\n\n- `DB_TABLE_PREFIX` (default: -) - Prefix for table names\n\n## PostgresDB\n\nTo use PostgresDB as the database, you can provide the following environment variables:\n\n- `DB_TYPE=postgresdb`\n- `DB_POSTGRESDB_DATABASE` (default: 'n8n')\n- `DB_POSTGRESDB_HOST` (default: 'localhost')\n- `DB_POSTGRESDB_PORT` (default: 5432)\n- `DB_POSTGRESDB_USER` (default: 'postgres')\n- `DB_POSTGRESDB_PASSWORD` (default: empty)\n- `DB_POSTGRESDB_SCHEMA` (default: 'public')\n- `DB_POSTGRESDB_SSL_CA` (default: undefined): Path to the server's CA certificate used to validate the connection (opportunistic encryption isn't supported)\n- `DB_POSTGRESDB_SSL_CERT` (default: undefined): Path to the client's TLS certificate\n- `DB_POSTGRESDB_SSL_KEY` (default: undefined): Path to the client's private key corresponding to the certificate\n- `DB_POSTGRESDB_SSL_REJECT_UNAUTHORIZED` (default: true): If TLS connections that fail validation should be rejected\n\n```\nexport DB_TYPE=postgresdb\nexport DB_POSTGRESDB_DATABASE=n8n\nexport DB_POSTGRESDB_HOST=postgresdb\nexport DB_POSTGRESDB_PORT=5432\nexport DB_POSTGRESDB_USER=n8n\nexport DB_POSTGRESDB_PASSWORD=n8n\nexport DB_POSTGRESDB_SCHEMA=n8n\n\n# optional:\nexport DB_POSTGRESDB_SSL_CA_FILE=$(pwd)/ca.crt\nexport DB_POSTGRESDB_SSL_REJECT_UNAUTHORIZED=false\n\nn8n start\n```\n\n### Required permissions\n\nn8n needs to create and modify the schemas of the tables it uses.\n\nRecommended permissions:\n\n```\nCREATE DATABASE n8n-db;\nCREATE USER n8n-user WITH PASSWORD 'random-password';\nGRANT ALL PRIVILEGES ON DATABASE n8n-db TO n8n-user;\n```\n\n### TLS\n\nYou can choose between these configurations:\n\n- Not declaring (default): Connect with `SSL=off`\n- Declaring only the CA and unauthorized flag: Connect with `SSL=on` and verify the server's signature\n- Declaring `_{CERT,KEY}` and the above: Use the certificate and key for client TLS authentication\n\n## SQLite\n\nThis is the default database that gets used if nothing is defined.\n\nThe database file is located at: `~/.n8n/database.sqlite`\n",
13533
- "excerpt": "# Supported databases By default, n8n uses SQLite to save credentials, past executions, and workflows. n8n also supports PostgresDB (only [actively maintained versions](https://www.postgresql.org/support/versioning/)). ## Database type by n8n installation The database type used varies depending on your n8n installation: ### Self-hosted n8n By default, self-hosted installations use **SQLite**. You can optionally configure PostgreSQL by setting the appropriate environment variables (see [Post...",
13534
- "sections": [
13535
- {
13536
- "title": "Supported databases",
13537
- "level": 1,
13538
- "content": "By default, n8n uses SQLite to save credentials, past executions, and workflows. n8n also supports PostgresDB (only [actively maintained versions](https://www.postgresql.org/support/versioning/))."
13539
- },
13540
- {
13541
- "title": "optional:",
13542
- "level": 1,
13543
- "content": "export DB_POSTGRESDB_SSL_CA_FILE=$(pwd)/ca.crt\nexport DB_POSTGRESDB_SSL_REJECT_UNAUTHORIZED=false\n\nn8n start\n```"
13544
- }
13545
- ]
13546
- },
13547
- "metadata": {
13548
- "keywords": [
13549
- "supported",
13550
- "databases",
13551
- "settings",
13552
- "database",
13553
- "type",
13554
- "installation",
13555
- "self",
13556
- "hosted",
13557
- "cloud",
13558
- "shared",
13559
- "postgresdb",
13560
- "optional:",
13561
- "required",
13562
- "permissions",
13563
- "sqlite"
13564
- ],
13565
- "useCases": [],
13566
- "operations": [],
13567
- "codeExamples": 2,
13568
- "complexity": "beginner",
13569
- "readingTime": "2 min",
13570
- "contentLength": 2829,
13571
- "relatedPages": []
13572
- },
13573
- "searchIndex": {
13574
- "fullText": "supported databases and settings # supported databases\n\nby default, n8n uses sqlite to save credentials, past executions, and workflows. n8n also supports postgresdb (only [actively maintained versions](https://www.postgresql.org/support/versioning/)).\n\n## database type by n8n installation\n\nthe database type used varies depending on your n8n installation:\n\n### self-hosted n8n\n\nby default, self-hosted installations use **sqlite**. you can optionally configure postgresql by setting the appropriate environment variables (see [postgresdb configuration](#postgresdb)).\n\n### n8n cloud\n\nn8n cloud installations use different databases depending on your plan tier:\n\n- **sqlite**: trial, starter, and pro plans, as well as legacy enterprise plans\n- **postgresql**: enterprise scaling plans only\n\n## shared settings\n\nthe following environment variables get used by all databases:\n\n- `db_table_prefix` (default: -) - prefix for table names\n\n## postgresdb\n\nto use postgresdb as the database, you can provide the following environment variables:\n\n- `db_type=postgresdb`\n- `db_postgresdb_database` (default: 'n8n')\n- `db_postgresdb_host` (default: 'localhost')\n- `db_postgresdb_port` (default: 5432)\n- `db_postgresdb_user` (default: 'postgres')\n- `db_postgresdb_password` (default: empty)\n- `db_postgresdb_schema` (default: 'public')\n- `db_postgresdb_ssl_ca` (default: undefined): path to the server's ca certificate used to validate the connection (opportunistic encryption isn't supported)\n- `db_postgresdb_ssl_cert` (default: undefined): path to the client's tls certificate\n- `db_postgresdb_ssl_key` (default: undefined): path to the client's private key corresponding to the certificate\n- `db_postgresdb_ssl_reject_unauthorized` (default: true): if tls connections that fail validation should be rejected\n\n```\nexport db_type=postgresdb\nexport db_postgresdb_database=n8n\nexport db_postgresdb_host=postgresdb\nexport db_postgresdb_port=5432\nexport db_postgresdb_user=n8n\nexport db_postgresdb_password=n8n\nexport db_postgresdb_schema=n8n\n\n# optional:\nexport db_postgresdb_ssl_ca_file=$(pwd)/ca.crt\nexport db_postgresdb_ssl_reject_unauthorized=false\n\nn8n start\n```\n\n### required permissions\n\nn8n needs to create and modify the schemas of the tables it uses.\n\nrecommended permissions:\n\n```\ncreate database n8n-db;\ncreate user n8n-user with password 'random-password';\ngrant all privileges on database n8n-db to n8n-user;\n```\n\n### tls\n\nyou can choose between these configurations:\n\n- not declaring (default): connect with `ssl=off`\n- declaring only the ca and unauthorized flag: connect with `ssl=on` and verify the server's signature\n- declaring `_{cert,key}` and the above: use the certificate and key for client tls authentication\n\n## sqlite\n\nthis is the default database that gets used if nothing is defined.\n\nthe database file is located at: `~/.n8n/database.sqlite`\n supported databases optional:",
13575
- "importantTerms": [
13576
- "default",
13577
- "export",
13578
- "postgresdb",
13579
- "database",
13580
- "databases",
13581
- "sqlite",
13582
13622
  "supported",
13583
- "used",
13584
- "certificate",
13585
- "only",
13586
- "postgresql",
13587
- "environment",
13588
- "variables",
13589
- "plans",
13590
- "undefined",
13591
- "path",
13592
- "client",
13593
- "create",
13594
- "user",
13595
- "with",
13596
- "declaring"
13623
+ "executions",
13624
+ "workflows"
13597
13625
  ]
13598
13626
  }
13599
13627
  },
@@ -48735,30 +48763,30 @@
48735
48763
  },
48736
48764
  {
48737
48765
  "id": "page-0619",
48738
- "title": "MultiQuery Retriever",
48739
- "url": "https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.retrievermultiquery/index.md",
48740
- "urlPath": "integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.retrievermultiquery/index.md",
48766
+ "title": "Contextual Compression Retriever",
48767
+ "url": "https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.retrievercontextualcompression/index.md",
48768
+ "urlPath": "integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.retrievercontextualcompression/index.md",
48741
48769
  "category": "cluster-nodes",
48742
48770
  "subcategory": null,
48743
48771
  "nodeName": null,
48744
48772
  "nodeType": null,
48745
48773
  "content": {
48746
- "markdown": "# MultiQuery Retriever node\n\nThe MultiQuery Retriever node automates the process of prompt tuning by using an LLM to generate multiple queries from different perspectives for a given user input query.\n\nOn this page, you'll find the node parameters for the MultiQuery Retriever node, and links to more resources.\n\nParameter resolution in sub-nodes\n\nSub-nodes behave differently to other nodes when processing multiple items using an expression.\n\nMost nodes, including root nodes, take any number of items as input, process these items, and output the results. You can use expressions to refer to input items, and the node resolves the expression for each item in turn. For example, given an input of five `name` values, the expression `{{ $json.name }}` resolves to each name in turn.\n\nIn sub-nodes, the expression always resolves to the first item. For example, given an input of five `name` values, the expression `{{ $json.name }}` always resolves to the first name.\n\n## Node options\n\n- **Query Count**: Enter how many different versions of the query to generate.\n\n## Templates and examples\n\n[Browse MultiQuery Retriever integration templates](https://n8n.io/integrations/multiquery-retriever/), or [search all templates](https://n8n.io/workflows/)\n\n## Related resources\n\nRefer to [LangChain's retriever conceptual documentation](https://js.langchain.com/docs/concepts/retrievers) and [LangChain's multiquery retriever API documentation](https://v03.api.js.langchain.com/classes/langchain.retrievers_multi_query.MultiQueryRetriever.html) for more information about the service.\n\nView n8n's [Advanced AI](../../../../../advanced-ai/) documentation.\n",
48747
- "excerpt": "# MultiQuery Retriever node The MultiQuery Retriever node automates the process of prompt tuning by using an LLM to generate multiple queries from different perspectives for a given user input query. On this page, you'll find the node parameters for the MultiQuery Retriever node, and links to more resources. Parameter resolution in sub-nodes Sub-nodes behave differently to other nodes when processing multiple items using an expression. Most nodes, including root nodes, take any number of it...",
48774
+ "markdown": "# Contextual Compression Retriever node\n\nThe Contextual Compression Retriever node improves the answers returned from [vector store](../../../../../glossary/#ai-vector-store) document similarity searches by taking into account the context from the query.\n\nParameter resolution in sub-nodes\n\nSub-nodes behave differently to other nodes when processing multiple items using an expression.\n\nMost nodes, including root nodes, take any number of items as input, process these items, and output the results. You can use expressions to refer to input items, and the node resolves the expression for each item in turn. For example, given an input of five `name` values, the expression `{{ $json.name }}` resolves to each name in turn.\n\nIn sub-nodes, the expression always resolves to the first item. For example, given an input of five `name` values, the expression `{{ $json.name }}` always resolves to the first name.\n\n## Templates and examples\n\n**Generate Contextual YouTube Comments Automatically with GPT-4o**\n\nby Yaron Been\n\n[View template details](https://n8n.io/workflows/4580-generate-contextual-youtube-comments-automatically-with-gpt-4o/)\n\n**Dynamic MCP Server Selection with OpenAI GPT-4.1 and Contextual AI Reranker**\n\nby Jinash Rouniyar\n\n[View template details](https://n8n.io/workflows/8272-dynamic-mcp-server-selection-with-openai-gpt-41-and-contextual-ai-reranker/)\n\n**Generate Contextual Recommendations from Slack using Pinecone**\n\nby Rahul Joshi\n\n[View template details](https://n8n.io/workflows/6018-generate-contextual-recommendations-from-slack-using-pinecone/)\n\n[Browse Contextual Compression Retriever integration templates](https://n8n.io/integrations/contextual-compression-retriever/), or [search all templates](https://n8n.io/workflows/)\n\n## Related resources\n\nRefer to [LangChain's contextual compression retriever documentation](https://js.langchain.com/docs/how_to/contextual_compression/) for more information about the service.\n\nView n8n's [Advanced AI](../../../../../advanced-ai/) documentation.\n",
48775
+ "excerpt": "# Contextual Compression Retriever node The Contextual Compression Retriever node improves the answers returned from [vector store](../../../../../glossary/#ai-vector-store) document similarity searches by taking into account the context from the query. Parameter resolution in sub-nodes Sub-nodes behave differently to other nodes when processing multiple items using an expression. Most nodes, including root nodes, take any number of items as input, process these items, and output the results...",
48748
48776
  "sections": [
48749
48777
  {
48750
- "title": "MultiQuery Retriever node",
48778
+ "title": "Contextual Compression Retriever node",
48751
48779
  "level": 1,
48752
- "content": "The MultiQuery Retriever node automates the process of prompt tuning by using an LLM to generate multiple queries from different perspectives for a given user input query.\n\nOn this page, you'll find the node parameters for the MultiQuery Retriever node, and links to more resources.\n\nParameter resolution in sub-nodes\n\nSub-nodes behave differently to other nodes when processing multiple items using an expression.\n\nMost nodes, including root nodes, take any number of items as input, process these items, and output the results. You can use expressions to refer to input items, and the node resolves the expression for each item in turn. For example, given an input of five `name` values, the expression `{{ $json.name }}` resolves to each name in turn.\n\nIn sub-nodes, the expression always resolves to the first item. For example, given an input of five `name` values, the expression `{{ $json.name }}` always resolves to the first name."
48780
+ "content": "The Contextual Compression Retriever node improves the answers returned from [vector store](../../../../../glossary/#ai-vector-store) document similarity searches by taking into account the context from the query.\n\nParameter resolution in sub-nodes\n\nSub-nodes behave differently to other nodes when processing multiple items using an expression.\n\nMost nodes, including root nodes, take any number of items as input, process these items, and output the results. You can use expressions to refer to input items, and the node resolves the expression for each item in turn. For example, given an input of five `name` values, the expression `{{ $json.name }}` resolves to each name in turn.\n\nIn sub-nodes, the expression always resolves to the first item. For example, given an input of five `name` values, the expression `{{ $json.name }}` always resolves to the first name."
48753
48781
  }
48754
48782
  ]
48755
48783
  },
48756
48784
  "metadata": {
48757
48785
  "keywords": [
48758
- "multiquery",
48786
+ "contextual",
48787
+ "compression",
48759
48788
  "retriever",
48760
48789
  "node",
48761
- "options",
48762
48790
  "templates",
48763
48791
  "examples",
48764
48792
  "related",
@@ -48769,56 +48797,61 @@
48769
48797
  "codeExamples": 0,
48770
48798
  "complexity": "beginner",
48771
48799
  "readingTime": "2 min",
48772
- "contentLength": 1650,
48800
+ "contentLength": 2024,
48773
48801
  "relatedPages": []
48774
48802
  },
48775
48803
  "searchIndex": {
48776
- "fullText": "multiquery retriever # multiquery retriever node\n\nthe multiquery retriever node automates the process of prompt tuning by using an llm to generate multiple queries from different perspectives for a given user input query.\n\non this page, you'll find the node parameters for the multiquery retriever node, and links to more resources.\n\nparameter resolution in sub-nodes\n\nsub-nodes behave differently to other nodes when processing multiple items using an expression.\n\nmost nodes, including root nodes, take any number of items as input, process these items, and output the results. you can use expressions to refer to input items, and the node resolves the expression for each item in turn. for example, given an input of five `name` values, the expression `{{ $json.name }}` resolves to each name in turn.\n\nin sub-nodes, the expression always resolves to the first item. for example, given an input of five `name` values, the expression `{{ $json.name }}` always resolves to the first name.\n\n## node options\n\n- **query count**: enter how many different versions of the query to generate.\n\n## templates and examples\n\n[browse multiquery retriever integration templates](https://n8n.io/integrations/multiquery-retriever/), or [search all templates](https://n8n.io/workflows/)\n\n## related resources\n\nrefer to [langchain's retriever conceptual documentation](https://js.langchain.com/docs/concepts/retrievers) and [langchain's multiquery retriever api documentation](https://v03.api.js.langchain.com/classes/langchain.retrievers_multi_query.multiqueryretriever.html) for more information about the service.\n\nview n8n's [advanced ai](../../../../../advanced-ai/) documentation.\n multiquery retriever node",
48804
+ "fullText": "contextual compression retriever # contextual compression retriever node\n\nthe contextual compression retriever node improves the answers returned from [vector store](../../../../../glossary/#ai-vector-store) document similarity searches by taking into account the context from the query.\n\nparameter resolution in sub-nodes\n\nsub-nodes behave differently to other nodes when processing multiple items using an expression.\n\nmost nodes, including root nodes, take any number of items as input, process these items, and output the results. you can use expressions to refer to input items, and the node resolves the expression for each item in turn. for example, given an input of five `name` values, the expression `{{ $json.name }}` resolves to each name in turn.\n\nin sub-nodes, the expression always resolves to the first item. for example, given an input of five `name` values, the expression `{{ $json.name }}` always resolves to the first name.\n\n## templates and examples\n\n**generate contextual youtube comments automatically with gpt-4o**\n\nby yaron been\n\n[view template details](https://n8n.io/workflows/4580-generate-contextual-youtube-comments-automatically-with-gpt-4o/)\n\n**dynamic mcp server selection with openai gpt-4.1 and contextual ai reranker**\n\nby jinash rouniyar\n\n[view template details](https://n8n.io/workflows/8272-dynamic-mcp-server-selection-with-openai-gpt-41-and-contextual-ai-reranker/)\n\n**generate contextual recommendations from slack using pinecone**\n\nby rahul joshi\n\n[view template details](https://n8n.io/workflows/6018-generate-contextual-recommendations-from-slack-using-pinecone/)\n\n[browse contextual compression retriever integration templates](https://n8n.io/integrations/contextual-compression-retriever/), or [search all templates](https://n8n.io/workflows/)\n\n## related resources\n\nrefer to [langchain's contextual compression retriever documentation](https://js.langchain.com/docs/how_to/contextual_compression/) for more information about the service.\n\nview n8n's [advanced ai](../../../../../advanced-ai/) documentation.\n contextual compression retriever node",
48777
48805
  "importantTerms": [
48806
+ "contextual",
48807
+ "compression",
48778
48808
  "retriever",
48779
- "multiquery",
48780
- "node",
48781
48809
  "nodes",
48782
48810
  "name",
48783
- "input",
48811
+ "https",
48784
48812
  "expression",
48785
- "langchain",
48813
+ "node",
48814
+ "from",
48786
48815
  "items",
48816
+ "input",
48787
48817
  "resolves",
48788
- "https",
48789
- "given",
48790
- "query",
48818
+ "generate",
48819
+ "with",
48820
+ "view",
48821
+ "workflows",
48822
+ "using",
48791
48823
  "templates",
48792
- "documentation"
48824
+ "template",
48825
+ "details"
48793
48826
  ]
48794
48827
  }
48795
48828
  },
48796
48829
  {
48797
48830
  "id": "page-0620",
48798
- "title": "Contextual Compression Retriever",
48799
- "url": "https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.retrievercontextualcompression/index.md",
48800
- "urlPath": "integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.retrievercontextualcompression/index.md",
48831
+ "title": "MultiQuery Retriever",
48832
+ "url": "https://docs.n8n.io/integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.retrievermultiquery/index.md",
48833
+ "urlPath": "integrations/builtin/cluster-nodes/sub-nodes/n8n-nodes-langchain.retrievermultiquery/index.md",
48801
48834
  "category": "cluster-nodes",
48802
48835
  "subcategory": null,
48803
48836
  "nodeName": null,
48804
48837
  "nodeType": null,
48805
48838
  "content": {
48806
- "markdown": "# Contextual Compression Retriever node\n\nThe Contextual Compression Retriever node improves the answers returned from [vector store](../../../../../glossary/#ai-vector-store) document similarity searches by taking into account the context from the query.\n\nParameter resolution in sub-nodes\n\nSub-nodes behave differently to other nodes when processing multiple items using an expression.\n\nMost nodes, including root nodes, take any number of items as input, process these items, and output the results. You can use expressions to refer to input items, and the node resolves the expression for each item in turn. For example, given an input of five `name` values, the expression `{{ $json.name }}` resolves to each name in turn.\n\nIn sub-nodes, the expression always resolves to the first item. For example, given an input of five `name` values, the expression `{{ $json.name }}` always resolves to the first name.\n\n## Templates and examples\n\n**Generate Contextual YouTube Comments Automatically with GPT-4o**\n\nby Yaron Been\n\n[View template details](https://n8n.io/workflows/4580-generate-contextual-youtube-comments-automatically-with-gpt-4o/)\n\n**Dynamic MCP Server Selection with OpenAI GPT-4.1 and Contextual AI Reranker**\n\nby Jinash Rouniyar\n\n[View template details](https://n8n.io/workflows/8272-dynamic-mcp-server-selection-with-openai-gpt-41-and-contextual-ai-reranker/)\n\n**Generate Contextual Recommendations from Slack using Pinecone**\n\nby Rahul Joshi\n\n[View template details](https://n8n.io/workflows/6018-generate-contextual-recommendations-from-slack-using-pinecone/)\n\n[Browse Contextual Compression Retriever integration templates](https://n8n.io/integrations/contextual-compression-retriever/), or [search all templates](https://n8n.io/workflows/)\n\n## Related resources\n\nRefer to [LangChain's contextual compression retriever documentation](https://js.langchain.com/docs/how_to/contextual_compression/) for more information about the service.\n\nView n8n's [Advanced AI](../../../../../advanced-ai/) documentation.\n",
48807
- "excerpt": "# Contextual Compression Retriever node The Contextual Compression Retriever node improves the answers returned from [vector store](../../../../../glossary/#ai-vector-store) document similarity searches by taking into account the context from the query. Parameter resolution in sub-nodes Sub-nodes behave differently to other nodes when processing multiple items using an expression. Most nodes, including root nodes, take any number of items as input, process these items, and output the results...",
48839
+ "markdown": "# MultiQuery Retriever node\n\nThe MultiQuery Retriever node automates the process of prompt tuning by using an LLM to generate multiple queries from different perspectives for a given user input query.\n\nOn this page, you'll find the node parameters for the MultiQuery Retriever node, and links to more resources.\n\nParameter resolution in sub-nodes\n\nSub-nodes behave differently to other nodes when processing multiple items using an expression.\n\nMost nodes, including root nodes, take any number of items as input, process these items, and output the results. You can use expressions to refer to input items, and the node resolves the expression for each item in turn. For example, given an input of five `name` values, the expression `{{ $json.name }}` resolves to each name in turn.\n\nIn sub-nodes, the expression always resolves to the first item. For example, given an input of five `name` values, the expression `{{ $json.name }}` always resolves to the first name.\n\n## Node options\n\n- **Query Count**: Enter how many different versions of the query to generate.\n\n## Templates and examples\n\n[Browse MultiQuery Retriever integration templates](https://n8n.io/integrations/multiquery-retriever/), or [search all templates](https://n8n.io/workflows/)\n\n## Related resources\n\nRefer to [LangChain's retriever conceptual documentation](https://js.langchain.com/docs/concepts/retrievers) and [LangChain's multiquery retriever API documentation](https://v03.api.js.langchain.com/classes/langchain.retrievers_multi_query.MultiQueryRetriever.html) for more information about the service.\n\nView n8n's [Advanced AI](../../../../../advanced-ai/) documentation.\n",
48840
+ "excerpt": "# MultiQuery Retriever node The MultiQuery Retriever node automates the process of prompt tuning by using an LLM to generate multiple queries from different perspectives for a given user input query. On this page, you'll find the node parameters for the MultiQuery Retriever node, and links to more resources. Parameter resolution in sub-nodes Sub-nodes behave differently to other nodes when processing multiple items using an expression. Most nodes, including root nodes, take any number of it...",
48808
48841
  "sections": [
48809
48842
  {
48810
- "title": "Contextual Compression Retriever node",
48843
+ "title": "MultiQuery Retriever node",
48811
48844
  "level": 1,
48812
- "content": "The Contextual Compression Retriever node improves the answers returned from [vector store](../../../../../glossary/#ai-vector-store) document similarity searches by taking into account the context from the query.\n\nParameter resolution in sub-nodes\n\nSub-nodes behave differently to other nodes when processing multiple items using an expression.\n\nMost nodes, including root nodes, take any number of items as input, process these items, and output the results. You can use expressions to refer to input items, and the node resolves the expression for each item in turn. For example, given an input of five `name` values, the expression `{{ $json.name }}` resolves to each name in turn.\n\nIn sub-nodes, the expression always resolves to the first item. For example, given an input of five `name` values, the expression `{{ $json.name }}` always resolves to the first name."
48845
+ "content": "The MultiQuery Retriever node automates the process of prompt tuning by using an LLM to generate multiple queries from different perspectives for a given user input query.\n\nOn this page, you'll find the node parameters for the MultiQuery Retriever node, and links to more resources.\n\nParameter resolution in sub-nodes\n\nSub-nodes behave differently to other nodes when processing multiple items using an expression.\n\nMost nodes, including root nodes, take any number of items as input, process these items, and output the results. You can use expressions to refer to input items, and the node resolves the expression for each item in turn. For example, given an input of five `name` values, the expression `{{ $json.name }}` resolves to each name in turn.\n\nIn sub-nodes, the expression always resolves to the first item. For example, given an input of five `name` values, the expression `{{ $json.name }}` always resolves to the first name."
48813
48846
  }
48814
48847
  ]
48815
48848
  },
48816
48849
  "metadata": {
48817
48850
  "keywords": [
48818
- "contextual",
48819
- "compression",
48851
+ "multiquery",
48820
48852
  "retriever",
48821
48853
  "node",
48854
+ "options",
48822
48855
  "templates",
48823
48856
  "examples",
48824
48857
  "related",
@@ -48829,32 +48862,27 @@
48829
48862
  "codeExamples": 0,
48830
48863
  "complexity": "beginner",
48831
48864
  "readingTime": "2 min",
48832
- "contentLength": 2024,
48865
+ "contentLength": 1650,
48833
48866
  "relatedPages": []
48834
48867
  },
48835
48868
  "searchIndex": {
48836
- "fullText": "contextual compression retriever # contextual compression retriever node\n\nthe contextual compression retriever node improves the answers returned from [vector store](../../../../../glossary/#ai-vector-store) document similarity searches by taking into account the context from the query.\n\nparameter resolution in sub-nodes\n\nsub-nodes behave differently to other nodes when processing multiple items using an expression.\n\nmost nodes, including root nodes, take any number of items as input, process these items, and output the results. you can use expressions to refer to input items, and the node resolves the expression for each item in turn. for example, given an input of five `name` values, the expression `{{ $json.name }}` resolves to each name in turn.\n\nin sub-nodes, the expression always resolves to the first item. for example, given an input of five `name` values, the expression `{{ $json.name }}` always resolves to the first name.\n\n## templates and examples\n\n**generate contextual youtube comments automatically with gpt-4o**\n\nby yaron been\n\n[view template details](https://n8n.io/workflows/4580-generate-contextual-youtube-comments-automatically-with-gpt-4o/)\n\n**dynamic mcp server selection with openai gpt-4.1 and contextual ai reranker**\n\nby jinash rouniyar\n\n[view template details](https://n8n.io/workflows/8272-dynamic-mcp-server-selection-with-openai-gpt-41-and-contextual-ai-reranker/)\n\n**generate contextual recommendations from slack using pinecone**\n\nby rahul joshi\n\n[view template details](https://n8n.io/workflows/6018-generate-contextual-recommendations-from-slack-using-pinecone/)\n\n[browse contextual compression retriever integration templates](https://n8n.io/integrations/contextual-compression-retriever/), or [search all templates](https://n8n.io/workflows/)\n\n## related resources\n\nrefer to [langchain's contextual compression retriever documentation](https://js.langchain.com/docs/how_to/contextual_compression/) for more information about the service.\n\nview n8n's [advanced ai](../../../../../advanced-ai/) documentation.\n contextual compression retriever node",
48869
+ "fullText": "multiquery retriever # multiquery retriever node\n\nthe multiquery retriever node automates the process of prompt tuning by using an llm to generate multiple queries from different perspectives for a given user input query.\n\non this page, you'll find the node parameters for the multiquery retriever node, and links to more resources.\n\nparameter resolution in sub-nodes\n\nsub-nodes behave differently to other nodes when processing multiple items using an expression.\n\nmost nodes, including root nodes, take any number of items as input, process these items, and output the results. you can use expressions to refer to input items, and the node resolves the expression for each item in turn. for example, given an input of five `name` values, the expression `{{ $json.name }}` resolves to each name in turn.\n\nin sub-nodes, the expression always resolves to the first item. for example, given an input of five `name` values, the expression `{{ $json.name }}` always resolves to the first name.\n\n## node options\n\n- **query count**: enter how many different versions of the query to generate.\n\n## templates and examples\n\n[browse multiquery retriever integration templates](https://n8n.io/integrations/multiquery-retriever/), or [search all templates](https://n8n.io/workflows/)\n\n## related resources\n\nrefer to [langchain's retriever conceptual documentation](https://js.langchain.com/docs/concepts/retrievers) and [langchain's multiquery retriever api documentation](https://v03.api.js.langchain.com/classes/langchain.retrievers_multi_query.multiqueryretriever.html) for more information about the service.\n\nview n8n's [advanced ai](../../../../../advanced-ai/) documentation.\n multiquery retriever node",
48837
48870
  "importantTerms": [
48838
- "contextual",
48839
- "compression",
48840
48871
  "retriever",
48872
+ "multiquery",
48873
+ "node",
48841
48874
  "nodes",
48842
48875
  "name",
48843
- "https",
48876
+ "input",
48844
48877
  "expression",
48845
- "node",
48846
- "from",
48878
+ "langchain",
48847
48879
  "items",
48848
- "input",
48849
48880
  "resolves",
48850
- "generate",
48851
- "with",
48852
- "view",
48853
- "workflows",
48854
- "using",
48881
+ "https",
48882
+ "given",
48883
+ "query",
48855
48884
  "templates",
48856
- "template",
48857
- "details"
48885
+ "documentation"
48858
48886
  ]
48859
48887
  }
48860
48888
  },
@@ -93512,6 +93540,7 @@
93512
93540
  "page-0002",
93513
93541
  "page-0003",
93514
93542
  "page-0006",
93543
+ "page-0008",
93515
93544
  "page-0009",
93516
93545
  "page-0013",
93517
93546
  "page-0017",
@@ -94293,7 +94322,6 @@
94293
94322
  "page-0003",
94294
94323
  "page-0013",
94295
94324
  "page-0019",
94296
- "page-0153",
94297
94325
  "page-0206",
94298
94326
  "page-0433",
94299
94327
  "page-0885",
@@ -94337,6 +94365,7 @@
94337
94365
  "page-0003",
94338
94366
  "page-0006",
94339
94367
  "page-0007",
94368
+ "page-0008",
94340
94369
  "page-0012",
94341
94370
  "page-0013",
94342
94371
  "page-0017",
@@ -94529,6 +94558,7 @@
94529
94558
  "nodes": [
94530
94559
  "page-0002",
94531
94560
  "page-0003",
94561
+ "page-0008",
94532
94562
  "page-0013",
94533
94563
  "page-0040",
94534
94564
  "page-0044",
@@ -95283,7 +95313,6 @@
95283
95313
  "page-0074",
95284
95314
  "page-0086",
95285
95315
  "page-0148",
95286
- "page-0153",
95287
95316
  "page-0162",
95288
95317
  "page-0882",
95289
95318
  "page-1255",
@@ -95844,7 +95873,6 @@
95844
95873
  ],
95845
95874
  "sqlite": [
95846
95875
  "page-0003",
95847
- "page-0153",
95848
95876
  "page-0174",
95849
95877
  "page-0206"
95850
95878
  ],
@@ -96002,6 +96030,7 @@
96002
96030
  ],
96003
96031
  "command": [
96004
96032
  "page-0003",
96033
+ "page-0008",
96005
96034
  "page-0150",
96006
96035
  "page-0696",
96007
96036
  "page-0714",
@@ -97214,6 +97243,7 @@
97214
97243
  "with": [
97215
97244
  "page-0005",
97216
97245
  "page-0007",
97246
+ "page-0008",
97217
97247
  "page-0012",
97218
97248
  "page-0015",
97219
97249
  "page-0018",
@@ -97440,6 +97470,7 @@
97440
97470
  ],
97441
97471
  "canvas": [
97442
97472
  "page-0006",
97473
+ "page-0008",
97443
97474
  "page-0073",
97444
97475
  "page-1215"
97445
97476
  ],
@@ -97938,6 +97969,65 @@
97938
97969
  "insights?": [
97939
97970
  "page-0007"
97940
97971
  ],
97972
+ "keyboard": [
97973
+ "page-0008",
97974
+ "page-0053",
97975
+ "page-0532",
97976
+ "page-0708",
97977
+ "page-0710"
97978
+ ],
97979
+ "shortcuts": [
97980
+ "page-0008",
97981
+ "page-0053",
97982
+ "page-0708",
97983
+ "page-0710"
97984
+ ],
97985
+ "controls": [
97986
+ "page-0008",
97987
+ "page-1264"
97988
+ ],
97989
+ "move": [
97990
+ "page-0008",
97991
+ "page-0511",
97992
+ "page-0654",
97993
+ "page-1242"
97994
+ ],
97995
+ "zoom": [
97996
+ "page-0008",
97997
+ "page-0488",
97998
+ "page-1033"
97999
+ ],
98000
+ "more": [
98001
+ "page-0008",
98002
+ "page-0013",
98003
+ "page-0018",
98004
+ "page-0025",
98005
+ "page-0530",
98006
+ "page-0687",
98007
+ "page-1150",
98008
+ "page-1215"
98009
+ ],
98010
+ "selected": [
98011
+ "page-0008"
98012
+ ],
98013
+ "panel": [
98014
+ "page-0008",
98015
+ "page-0020",
98016
+ "page-0073",
98017
+ "page-1180"
98018
+ ],
98019
+ "categories": [
98020
+ "page-0008",
98021
+ "page-1175"
98022
+ ],
98023
+ "within": [
98024
+ "page-0008",
98025
+ "page-0013",
98026
+ "page-0100",
98027
+ "page-0517",
98028
+ "page-0718",
98029
+ "page-1215"
98030
+ ],
97941
98031
  "learning": [
97942
98032
  "page-0009",
97943
98033
  "page-0039"
@@ -98037,7 +98127,6 @@
98037
98127
  "page-0048",
98038
98128
  "page-0132",
98039
98129
  "page-0145",
98040
- "page-0153",
98041
98130
  "page-0155",
98042
98131
  "page-0158",
98043
98132
  "page-0167",
@@ -98579,7 +98668,6 @@
98579
98668
  "page-0043",
98580
98669
  "page-0047",
98581
98670
  "page-0048",
98582
- "page-0153",
98583
98671
  "page-0202",
98584
98672
  "page-0205",
98585
98673
  "page-0321",
@@ -98779,15 +98867,6 @@
98779
98867
  "auditability": [
98780
98868
  "page-0013"
98781
98869
  ],
98782
- "more": [
98783
- "page-0013",
98784
- "page-0018",
98785
- "page-0025",
98786
- "page-0530",
98787
- "page-0687",
98788
- "page-1150",
98789
- "page-1215"
98790
- ],
98791
98870
  "granular": [
98792
98871
  "page-0013"
98793
98872
  ],
@@ -99072,13 +99151,6 @@
99072
99151
  "syslog": [
99073
99152
  "page-0013"
99074
99153
  ],
99075
- "within": [
99076
- "page-0013",
99077
- "page-0100",
99078
- "page-0517",
99079
- "page-0718",
99080
- "page-1215"
99081
- ],
99082
99154
  "streaming:": [
99083
99155
  "page-0013"
99084
99156
  ],
@@ -101405,11 +101477,6 @@
101405
101477
  "page-1229",
101406
101478
  "page-1233"
101407
101479
  ],
101408
- "panel": [
101409
- "page-0020",
101410
- "page-0073",
101411
- "page-1180"
101412
- ],
101413
101480
  "approval": [
101414
101481
  "page-0020",
101415
101482
  "page-0320",
@@ -102733,7 +102800,6 @@
102733
102800
  "database": [
102734
102801
  "page-0038",
102735
102802
  "page-0148",
102736
- "page-0153",
102737
102803
  "page-0174",
102738
102804
  "page-0202",
102739
102805
  "page-0206",
@@ -102847,7 +102913,6 @@
102847
102913
  "page-0043",
102848
102914
  "page-0047",
102849
102915
  "page-0048",
102850
- "page-0153",
102851
102916
  "page-0155",
102852
102917
  "page-0167",
102853
102918
  "page-0196",
@@ -103590,7 +103655,6 @@
103590
103655
  "supported": [
103591
103656
  "page-0053",
103592
103657
  "page-0134",
103593
- "page-0153",
103594
103658
  "page-0237",
103595
103659
  "page-0238",
103596
103660
  "page-0239",
@@ -104369,17 +104433,6 @@
104369
104433
  "page-1040",
104370
104434
  "page-1044"
104371
104435
  ],
104372
- "keyboard": [
104373
- "page-0053",
104374
- "page-0532",
104375
- "page-0708",
104376
- "page-0710"
104377
- ],
104378
- "shortcuts": [
104379
- "page-0053",
104380
- "page-0708",
104381
- "page-0710"
104382
- ],
104383
104436
  "(pyodide": [
104384
104437
  "page-0053",
104385
104438
  "page-0708"
@@ -106858,7 +106911,6 @@
106858
106911
  ],
106859
106912
  "shared": [
106860
106913
  "page-0148",
106861
- "page-0153",
106862
106914
  "page-0513",
106863
106915
  "page-0748",
106864
106916
  "page-1256"
@@ -106925,68 +106977,6 @@
106925
106977
  "hook": [
106926
106978
  "page-0152"
106927
106979
  ],
106928
- "databases": [
106929
- "page-0153"
106930
- ],
106931
- "type": [
106932
- "page-0153",
106933
- "page-0166",
106934
- "page-0287",
106935
- "page-0320",
106936
- "page-0380",
106937
- "page-0383",
106938
- "page-0423",
106939
- "page-0460",
106940
- "page-0497",
106941
- "page-0533",
106942
- "page-0562",
106943
- "page-0667",
106944
- "page-0674",
106945
- "page-0690",
106946
- "page-0691",
106947
- "page-0699",
106948
- "page-0704",
106949
- "page-0723",
106950
- "page-0839",
106951
- "page-0910",
106952
- "page-0998",
106953
- "page-1179",
106954
- "page-1193",
106955
- "page-1194",
106956
- "page-1198"
106957
- ],
106958
- "installation": [
106959
- "page-0153",
106960
- "page-0194",
106961
- "page-1161",
106962
- "page-1162"
106963
- ],
106964
- "postgresdb": [
106965
- "page-0153"
106966
- ],
106967
- "optional:": [
106968
- "page-0153",
106969
- "page-0198",
106970
- "page-0199",
106971
- "page-0201",
106972
- "page-0203",
106973
- "page-0807",
106974
- "page-1217"
106975
- ],
106976
- "required": [
106977
- "page-0153",
106978
- "page-0206",
106979
- "page-0445",
106980
- "page-0744",
106981
- "page-0840",
106982
- "page-0885",
106983
- "page-0910",
106984
- "page-0973",
106985
- "page-0982",
106986
- "page-1115",
106987
- "page-1176",
106988
- "page-1194"
106989
- ],
106990
106980
  "modes": [
106991
106981
  "page-0154",
106992
106982
  "page-0681",
@@ -107340,6 +107330,32 @@
107340
107330
  "page-0219",
107341
107331
  "page-1215"
107342
107332
  ],
107333
+ "type": [
107334
+ "page-0166",
107335
+ "page-0287",
107336
+ "page-0320",
107337
+ "page-0380",
107338
+ "page-0383",
107339
+ "page-0423",
107340
+ "page-0460",
107341
+ "page-0497",
107342
+ "page-0533",
107343
+ "page-0562",
107344
+ "page-0667",
107345
+ "page-0674",
107346
+ "page-0690",
107347
+ "page-0691",
107348
+ "page-0699",
107349
+ "page-0704",
107350
+ "page-0723",
107351
+ "page-0839",
107352
+ "page-0910",
107353
+ "page-0998",
107354
+ "page-1179",
107355
+ "page-1193",
107356
+ "page-1194",
107357
+ "page-1198"
107358
+ ],
107343
107359
  "gauge": [
107344
107360
  "page-0166"
107345
107361
  ],
@@ -107447,6 +107463,11 @@
107447
107463
  "smtp,": [
107448
107464
  "page-0191"
107449
107465
  ],
107466
+ "installation": [
107467
+ "page-0194",
107468
+ "page-1161",
107469
+ "page-1162"
107470
+ ],
107450
107471
  "starting": [
107451
107472
  "page-0194"
107452
107473
  ],
@@ -107582,7 +107603,7 @@
107582
107603
  "page-0606",
107583
107604
  "page-0607",
107584
107605
  "page-0617",
107585
- "page-0619",
107606
+ "page-0620",
107586
107607
  "page-0626",
107587
107608
  "page-0631",
107588
107609
  "page-0632",
@@ -107680,6 +107701,14 @@
107680
107701
  "page-0203",
107681
107702
  "page-0554"
107682
107703
  ],
107704
+ "optional:": [
107705
+ "page-0198",
107706
+ "page-0199",
107707
+ "page-0201",
107708
+ "page-0203",
107709
+ "page-0807",
107710
+ "page-1217"
107711
+ ],
107683
107712
  "deployments": [
107684
107713
  "page-0198",
107685
107714
  "page-0199",
@@ -107944,6 +107973,19 @@
107944
107973
  "libvirt": [
107945
107974
  "page-0206"
107946
107975
  ],
107976
+ "required": [
107977
+ "page-0206",
107978
+ "page-0445",
107979
+ "page-0744",
107980
+ "page-0840",
107981
+ "page-0885",
107982
+ "page-0910",
107983
+ "page-0973",
107984
+ "page-0982",
107985
+ "page-1115",
107986
+ "page-1176",
107987
+ "page-1194"
107988
+ ],
107947
107989
  "groups": [
107948
107990
  "page-0206",
107949
107991
  "page-0524"
@@ -110349,10 +110391,6 @@
110349
110391
  "page-0487",
110350
110392
  "page-1032"
110351
110393
  ],
110352
- "zoom": [
110353
- "page-0488",
110354
- "page-1033"
110355
- ],
110356
110394
  "zulip": [
110357
110395
  "page-0489",
110358
110396
  "page-1035"
@@ -110561,11 +110599,6 @@
110561
110599
  "page-1052",
110562
110600
  "page-1206"
110563
110601
  ],
110564
- "move": [
110565
- "page-0511",
110566
- "page-0654",
110567
- "page-1242"
110568
- ],
110569
110602
  "upload": [
110570
110603
  "page-0511",
110571
110604
  "page-0540",
@@ -111465,16 +111498,16 @@
111465
111498
  "reranker": [
111466
111499
  "page-0618"
111467
111500
  ],
111468
- "multiquery": [
111469
- "page-0619"
111470
- ],
111471
111501
  "contextual": [
111472
- "page-0620"
111502
+ "page-0619"
111473
111503
  ],
111474
111504
  "compression": [
111475
- "page-0620",
111505
+ "page-0619",
111476
111506
  "page-0653"
111477
111507
  ],
111508
+ "multiquery": [
111509
+ "page-0620"
111510
+ ],
111478
111511
  "character": [
111479
111512
  "page-0623",
111480
111513
  "page-0624"
@@ -112802,9 +112835,6 @@
112802
112835
  "deprecation": [
112803
112836
  "page-1174"
112804
112837
  ],
112805
- "categories": [
112806
- "page-1175"
112807
- ],
112808
112838
  "directories": [
112809
112839
  "page-1176"
112810
112840
  ],
@@ -113582,9 +113612,6 @@
113582
113612
  "components": [
113583
113613
  "page-1262"
113584
113614
  ],
113585
- "controls": [
113586
- "page-1264"
113587
- ],
113588
113615
  "positioning": [
113589
113616
  "page-1265"
113590
113617
  ],
@@ -113650,6 +113677,7 @@
113650
113677
  "page-0005",
113651
113678
  "page-0006",
113652
113679
  "page-0007",
113680
+ "page-0008",
113653
113681
  "page-0009",
113654
113682
  "page-0010",
113655
113683
  "page-0011",
@@ -114305,7 +114333,6 @@
114305
114333
  "page-0150",
114306
114334
  "page-0151",
114307
114335
  "page-0152",
114308
- "page-0153",
114309
114336
  "page-0154",
114310
114337
  "page-0155",
114311
114338
  "page-0156",