Netlify: env vars not loading in functions [2026 fix]
Env vars missing in Netlify Functions? Deploy without committing .env or use process.env in build context—redeploy to fix.
Netlify: env vars not loading in functions [2026 fix]
TL;DR
Cause: Environment variables defined in Netlify UI aren't automatically injected into serverless function scope at runtime.
Fix: Ensure vars are set in Netlify Site Settings → Environment, then redeploy (or use netlify env:set CLI), and access via process.env.VAR_NAME inside function handlers.
---
Exact Error Messages
Here are real console outputs you'll see:
``` TypeError: Cannot read property 'undefined' of undefined at handler (/var/task/src/functions/api.js:12:5) ```
``` ReferenceError: process is not defined at Object.<anonymous> (/var/task/src/functions/handler.js:5:3) ```
``` Error: Missing required environment variable: DATABASE_URL Stack at checkEnv (/var/task/src/functions/db.js:8:10) ```
``` {"errorMessage":"process.env.API_KEY returned undefined","errorType":"TypeError"} ```
``` FunctionError: Error while executing function caused by: process.env.STRIPE_KEY is undefined ```
---
Broken Code vs. Fixed Code
Pattern 1: Missing env var access
BROKEN:
```javascript
// netlify/functions/api.js
exports.handler = async (event) => {
const apiKey = API_KEY; // ❌ Reference undefined variable
const response = await fetch('https://api.example.com', {
headers: { 'Authorization': Bearer ${apiKey} }
});
return { statusCode: 200, body: JSON.stringify(response) };
};
```
FIXED:
```javascript
// netlify/functions/api.js
exports.handler = async (event) => {
const apiKey = process.env.API_KEY; // ✅ Access via process.env
if (!apiKey) {
return { statusCode: 500, body: JSON.stringify({ error: 'API_KEY not set' }) };
}
const response = await fetch('https://api.example.com', {
headers: { 'Authorization': Bearer ${apiKey} }
});
return { statusCode: 200, body: JSON.stringify(response) };
};
```
Pattern 2: Vars set locally but not on Netlify
BROKEN: ```bash
.env (committed to repo—bad practice)
DATABASE_URL=postgres://localhost API_SECRET=dev-secret-123 ```Then deployed without setting vars in Netlify UI—functions crash in production.
FIXED: ```bash
.env.local (gitignored for local development)
DATABASE_URL=postgres://localhost API_SECRET=dev-secret-123 ``````bash
Set on Netlify via CLI
netlify env:set DATABASE_URL "postgres://prod-server.db" netlify env:set API_SECRET "prod-secret-789" ```Or via UI: Site Settings → Environment variables → Add variable.
Pattern 3: Env vars in build context, not function context
BROKEN: ```javascript // netlify/functions/handler.js // Trying to use build-time vars at runtime const apiUrl = process.env.VITE_API_URL; // ❌ Build var, not available in function exports.handler = async () => { return { statusCode: 200, body: apiUrl }; }; ```
FIXED: ```javascript // netlify/functions/handler.js // Use runtime env vars (set in Netlify Site Settings) const apiUrl = process.env.API_URL; // ✅ Runtime var (no VITE_ prefix) exports.handler = async () => { return { statusCode: 200, body: apiUrl }; }; ```
Note: Build-time vars (prefixed VITE_, NEXT_PUBLIC_) are baked into client bundles. Serverless functions need separate runtime variables.
---
Critical Setup Checklist
1. Netlify UI: Go to Site Settings → Environment variables
2. Confirm each var is set with exact key name (case-sensitive)
3. Redeploy after adding vars — new functions don't auto-pick up vars from previous deploys
```bash
git push origin main # or manually trigger deploy
```
4. Verify in function logs: Check Netlify Functions logs (Site → Functions → Logs tab)
5. Local testing: Use netlify dev to test functions with actual env vars loaded
---
Still broken? Check these too
1. [Netlify Build fails with env vars](/guide=netlify-build-env) — If build step needs vars, set them separately in Build & Deploy settings
2. [Functions timeout after 10s](/guide=netlify-function-timeout) — Env var setup OK but API calls hang
3. Lambda cold starts exposing secrets — Never log process.env to console; attackers read function logs
---
Version Notes
I'm not certain if Netlify changed env var injection behavior between 2024–2026 CLI versions. If you're using netlify-cli@latest and still see undefined vars after redeploy, try upgrading: npm install -g netlify-cli@latest and clear local cache (~/.netlify).
---
Official Resources
---
Found a different variation? Drop it in the comments
If you hit a unique combo (e.g., env vars work in build but not in edge functions, or monorepo-specific issues), comment below with the error message and fix—we'll update this guide.