Configure Nudgra OSS environment variables for local development and production.
Nudgra OSS reads environment variables from .env locally and from the app.environment section in docker-compose.yml in the recommended production setup.
Do not rotate BETTER_AUTH_SECRET or TOKEN_ENCRYPTION_KEY after real users or Instagram accounts are connected. Stored OAuth and Instagram tokens depend on those secrets.
For production, change the Postgres password in docker-compose.yml and update DATABASE_URL to match.pg-boss uses the PG_BOSS_SCHEMA schema, which defaults to pgboss.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Nudgra","colors":{"primary":"#2563EB","light":"#3B82F6","dark":"#1D4ED8"},"logo":{"light":"https://mintcdn.com/maikocorp/S7-2fsXh97zAL2iE/logo/light.svg?fit=max\u0026auto=format\u0026n=S7-2fsXh97zAL2iE\u0026q=85\u0026s=94fbb4924f2fb129a51f25e7c63809c7","dark":"https://mintcdn.com/maikocorp/S7-2fsXh97zAL2iE/logo/dark.svg?fit=max\u0026auto=format\u0026n=S7-2fsXh97zAL2iE\u0026q=85\u0026s=257e7ab478406e91ae51c2cf65731c7f"},"favicon":"https://mintcdn.com/maikocorp/S7-2fsXh97zAL2iE/favicon.svg?fit=max\u0026auto=format\u0026n=S7-2fsXh97zAL2iE\u0026q=85\u0026s=ff1cf91b3ab6ae60e2179023cabe02e9","appearance":{"default":"light"},"navbar":{"links":[{"href":"https://github.com/MaikoCode/nudgra-oss","label":"Nudgra OSS","type":"github"},{"href":"https://github.com/MaikoCode/nudgra-cloud","label":"Nudgra Cloud","type":"github"}]},"fonts":{"family":"Inter"},"styling":{"eyebrows":"breadcrumbs","latex":false},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"maikocorp","hasAudioNarration":false,"actualSubdomain":"maikocorp","customDomains":["docs.nudgra.com"],"gitSource":{"type":"github","owner":"maikocode","repo":"docs","deployBranch":"main","isPrivate":true,"contentDirectory":"","mountPath":"","label":""},"chroma":{"collectionId":"0acb7fdd-2603-40a3-9452-0323adf03d75","liveDeploymentHistoryId":"6a20dc65dc10703c7a4eb8c2","schemaVersion":"v2"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6a20dc65dc10703c7a4eb8c2:success","clientVersion":"0.0.3964","searchFilterCounts":[{"language":"default","tag":"Set up Nudgra Cloud","count":4},{"language":"default","tag":"Set up Nudgra OSS","count":4},{"language":"default","tag":"Shared setup","count":3},{"language":"default","tag":"Start here","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"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":"editor-v7-file-tree","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":"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":"pause-universal-search-reconcile","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":"per-site-search-delta","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":"editor-private-page-search","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":"editor-nav-generations","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":"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":"byok-sep-25","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":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","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}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"oss/environment-variables","slug":"/oss/environment-variables","pageMetadata":{"title":"Environment variables","description":"Configure Nudgra OSS environment variables for local development and production.","href":"/oss/environment-variables"},"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: \"Configure Nudgra OSS environment variables for local development and production.\"\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`,p:`p`,pre:`pre`,span:`span`,..._provideComponents(),...props.components},{CodeBlock,Heading,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`Nudgra OSS reads environment variables from `,_jsx(_components.code,{children:`.env`}),` locally and from the `,_jsx(_components.code,{children:`app.environment`}),` section in `,_jsx(_components.code,{children:`docker-compose.yml`}),` in the recommended production setup.`]}),`\n`,_jsx(Heading,{level:`2`,id:`local-baseline`,children:`Local baseline`}),`\n`,_jsxs(_components.p,{children:[`Copy `,_jsx(_components.code,{children:`.env.example`}),` to `,_jsx(_components.code,{children:`.env`}),`, then start from this local shape:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`21`,language:`text`,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:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`21`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`DATABASE_URL=postgres://nudgra:nudgra@localhost:5432/nudgra`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`DATABASE_POOL_MAX=10`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`DATABASE_SSL=false`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`SITE_URL=http://localhost:3000`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`BETTER_AUTH_URL=http://localhost:3000`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`BETTER_AUTH_SECRET=replace-with-a-random-secret`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`TOKEN_ENCRYPTION_KEY=replace-with-another-random-secret`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`TRUSTED_ORIGINS=http://localhost:3000,http://127.0.0.1:3000`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`OPERATOR_EMAIL_ALLOWLIST=you@example.com`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`DEFAULT_WORKSPACE_TIMEZONE=UTC`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`GOOGLE_CLIENT_ID=`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`GOOGLE_CLIENT_SECRET=`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`META_APP_ID=`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`META_APP_SECRET=`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`META_VERIFY_TOKEN=`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`META_GRAPH_API_VERSION=v23.0`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`production-baseline`,children:`Production baseline`}),`\n`,_jsx(_components.p,{children:`In production, these values must match your public domain:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`5`,language:`text`,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:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`5`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`SITE_URL=https://your-domain.com`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`BETTER_AUTH_URL=https://your-domain.com`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`TRUSTED_ORIGINS=https://your-domain.com`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`OPERATOR_EMAIL_ALLOWLIST=you@example.com`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`Set the Google and Meta values after you configure `,_jsx(_components.a,{href:`/shared/google-oauth`,children:`Google OAuth`}),` and `,_jsx(_components.a,{href:`/shared/meta-instagram-setup`,children:`Meta / Instagram setup`}),`.`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`text`,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:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`GOOGLE_CLIENT_ID=your-google-client-id`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`GOOGLE_CLIENT_SECRET=your-google-client-secret`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`META_APP_ID=your-instagram-app-id`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`META_APP_SECRET=your-instagram-app-secret`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`META_VERIFY_TOKEN=your-generated-webhook-verify-token`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Heading,{level:`2`,id:`secret-values`,children:`Secret values`}),`\n`,_jsxs(_components.p,{children:[`Generate `,_jsx(_components.code,{children:`BETTER_AUTH_SECRET`}),`, `,_jsx(_components.code,{children:`TOKEN_ENCRYPTION_KEY`}),`, and `,_jsx(_components.code,{children:`META_VERIFY_TOKEN`}),` with OpenSSL:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,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:`2`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`openssl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` rand`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -base64`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 32`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`openssl`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` rand`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -hex`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 32`})]}),`\n`]})})}),`\n`,_jsx(_components.p,{children:`Or generate them with Node:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,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:`2`,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:` \"console.log(require('crypto').randomBytes(32).toString('base64url'))\"`})]}),`\n`,_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:` \"console.log(require('crypto').randomBytes(32).toString('hex'))\"`})]}),`\n`]})})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Do not rotate `,_jsx(_components.code,{children:`BETTER_AUTH_SECRET`}),` or `,_jsx(_components.code,{children:`TOKEN_ENCRYPTION_KEY`}),` after real users or Instagram accounts are connected. Stored OAuth and Instagram tokens depend on those secrets.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`operator-access`,children:`Operator access`}),`\n`,_jsxs(_components.p,{children:[`Use `,_jsx(_components.code,{children:`OPERATOR_EMAIL_ALLOWLIST`}),` to limit who can sign in to the dashboard:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,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:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`OPERATOR_EMAIL_ALLOWLIST=operator@example.com,backup@example.com`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`The source app also supports `,_jsx(_components.code,{children:`NUDGRA_ALLOWED_EMAILS`}),` as a backwards-compatible alias. Prefer `,_jsx(_components.code,{children:`OPERATOR_EMAIL_ALLOWLIST`}),` in new deployments.`]}),`\n`,_jsx(Heading,{level:`2`,id:`postgres-and-jobs`,children:`Postgres and jobs`}),`\n`,_jsx(_components.p,{children:`The recommended Docker Compose deployment sets the app database URL to the internal Postgres service:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,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:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`DATABASE_URL=postgres://nudgra:nudgra@postgres:5432/nudgra`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`For production, change the Postgres password in `,_jsx(_components.code,{children:`docker-compose.yml`}),` and update `,_jsx(_components.code,{children:`DATABASE_URL`}),` to match.`]}),`\n`,_jsxs(_components.p,{children:[`pg-boss uses the `,_jsx(_components.code,{children:`PG_BOSS_SCHEMA`}),` schema, which defaults to `,_jsx(_components.code,{children:`pgboss`}),`.`]})]})}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":"Environment variables","description":"Configure Nudgra OSS environment variables for local development and production.","href":"/oss/environment-variables"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Local baseline","slug":"local-baseline","depth":2,"children":[]},{"title":"Production baseline","slug":"production-baseline","depth":2,"children":[]},{"title":"Secret values","slug":"secret-values","depth":2,"children":[]},{"title":"Operator access","slug":"operator-access","depth":2,"children":[]},{"title":"Postgres and jobs","slug":"postgres-and-jobs","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"maikocorp","siteName":"Nudgra","title":"Environment variables - Nudgra","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-06-03T11:40:43.156Z","originalFileLocation":"oss/environment-variables.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=\"light\"}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=\"Configure Nudgra OSS environment variables for local development and production.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Nudgra\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/maikocorp/3SmM2faoZyIylcDY/_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/maikocorp/3SmM2faoZyIylcDY/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/maikocorp/3SmM2faoZyIylcDY/_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/maikocorp/3SmM2faoZyIylcDY/_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/maikocorp/3SmM2faoZyIylcDY/_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/maikocorp/3SmM2faoZyIylcDY/_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/maikocorp/3SmM2faoZyIylcDY/_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/maikocorp/3SmM2faoZyIylcDY/_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/maikocorp/3SmM2faoZyIylcDY/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Environment variables - Nudgra\">\u003cmeta data-mint-head property=\"og:description\" content=\"Configure Nudgra OSS environment variables for local development and production.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Nudgra\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.nudgra.com/oss/environment-variables\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://maikocorp.mintlify.app/_mintlify/api/og/v2?division=Set+up+Nudgra+OSS\u0026amp;title=Environment+variables\u0026amp;description=Configure+Nudgra+OSS+environment+variables+for+local+development+and+production.\u0026amp;theme=fd4b2da0834a746ef95fcd1a\u0026amp;signature=c997acfe61b3b9781c1da4b6c856f140fb2beec88ff5d3c8227031fdff3efbf4\">\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=\"Environment variables - Nudgra\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Configure Nudgra OSS environment variables for local development and production.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://maikocorp.mintlify.app/_mintlify/api/og/v2?division=Set+up+Nudgra+OSS\u0026amp;title=Environment+variables\u0026amp;description=Configure+Nudgra+OSS+environment+variables+for+local+development+and+production.\u0026amp;theme=fd4b2da0834a746ef95fcd1a\u0026amp;signature=c997acfe61b3b9781c1da4b6c856f140fb2beec88ff5d3c8227031fdff3efbf4\">\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/maikocorp/3SmM2faoZyIylcDY/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Nudgra\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#2563EB\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.nudgra.com/oss/environment-variables\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/oss/environment-variables.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.nudgra.com/#organization\",\"name\":\"Nudgra\",\"url\":\"https://docs.nudgra.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/maikocorp/S7-2fsXh97zAL2iE/logo/light.svg?fit=max\u0026auto=format\u0026n=S7-2fsXh97zAL2iE\u0026q=85\u0026s=94fbb4924f2fb129a51f25e7c63809c7\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.nudgra.com#website\",\"name\":\"Nudgra\",\"url\":\"https://docs.nudgra.com\",\"publisher\":{\"@id\":\"https://docs.nudgra.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.nudgra.com/oss/environment-variables#webpage\",\"url\":\"https://docs.nudgra.com/oss/environment-variables\",\"name\":\"Environment variables\",\"description\":\"Configure Nudgra OSS environment variables for local development and production.\",\"dateModified\":\"2026-06-03T11:40:43.156Z\",\"isPartOf\":{\"@id\":\"https://docs.nudgra.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.nudgra.com/oss/environment-variables#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.nudgra.com/oss/environment-variables#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Set up Nudgra OSS\",\"item\":\"https://docs.nudgra.com/oss/overview\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Environment variables\",\"item\":\"https://docs.nudgra.com/oss/environment-variables\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.nudgra.com/oss/environment-variables#article\",\"headline\":\"Environment variables\",\"name\":\"Environment variables\",\"description\":\"Configure Nudgra OSS environment variables for local development and production.\",\"url\":\"https://docs.nudgra.com/oss/environment-variables\",\"mainEntityOfPage\":{\"@id\":\"https://docs.nudgra.com/oss/environment-variables#webpage\"},\"dateModified\":\"2026-06-03T11:40:43.156Z\",\"publisher\":{\"@id\":\"https://docs.nudgra.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.nudgra.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Nudgra\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Nudgra","nav":{"global":null,"products":[{"product":"Nudgra","icon":"house","description":"Choose a distribution and prepare the shared integrations.","pages":[{"title":"Nudgra","href":""}]},{"product":"Nudgra OSS","icon":"server","description":"Self-host Nudgra with TanStack Start, Postgres, Docker, and Caddy.","groups":[{"group":"Set up Nudgra OSS","pages":[{"title":"Nudgra OSS overview","href":"/oss/overview"},{"title":"Local development","description":"Run Nudgra OSS locally with Node.js, Postgres, and Better Auth.","href":"/oss/local-development"},{"title":"Environment variables","href":"/oss/environment-variables"},{"title":"Deploy on a VPS","description":"Deploy Nudgra OSS with Docker Compose, Postgres, and Caddy.","href":"/oss/deploy-vps"}]}]},{"product":"Nudgra Cloud","icon":"cloud","description":"Run Nudgra with Next.js, Convex Cloud, and Vercel.","pages":[{"title":"Nudgra Cloud","href":"/cloud/overview"}]}]},"title":"Environment variables - Nudgra","buildId":"dpl_HcHmUS6i3UwswnTHJUEdcTtwfdTQ","deploymentId":"dpl_HcHmUS6i3UwswnTHJUEdcTtwfdTQ","dynamics":[],"chunks":[]}