Netlify: env vars not loading in functions [2026 fix]
Environment variables aren't passed to Netlify Functions at runtime. Move vars from .env to netlify.toml [build] or UI Settings.
Netlify: env vars not loading in functions [2026 fix]
TL;DR
Cause: Netlify Functions run in a separate context and don't automatically read.env files; they only access vars defined in netlify.toml or the Netlify UI.
Fix: Define environment variables in netlify.toml under [build] section or add them via Netlify dashboard → Site settings → Build & deploy → Environment.---
Real Console Error Messages
You'll likely see one of these:
``` Error: Cannot find module or its corresponding type declarations. (code: ENOENT) at /var/task/functions/api.js:5 require('process').env.DATABASE_URL // undefined ```
``` TypeError: Cannot read property 'split' of undefined at connectDatabase (/var/task/functions/db.js:12) const [host, port] = process.env.DB_HOST.split(':'); ^ ```
``` {"errorMessage":"process.env.STRIPE_KEY is undefined","errorType":"ReferenceError"} ```
``` Failed to load resource: the server responded with a status of 500 (Internal Server Error) Function error: Reference to undefined variable: API_TOKEN ```
``` netlify/functions/handler.js - SyntaxError: Unexpected token u in JSON at position 0 // Often caused by JSON.parse(undefined) when env var is missing ```
---
Side-by-Side: Broken Code → Fixed Code
❌ Broken Approach
File: .env
```
DATABASE_URL=postgresql://user:pass@localhost/db
API_KEY=secret123
STRIPE_KEY=sk_live_xyz
```
File: netlify/functions/api.js
```javascript
const dbUrl = process.env.DATABASE_URL; // ❌ undefined at runtime
const apiKey = process.env.API_KEY; // ❌ undefined at runtime
exports.handler = async (event) => { const db = await connect(dbUrl); // CRASHES HERE return { statusCode: 500 }; }; ```
✅ Fixed Approach
File: netlify.toml
```toml
[build]
command = "npm run build"
functions = "netlify/functions"
environment = { DATABASE_URL = "postgresql://user:pass@localhost/db", API_KEY = "secret123", STRIPE_KEY = "sk_live_xyz" }
```
OR use UI: Netlify Dashboard → Site settings → Build & deploy → Environment variables → Add variable
File: netlify/functions/api.js (same code, now works)
```javascript
const dbUrl = process.env.DATABASE_URL; // ✅ loads from netlify.toml
const apiKey = process.env.API_KEY; // ✅ loads from netlify.toml
exports.handler = async (event) => { const db = await connect(dbUrl); // ✅ WORKS return { statusCode: 200, body: JSON.stringify({ success: true }) }; }; ```
Important note: We're uncertain whether netlify.toml inline environment variables support multiline secrets in all versions (2024-2026). For sensitive data or complex values, use the Netlify UI instead.
---
Step-by-Step Deployment Fix
1. Stop relying on .env — Netlify Functions don't read it during execution.
2. Choose one method:
- Option A (Recommended for secrets): Netlify Dashboard → Site settings → Build & deploy → Environment variables
- Option B (For non-sensitive config): Add to netlify.toml
3. Test locally with Netlify CLI:
```bash
npm install -g netlify-cli
netlify dev
```
This simulates the production environment and will load vars from netlify.toml or .env (for local development only).
4. Verify in production:
```bash
curl https://your-site.netlify.app/.netlify/functions/api
```
---
Still broken? Check these too
1. Build-time vs. Runtime confusion
- Variables in [build] section are available during npm run build AND in Functions
- Variables needed only at build time (like CI=true) don't auto-populate Functions; explicitly add them
- [Netlify environment variables scope guide](/?guide=netlify-build-runtime-vars)
2. Netlify CLI not reading .env
- If netlify dev isn't loading your .env, create .env.example and manually add vars to netlify.toml for local testing
- Verify netlify/functions path matches your netlify.toml config
3. Access control & branch deploys
- Environment variables set in UI apply to all branches by default
- For branch-specific vars, use context.production or context.deploy-preview in netlify.toml
- [Netlify context-based configuration](/?guide=netlify-context-builds)
---
Reference
Official Netlify docs: https://docs.netlify.com/functions/overview/?fn-language=js#environment-variables
Key takeaway: .env files are for local development only. Production Netlify Functions require environment variables defined in netlify.toml or the Netlify UI dashboard.
---
Found a different variation? Drop it in the comments—does your error look different, or did you solve it another way? We update this guide based on real-world 2am incidents. 🚀