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

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,5 +1,5 @@
1
1
  {
2
- "generatedAt": "2026-05-05T22:09:13.491Z",
2
+ "generatedAt": "2026-05-05T22:56:13.857Z",
3
3
  "n8nVersion": "unknown",
4
4
  "sourceFileCount": 428,
5
5
  "scanDirectories": [
@@ -1,8 +1,8 @@
1
1
  {
2
- "generatedAt": "2026-05-05T22:09:14.387Z",
2
+ "generatedAt": "2026-05-05T22:56:14.806Z",
3
3
  "version": "1.0.0",
4
4
  "sourceUrl": "https://docs.n8n.io/llms.txt",
5
- "totalPages": 1272,
5
+ "totalPages": 1273,
6
6
  "statistics": {
7
7
  "byCategory": {
8
8
  "other": 514,
@@ -12,7 +12,7 @@
12
12
  "code": 20,
13
13
  "data": 38,
14
14
  "flow-logic": 8,
15
- "hosting": 85,
15
+ "hosting": 86,
16
16
  "integrations": 308,
17
17
  "cluster-nodes": 104,
18
18
  "trigger-nodes": 107,
@@ -21,7 +21,7 @@
21
21
  },
22
22
  "withNodeNames": 471,
23
23
  "withUseCases": 39,
24
- "withCodeExamples": 180
24
+ "withCodeExamples": 181
25
25
  },
26
26
  "categories": {
27
27
  "other": {
@@ -709,7 +709,7 @@
709
709
  },
710
710
  "hosting": {
711
711
  "description": "Self-hosting, deployment, and infrastructure",
712
- "totalPages": 85,
712
+ "totalPages": 86,
713
713
  "pages": [
714
714
  "page-0145",
715
715
  "page-0146",
@@ -719,6 +719,7 @@
719
719
  "page-0150",
720
720
  "page-0151",
721
721
  "page-0152",
722
+ "page-0153",
722
723
  "page-0154",
723
724
  "page-0155",
724
725
  "page-0156",
@@ -13534,18 +13535,13 @@
13534
13535
  "nodeName": null,
13535
13536
  "nodeType": null,
13536
13537
  "content": {
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...",
13538
+ "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",
13539
+ "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/...",
13539
13540
  "sections": [
13540
13541
  {
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:",
13542
+ "title": "External hooks",
13547
13543
  "level": 1,
13548
- "content": "export DB_POSTGRESDB_SSL_CA_FILE=$(pwd)/ca.crt\nexport DB_POSTGRESDB_SSL_REJECT_UNAUTHORIZED=false\n\nn8n start\n```"
13544
+ "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/)."
13549
13545
  }
13550
13546
  ]
13551
13547
  },
@@ -13563,65 +13559,143 @@
13563
13559
  ],
13564
13560
  "useCases": [],
13565
13561
  "operations": [],
13566
- "codeExamples": 5,
13562
+ "codeExamples": 3,
13567
13563
  "complexity": "intermediate",
13568
13564
  "readingTime": "6 min",
13569
13565
  "contentLength": 14055,
13570
13566
  "relatedPages": []
13571
13567
  },
13572
13568
  "searchIndex": {
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",
13569
+ "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",
13574
13570
  "importantTerms": [
13575
13571
  "workflow",
13576
13572
  "called",
13577
13573
  "hook",
13578
- "default",
13579
13574
  "hooks",
13575
+ "data",
13580
13576
  "string",
13577
+ "frontend",
13581
13578
  "gets",
13579
+ "external",
13582
13580
  "when",
13583
- "database",
13584
- "export",
13585
- "data",
13581
+ "before",
13586
13582
  "files",
13587
13583
  "function",
13588
- "postgresdb",
13589
- "frontend",
13590
- "that",
13584
+ "credentials",
13585
+ "existing",
13591
13586
  "after",
13592
13587
  "store",
13593
13588
  "settings",
13594
- "file",
13595
- "before",
13596
13589
  "callback",
13597
13590
  "workflowdata",
13598
- "existing",
13599
13591
  "functions",
13600
13592
  "someone",
13601
- "external",
13602
- "sqlite",
13603
- "following",
13604
- "create",
13605
- "with",
13606
- "this",
13593
+ "change",
13594
+ "environment",
13595
+ "script",
13596
+ "example",
13607
13597
  "workflowid",
13598
+ "file",
13599
+ "that",
13608
13600
  "nodecreatelist",
13609
- "databases",
13610
- "used",
13611
- "environment",
13612
- "undefined",
13613
- "certificate",
13614
- "user",
13601
+ "number",
13615
13602
  "iworkflowbase",
13616
13603
  "executed",
13617
- "change",
13604
+ "this",
13618
13605
  "nodeview",
13619
- "script",
13620
13606
  "meta",
13621
13607
  "something",
13608
+ "code",
13609
+ "backend",
13610
+ "variable",
13611
+ "with",
13612
+ "variables",
13613
+ "register",
13614
+ "create",
13615
+ "created",
13616
+ "restrict",
13617
+ "deleted",
13618
+ "allows",
13619
+ "overwrite",
13620
+ "oauth"
13621
+ ]
13622
+ }
13623
+ },
13624
+ {
13625
+ "id": "page-0153",
13626
+ "title": "Supported databases and settings",
13627
+ "url": "https://docs.n8n.io/hosting/configuration/supported-databases-settings/index.md",
13628
+ "urlPath": "hosting/configuration/supported-databases-settings/index.md",
13629
+ "category": "hosting",
13630
+ "subcategory": null,
13631
+ "nodeName": null,
13632
+ "nodeType": null,
13633
+ "content": {
13634
+ "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",
13635
+ "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...",
13636
+ "sections": [
13637
+ {
13638
+ "title": "Supported databases",
13639
+ "level": 1,
13640
+ "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/))."
13641
+ },
13642
+ {
13643
+ "title": "optional:",
13644
+ "level": 1,
13645
+ "content": "export DB_POSTGRESDB_SSL_CA_FILE=$(pwd)/ca.crt\nexport DB_POSTGRESDB_SSL_REJECT_UNAUTHORIZED=false\n\nn8n start\n```"
13646
+ }
13647
+ ]
13648
+ },
13649
+ "metadata": {
13650
+ "keywords": [
13622
13651
  "supported",
13623
- "executions",
13624
- "workflows"
13652
+ "databases",
13653
+ "settings",
13654
+ "database",
13655
+ "type",
13656
+ "installation",
13657
+ "self",
13658
+ "hosted",
13659
+ "cloud",
13660
+ "shared",
13661
+ "postgresdb",
13662
+ "optional:",
13663
+ "required",
13664
+ "permissions",
13665
+ "sqlite"
13666
+ ],
13667
+ "useCases": [],
13668
+ "operations": [],
13669
+ "codeExamples": 2,
13670
+ "complexity": "beginner",
13671
+ "readingTime": "2 min",
13672
+ "contentLength": 2829,
13673
+ "relatedPages": []
13674
+ },
13675
+ "searchIndex": {
13676
+ "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:",
13677
+ "importantTerms": [
13678
+ "default",
13679
+ "export",
13680
+ "postgresdb",
13681
+ "database",
13682
+ "databases",
13683
+ "sqlite",
13684
+ "supported",
13685
+ "used",
13686
+ "certificate",
13687
+ "only",
13688
+ "postgresql",
13689
+ "environment",
13690
+ "variables",
13691
+ "plans",
13692
+ "undefined",
13693
+ "path",
13694
+ "client",
13695
+ "create",
13696
+ "user",
13697
+ "with",
13698
+ "declaring"
13625
13699
  ]
13626
13700
  }
13627
13701
  },
@@ -94322,6 +94396,7 @@
94322
94396
  "page-0003",
94323
94397
  "page-0013",
94324
94398
  "page-0019",
94399
+ "page-0153",
94325
94400
  "page-0206",
94326
94401
  "page-0433",
94327
94402
  "page-0885",
@@ -95313,6 +95388,7 @@
95313
95388
  "page-0074",
95314
95389
  "page-0086",
95315
95390
  "page-0148",
95391
+ "page-0153",
95316
95392
  "page-0162",
95317
95393
  "page-0882",
95318
95394
  "page-1255",
@@ -95873,6 +95949,7 @@
95873
95949
  ],
95874
95950
  "sqlite": [
95875
95951
  "page-0003",
95952
+ "page-0153",
95876
95953
  "page-0174",
95877
95954
  "page-0206"
95878
95955
  ],
@@ -98127,6 +98204,7 @@
98127
98204
  "page-0048",
98128
98205
  "page-0132",
98129
98206
  "page-0145",
98207
+ "page-0153",
98130
98208
  "page-0155",
98131
98209
  "page-0158",
98132
98210
  "page-0167",
@@ -98668,6 +98746,7 @@
98668
98746
  "page-0043",
98669
98747
  "page-0047",
98670
98748
  "page-0048",
98749
+ "page-0153",
98671
98750
  "page-0202",
98672
98751
  "page-0205",
98673
98752
  "page-0321",
@@ -102800,6 +102879,7 @@
102800
102879
  "database": [
102801
102880
  "page-0038",
102802
102881
  "page-0148",
102882
+ "page-0153",
102803
102883
  "page-0174",
102804
102884
  "page-0202",
102805
102885
  "page-0206",
@@ -102913,6 +102993,7 @@
102913
102993
  "page-0043",
102914
102994
  "page-0047",
102915
102995
  "page-0048",
102996
+ "page-0153",
102916
102997
  "page-0155",
102917
102998
  "page-0167",
102918
102999
  "page-0196",
@@ -103655,6 +103736,7 @@
103655
103736
  "supported": [
103656
103737
  "page-0053",
103657
103738
  "page-0134",
103739
+ "page-0153",
103658
103740
  "page-0237",
103659
103741
  "page-0238",
103660
103742
  "page-0239",
@@ -106911,6 +106993,7 @@
106911
106993
  ],
106912
106994
  "shared": [
106913
106995
  "page-0148",
106996
+ "page-0153",
106914
106997
  "page-0513",
106915
106998
  "page-0748",
106916
106999
  "page-1256"
@@ -106977,6 +107060,68 @@
106977
107060
  "hook": [
106978
107061
  "page-0152"
106979
107062
  ],
107063
+ "databases": [
107064
+ "page-0153"
107065
+ ],
107066
+ "type": [
107067
+ "page-0153",
107068
+ "page-0166",
107069
+ "page-0287",
107070
+ "page-0320",
107071
+ "page-0380",
107072
+ "page-0383",
107073
+ "page-0423",
107074
+ "page-0460",
107075
+ "page-0497",
107076
+ "page-0533",
107077
+ "page-0562",
107078
+ "page-0667",
107079
+ "page-0674",
107080
+ "page-0690",
107081
+ "page-0691",
107082
+ "page-0699",
107083
+ "page-0704",
107084
+ "page-0723",
107085
+ "page-0839",
107086
+ "page-0910",
107087
+ "page-0998",
107088
+ "page-1179",
107089
+ "page-1193",
107090
+ "page-1194",
107091
+ "page-1198"
107092
+ ],
107093
+ "installation": [
107094
+ "page-0153",
107095
+ "page-0194",
107096
+ "page-1161",
107097
+ "page-1162"
107098
+ ],
107099
+ "postgresdb": [
107100
+ "page-0153"
107101
+ ],
107102
+ "optional:": [
107103
+ "page-0153",
107104
+ "page-0198",
107105
+ "page-0199",
107106
+ "page-0201",
107107
+ "page-0203",
107108
+ "page-0807",
107109
+ "page-1217"
107110
+ ],
107111
+ "required": [
107112
+ "page-0153",
107113
+ "page-0206",
107114
+ "page-0445",
107115
+ "page-0744",
107116
+ "page-0840",
107117
+ "page-0885",
107118
+ "page-0910",
107119
+ "page-0973",
107120
+ "page-0982",
107121
+ "page-1115",
107122
+ "page-1176",
107123
+ "page-1194"
107124
+ ],
106980
107125
  "modes": [
106981
107126
  "page-0154",
106982
107127
  "page-0681",
@@ -107330,32 +107475,6 @@
107330
107475
  "page-0219",
107331
107476
  "page-1215"
107332
107477
  ],
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
- ],
107359
107478
  "gauge": [
107360
107479
  "page-0166"
107361
107480
  ],
@@ -107463,11 +107582,6 @@
107463
107582
  "smtp,": [
107464
107583
  "page-0191"
107465
107584
  ],
107466
- "installation": [
107467
- "page-0194",
107468
- "page-1161",
107469
- "page-1162"
107470
- ],
107471
107585
  "starting": [
107472
107586
  "page-0194"
107473
107587
  ],
@@ -107701,14 +107815,6 @@
107701
107815
  "page-0203",
107702
107816
  "page-0554"
107703
107817
  ],
107704
- "optional:": [
107705
- "page-0198",
107706
- "page-0199",
107707
- "page-0201",
107708
- "page-0203",
107709
- "page-0807",
107710
- "page-1217"
107711
- ],
107712
107818
  "deployments": [
107713
107819
  "page-0198",
107714
107820
  "page-0199",
@@ -107973,19 +108079,6 @@
107973
108079
  "libvirt": [
107974
108080
  "page-0206"
107975
108081
  ],
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
- ],
107989
108082
  "groups": [
107990
108083
  "page-0206",
107991
108084
  "page-0524"
@@ -114333,6 +114426,7 @@
114333
114426
  "page-0150",
114334
114427
  "page-0151",
114335
114428
  "page-0152",
114429
+ "page-0153",
114336
114430
  "page-0154",
114337
114431
  "page-0155",
114338
114432
  "page-0156",