The backend requires Node.js exactly 22.18.0. The @exulu/backend package includes a preinstall script that checks process.version and exits with a non-zero code if the version does not match:
Use nvm to pin the version. The example repo ships an .nvmrc. The Docker images (Dockerfile.backend, Dockerfile.worker) use node:22.18.0-slim explicitly.
Both the backend and worker Dockerfiles use node:22.18.0-slim (Debian-based). Alpine Linux is not supported. The ONNX runtime binaries that the knowledge-processing stack depends on are not published for Alpine. Switching to an Alpine base image will cause runtime errors during Python environment setup.
IMP requires Postgres 13 or later with the pgvector extension. The example compose file uses the official pgvector/pgvector:pg17 image, which ships with the extension pre-installed. On managed Postgres (AWS RDS, Azure, Google Cloud SQL), enable the pgvector extension yourself before first boot.
The LiteLLM proxy needs its own Postgres database for key management and spend tracking. Set LITELLM_DATABASE_URL to a connection string pointing to this separate database. It can be on the same Postgres server but must be a different database name.
Never set LITELLM_DATABASE_URL to the same database as the IMP application. The proxy runs schema migrations on startup and will attempt to drop tables that belong to the IMP schema.
Redis is required when you run workers. Without Redis, BullMQ cannot enqueue or dequeue background jobs (knowledge ingestion, evals, routines). The example compose file uses redis:7.If you deploy without workers (backend only), Redis is optional.
File uploads require an S3-compatible bucket. Supported targets include MinIO (local) and AWS S3 (production). The bucket must be created before you start the backend — IMP does not create buckets automatically.Supply the bucket details via the COMPANION_S3_* environment variables.
The following component versions are tested and pinned. Do not upgrade these without testing — the pins exist because upstream releases have broken compatibility.
litellm[proxy]==1.85.1 — the tested version for the embedded proxy. LiteLLM’s API surface changes frequently; upgrade deliberately.
prisma==0.15.0 — not included in litellm[proxy] at this version; pinned separately so the LiteLLM database integration works.
torch==2.5.1 — pinned because pyannote.audio (used for speaker diarization in transcription) imports torchaudio.AudioMetaData, which was removed in torch 2.6+.
transformers>=4.48,<5 — the 5.x line removed a kwarg that pyannote.audio 3.x still passes to hf_hub_download().
{"docsConfig":{"theme":"aspen","$schema":"https://mintlify.com/docs.json","name":"IMP Docs","description":"Documentation for IMP — the Intelligence Management Platform.","colors":{"primary":"#6f9a37","light":"#cef79e","dark":"#557a26"},"logo":{"light":"https://mintcdn.com/exulu/AoxglAoKLnpiSWrg/logo/imp-wordmark-light.svg?fit=max\u0026auto=format\u0026n=AoxglAoKLnpiSWrg\u0026q=85\u0026s=9b42068ec92bdc8c9edbfd0a097c1103","dark":"https://mintcdn.com/exulu/AoxglAoKLnpiSWrg/logo/imp-wordmark-dark.svg?fit=max\u0026auto=format\u0026n=AoxglAoKLnpiSWrg\u0026q=85\u0026s=a84a8146d264791641105aafa8cfce99"},"favicon":"https://mintcdn.com/exulu/AoxglAoKLnpiSWrg/logo/imp-icon.svg?fit=max\u0026auto=format\u0026n=AoxglAoKLnpiSWrg\u0026q=85\u0026s=7ac4f534736be19d46aa980180530371","background":{"color":{"light":"#f8f6f1","dark":"#1b1714"}},"footer":{"links":[{"header":"IMP","items":[{"label":"Intelligence Management Platform","href":"/get-started/what-is-imp"}]}]},"icons":{"library":"lucide"},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"exulu","hasAudioNarration":false,"actualSubdomain":"exulu","customDomains":["docs.intelligence-management-platform.com"],"gitSource":{"type":"github","owner":"qventu","repo":"exulu-backend","deployBranch":"main","contentDirectory":"mintlify-docs","isPrivate":false,"mountPath":"","label":""},"feedback":{"thumbs":true,"edits":true,"issues":true},"entitlements":{},"buildId":"6ad7083d07bd205c1a9ff19c","clientVersion":"0.0.4094","searchFilterCounts":[{"language":"default","tag":"API Reference","count":101},{"language":"default","tag":"REST","count":73},{"language":"default","tag":"Developers","count":54},{"language":"default","tag":"Building","count":24},{"language":"default","tag":"Core classes","count":24},{"language":"default","tag":"Core types","count":23},{"language":"default","tag":"User Guide","count":21},{"language":"default","tag":"Self-Hosting","count":16},{"language":"default","tag":"Skills","count":16},{"language":"default","tag":"Chat","count":15}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"styles.css","content":"@font-face{font-family:\"Aspekta\";font-style:normal;font-weight:400;src:url(\"/fonts/inter-tight-400.woff2\") format(\"woff2\");font-display:swap}@font-face{font-family:\"Aspekta\";font-style:normal;font-weight:500;src:url(\"/fonts/inter-tight-500.woff2\") format(\"woff2\");font-display:swap}@font-face{font-family:\"RobotoMono\";font-style:normal;font-weight:400;src:url(\"/fonts/roboto-mono-400.woff2\") format(\"woff2\");font-display:swap}:root{--imp-bone: #f8f6f1;--imp-ink: #222f30;--imp-void: #1b1714;--imp-tissue: #efece4;--imp-lime: #cef79e;--imp-olive: #6f9a37;--imp-hair-light: #e4ddd0;--imp-hair-dark: #4d5757}body{font-family:\"Aspekta\", \"Inter Tight\", system-ui, sans-serif;letter-spacing:-0.011em}h1,h2,h3,h4{font-family:\"Aspekta\", \"Inter Tight\", system-ui, sans-serif;font-weight:500;letter-spacing:-0.03em}code,pre,kbd,samp{font-family:\"RobotoMono\", \"Roboto Mono\", ui-monospace, monospace}*,*::before,*::after{border-radius:0!important}"}],"page":{"pagePath":"self-hosting/requirements","slug":"/self-hosting/requirements","pageMetadata":{"title":"Requirements","description":"Runtime, infrastructure, and license prerequisites for self-hosting IMP.","icon":"list-checks","href":"/self-hosting/requirements"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Runtime, infrastructure, and license prerequisites for self-hosting IMP.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(_components.p,{children:`This page lists every hard requirement before you start the quickstart. Skipping any of these will cause the deployment to fail at a specific step.`}),`\n`,_jsx(Heading,{level:`2`,id:`node-js`,children:`Node.js`}),`\n`,_jsxs(_components.p,{children:[`The backend requires Node.js `,_jsxs(_components.strong,{children:[`exactly `,_jsx(_components.code,{children:`22.18.0`})]}),`. The `,_jsx(_components.code,{children:`@exulu/backend`}),` package includes a `,_jsx(_components.code,{children:`preinstall`}),` script that checks `,_jsx(_components.code,{children:`process.version`}),` and exits with a non-zero code if the version does not match:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`node`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -e`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"if (process.version !== 'v22.18.0') { process.exit(1); }\"`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Use `,_jsx(_components.a,{href:`https://github.com/nvm-sh/nvm`,children:`nvm`}),` to pin the version. The example repo ships an `,_jsx(_components.code,{children:`.nvmrc`}),`. The Docker images (`,_jsx(_components.code,{children:`Dockerfile.backend`}),`, `,_jsx(_components.code,{children:`Dockerfile.worker`}),`) use `,_jsx(_components.code,{children:`node:22.18.0-slim`}),` explicitly.`]}),`\n`,_jsx(Heading,{level:`2`,id:`container-base-image`,children:`Container base image`}),`\n`,_jsxs(_components.p,{children:[`Both the backend and worker Dockerfiles use `,_jsx(_components.code,{children:`node:22.18.0-slim`}),` (Debian-based). `,_jsx(_components.strong,{children:`Alpine Linux is not supported.`}),` The ONNX runtime binaries that the knowledge-processing stack depends on are not published for Alpine. Switching to an Alpine base image will cause runtime errors during Python environment setup.`]}),`\n`,_jsx(Heading,{level:`2`,id:`postgres-with-pgvector`,children:`Postgres with pgvector`}),`\n`,_jsxs(_components.p,{children:[`IMP requires Postgres 13 or later with the `,_jsx(_components.code,{children:`pgvector`}),` extension. The example compose file uses the official `,_jsx(_components.code,{children:`pgvector/pgvector:pg17`}),` image, which ships with the extension pre-installed. On managed Postgres (AWS RDS, Azure, Google Cloud SQL), enable the `,_jsx(_components.code,{children:`pgvector`}),` extension yourself before first boot.`]}),`\n`,_jsx(Heading,{level:`2`,id:`a-second-postgres-database-for-litellm`,children:`A second Postgres database for LiteLLM`}),`\n`,_jsxs(_components.p,{children:[`The LiteLLM proxy needs its own Postgres database for key management and spend tracking. Set `,_jsx(_components.code,{children:`LITELLM_DATABASE_URL`}),` to a connection string pointing to this separate database. It can be on the same Postgres server but must be a different database name.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Never set `,_jsx(_components.code,{children:`LITELLM_DATABASE_URL`}),` to the same database as the IMP application. The proxy runs schema migrations on startup and will attempt to drop tables that belong to the IMP schema.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`redis-7`,children:`Redis 7`}),`\n`,_jsxs(_components.p,{children:[`Redis is required when you run workers. Without Redis, BullMQ cannot enqueue or dequeue background jobs (knowledge ingestion, evals, routines). The example compose file uses `,_jsx(_components.code,{children:`redis:7`}),`.`]}),`\n`,_jsx(_components.p,{children:`If you deploy without workers (backend only), Redis is optional.`}),`\n`,_jsx(Heading,{level:`2`,id:`s3-compatible-storage`,children:`S3-compatible storage`}),`\n`,_jsx(_components.p,{children:`File uploads require an S3-compatible bucket. Supported targets include MinIO (local) and AWS S3 (production). The bucket must be created before you start the backend — IMP does not create buckets automatically.`}),`\n`,_jsxs(_components.p,{children:[`Supply the bucket details via the `,_jsx(_components.code,{children:`COMPANION_S3_*`}),` environment variables.`]}),`\n`,_jsx(Heading,{level:`2`,id:`version-pins`,children:`Version pins`}),`\n`,_jsx(_components.p,{children:`The following component versions are tested and pinned. Do not upgrade these without testing — the pins exist because upstream releases have broken compatibility.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Component`}),_jsx(_components.th,{children:`Pinned version`}),_jsx(_components.th,{children:`Source`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Node.js`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`22.18.0`}),` (exact)`]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`backend/package.json`}),` engines field`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`litellm[proxy]`})}),_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`1.85.1`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`backend/ee/python/requirements.txt`})})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`prisma`}),` (Python)`]}),_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`0.15.0`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`backend/ee/python/requirements.txt`})})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`torch`}),` / `,_jsx(_components.code,{children:`torchaudio`})]}),_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`2.5.1`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`backend/ee/python/requirements.txt`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`pgvector image`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`pgvector/pgvector:pg17`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`docker-compose.services.yml`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`MinIO image`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`quay.io/minio/minio:RELEASE.2025-04-22T22-12-26Z`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`docker-compose.services.yml`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Redis image`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`redis:7`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`docker-compose.services.yml`})})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`notes-on-the-python-pins`,children:`Notes on the Python pins`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`litellm[proxy]==1.85.1`})}),` — the tested version for the embedded proxy. LiteLLM’s API surface changes frequently; upgrade deliberately.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`prisma==0.15.0`})}),` — not included in `,_jsx(_components.code,{children:`litellm[proxy]`}),` at this version; pinned separately so the LiteLLM database integration works.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`torch==2.5.1`})}),` — pinned because `,_jsx(_components.code,{children:`pyannote.audio`}),` (used for speaker diarization in transcription) imports `,_jsx(_components.code,{children:`torchaudio.AudioMetaData`}),`, which was removed in torch 2.6+.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:_jsx(_components.code,{children:`transformers>=4.48,\u003c5`})}),` — the 5.x line removed a kwarg that `,_jsx(_components.code,{children:`pyannote.audio`}),` 3.x still passes to `,_jsx(_components.code,{children:`hf_hub_download()`}),`.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`gpu-optional-—-whisper-transcription-only`,children:`GPU (optional — Whisper transcription only)`}),`\n`,_jsx(_components.p,{children:`The Whisper transcription server uses WhisperX with CUDA acceleration. Required only if you use the meeting transcription feature.`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[`CUDA `,_jsx(_components.code,{children:`12.4`})]}),`\n`,_jsxs(_components.li,{children:[`NVIDIA driver `,_jsx(_components.code,{children:`≥ 550`})]}),`\n`,_jsx(_components.li,{children:`At least 8 GB VRAM recommended for the default model size`}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`hardware-guidance`,children:`Hardware guidance`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Service`}),_jsx(_components.th,{children:`Minimum`}),_jsx(_components.th,{children:`Notes`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Backend`}),_jsx(_components.td,{children:`2 vCPU, 2 GB RAM`}),_jsx(_components.td,{children:`LiteLLM proxy runs in the same process`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Worker`}),_jsxs(_components.td,{children:[`2 vCPU, `,_jsx(_components.strong,{children:`8 GB RAM`})]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`--max-old-space-size=8192`}),` is set in the start script; below 8 GB the Node.js heap will OOM on large documents`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Postgres`}),_jsx(_components.td,{children:`2 vCPU, 4 GB RAM`}),_jsx(_components.td,{children:`Scale with the number of knowledge chunks`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Redis`}),_jsx(_components.td,{children:`1 vCPU, 1 GB RAM`}),_jsx(_components.td,{children:`Queue depth is typically low`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`MinIO`}),_jsx(_components.td,{children:`1 vCPU, 1 GB RAM + storage`}),_jsx(_components.td,{children:`Size storage to your file upload volume`})]})]})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Requirements","description":"Runtime, infrastructure, and license prerequisites for self-hosting IMP.","icon":"list-checks","href":"/self-hosting/requirements"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Node.js","slug":"node-js","depth":2,"children":[]},{"title":"Container base image","slug":"container-base-image","depth":2,"children":[]},{"title":"Postgres with pgvector","slug":"postgres-with-pgvector","depth":2,"children":[]},{"title":"A second Postgres database for LiteLLM","slug":"a-second-postgres-database-for-litellm","depth":2,"children":[]},{"title":"Redis 7","slug":"redis-7","depth":2,"children":[]},{"title":"S3-compatible storage","slug":"s3-compatible-storage","depth":2,"children":[]},{"title":"Version pins","slug":"version-pins","depth":2,"children":[{"title":"Notes on the Python pins","slug":"notes-on-the-python-pins","depth":3,"children":[]}]},{"title":"GPU (optional — Whisper transcription only)","slug":"gpu-optional-—-whisper-transcription-only","depth":2,"children":[]},{"title":"Hardware guidance","slug":"hardware-guidance","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"exulu","siteName":"IMP Docs","title":"Requirements - IMP Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-07-15T17:47:11.679Z","originalFileLocation":"self-hosting/requirements.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Runtime, infrastructure, and license prerequisites for self-hosting IMP.\">\u003cmeta data-mint-head name=\"application-name\" content=\"IMP Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/exulu/N9cNIKTf5pwOldAi/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/exulu/N9cNIKTf5pwOldAi/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/exulu/N9cNIKTf5pwOldAi/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/exulu/N9cNIKTf5pwOldAi/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/exulu/N9cNIKTf5pwOldAi/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/exulu/N9cNIKTf5pwOldAi/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/exulu/N9cNIKTf5pwOldAi/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/exulu/N9cNIKTf5pwOldAi/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/exulu/N9cNIKTf5pwOldAi/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Requirements - IMP Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"Runtime, infrastructure, and license prerequisites for self-hosting IMP.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"IMP Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.intelligence-management-platform.com/self-hosting/requirements\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://exulu.mintlify.site/_mintlify/api/og/v2?division=Deploy\u0026amp;title=Requirements\u0026amp;description=Runtime%2C+infrastructure%2C+and+license+prerequisites+for+self-hosting+IMP.\u0026amp;theme=0a86c3c8bb60ae0aa06a3652\u0026amp;signature=c10ad15f67e1e64adc91d6d80e072e419292743f1058505513f0f37fea6fd7a2\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Requirements - IMP Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Runtime, infrastructure, and license prerequisites for self-hosting IMP.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://exulu.mintlify.site/_mintlify/api/og/v2?division=Deploy\u0026amp;title=Requirements\u0026amp;description=Runtime%2C+infrastructure%2C+and+license+prerequisites+for+self-hosting+IMP.\u0026amp;theme=0a86c3c8bb60ae0aa06a3652\u0026amp;signature=c10ad15f67e1e64adc91d6d80e072e419292743f1058505513f0f37fea6fd7a2\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/exulu/N9cNIKTf5pwOldAi/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"IMP Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#6f9a37\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.intelligence-management-platform.com/self-hosting/requirements\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/self-hosting/requirements.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.intelligence-management-platform.com/#organization\",\"name\":\"IMP Docs\",\"url\":\"https://docs.intelligence-management-platform.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/exulu/AoxglAoKLnpiSWrg/logo/imp-wordmark-light.svg?fit=max\u0026auto=format\u0026n=AoxglAoKLnpiSWrg\u0026q=85\u0026s=9b42068ec92bdc8c9edbfd0a097c1103\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.intelligence-management-platform.com#website\",\"name\":\"IMP Docs\",\"url\":\"https://docs.intelligence-management-platform.com\",\"publisher\":{\"@id\":\"https://docs.intelligence-management-platform.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.intelligence-management-platform.com/self-hosting/requirements#webpage\",\"url\":\"https://docs.intelligence-management-platform.com/self-hosting/requirements\",\"name\":\"Requirements\",\"description\":\"Runtime, infrastructure, and license prerequisites for self-hosting IMP.\",\"dateModified\":\"2026-07-15T17:47:11.679Z\",\"isPartOf\":{\"@id\":\"https://docs.intelligence-management-platform.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.intelligence-management-platform.com/self-hosting/requirements#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.intelligence-management-platform.com/self-hosting/requirements#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Deploy\",\"item\":\"https://docs.intelligence-management-platform.com/self-hosting/architecture\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Requirements\",\"item\":\"https://docs.intelligence-management-platform.com/self-hosting/requirements\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.intelligence-management-platform.com/self-hosting/requirements#article\",\"headline\":\"Requirements\",\"name\":\"Requirements\",\"description\":\"Runtime, infrastructure, and license prerequisites for self-hosting IMP.\",\"url\":\"https://docs.intelligence-management-platform.com/self-hosting/requirements\",\"mainEntityOfPage\":{\"@id\":\"https://docs.intelligence-management-platform.com/self-hosting/requirements#webpage\"},\"dateModified\":\"2026-07-15T17:47:11.679Z\",\"publisher\":{\"@id\":\"https://docs.intelligence-management-platform.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.intelligence-management-platform.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"IMP Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"IMP Docs","nav":{"global":null,"tabs":[{"tab":"Get Started","icon":"rocket","pages":[{"title":"Get Started","href":""}]},{"tab":"User Guide","icon":"message-square","pages":[{"title":"User Guide","href":"/user-guide/chat/overview"}]},{"tab":"Building","icon":"hammer","pages":[{"title":"Building","href":"/building/agents/overview"}]},{"tab":"Administration","icon":"shield","pages":[{"title":"Administration","href":"/administration/users-access/overview"}]},{"tab":"Self-Hosting","icon":"server","groups":[{"group":"Deploy","pages":[{"title":"Architecture","description":"Service topology and data flow for a self-hosted IMP deployment.","icon":"network","href":"/self-hosting/architecture"},{"title":"Requirements","icon":"list-checks","href":"/self-hosting/requirements"},{"title":"Quickstart","description":"Deploy IMP with Docker Compose using the example repository.","icon":"play","href":"/self-hosting/quickstart"}]},{"group":"Services","pages":[{"title":"Postgres","icon":"database","href":"/self-hosting/services/postgres"},{"title":"Redis","icon":"layers","href":"/self-hosting/services/redis"},{"title":"S3-compatible storage","icon":"hard-drive","href":"/self-hosting/services/s3-storage"},{"title":"LiteLLM proxy","icon":"cpu","href":"/self-hosting/services/litellm"},{"title":"Whisper transcription server","icon":"mic","href":"/self-hosting/services/whisper"},{"title":"SMTP and authentication","icon":"lock","href":"/self-hosting/services/smtp-and-auth"},{"title":"Observability","icon":"activity","href":"/self-hosting/services/observability"}]},{"group":"Operate","pages":[{"title":"Containers","icon":"box","href":"/self-hosting/containers"},{"title":"Environment variables","icon":"settings","href":"/self-hosting/environment-variables"},{"title":"Branding","icon":"paintbrush","href":"/self-hosting/branding"},{"title":"Database","icon":"database","href":"/self-hosting/database"},{"title":"Operations","icon":"settings-2","href":"/self-hosting/operations"},{"title":"Troubleshooting","icon":"circle-help","href":"/self-hosting/troubleshooting"}]}]},{"tab":"Developers","icon":"code","pages":[{"title":"Developers","href":"/developers/setup"}]},{"tab":"API Reference","icon":"braces","pages":[{"title":"API Reference","href":"/api-reference/rest/introduction"}]},{"tab":"Changelog","icon":"history","pages":[{"title":"Changelog","href":"/changelog"}]}]},"basePath":"","title":"Requirements - IMP Docs","buildId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","deploymentId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","dynamics":[],"chunks":[]}