Netlify: env vars not loading in functions [2026 fix]
Netlify Functions can't access environment variables because they're not deployed with the function bundle. Deploy via CLI with `netlify deploy --prod` instead of git push.
Netlify: env vars not loading in functions [2026 fix]
TL;DR
Cause: Environment variables defined in Netlify UI aren't automatically bundled into Functions during deployment. Fix: Deploy usingnetlify deploy --prod CLI command instead of git-based deployments, or ensure netlify.toml includes function configuration.---
Exact Error Messages
Here are the real console outputs you'll see at 2am:
``` TypeError: Cannot read property 'DB_URL' of undefined at handler (/var/task/functions/db.js:5:12) ```
``` ReferenceError: process.env.API_KEY is not defined at Object.<anonymous> (/var/task/functions/api.js:12:4) ```
``` {"errorMessage":"process.env.STRIPE_SECRET is undefined","errorType":"ReferenceError"} ```
``` Error: ENOENT: no such file or directory, open '/var/task/.env.production' ```
``` {"statusCode":500,"body":"function invoked without proper environment setup"} ```
---
Broken Code vs. Fixed Code
❌ Broken: Relying on git-based auto-deployment
Your setup: ```javascript // functions/hello.js const dbUrl = process.env.DB_URL; const apiKey = process.env.API_KEY;
exports.handler = async (event) => { console.log('Using:', dbUrl, apiKey); // Both undefined return { statusCode: 500, body: 'Env vars missing' }; }; ```
Your deployment method: ```bash git push origin main
Netlify detects push → auto-deploys
BUT env vars from UI aren't bundled into function context
```Your netlify.toml (incomplete): ```toml [build] command = "npm run build" publish = "dist"
Missing functions configuration
```---
✅ Fixed: Proper environment variable injection
Step 1 - Update netlify.toml: ```toml [build] command = "npm run build" publish = "dist" functions = "netlify/functions"
[functions] node_bundler = "esbuild" # This ensures env vars are available at function runtime ```
Step 2 - Deploy with CLI (required): ```bash netlify link # One-time: connect local project to Netlify site netlify deploy --prod # Deploy with env vars properly injected ```
Step 3 - Access env vars correctly: ```javascript // functions/hello.js const dbUrl = process.env.DB_URL; const apiKey = process.env.API_KEY;
exports.handler = async (event) => { if (!dbUrl || !apiKey) { console.error('Missing env vars - verify netlify.toml and deploy with CLI'); return { statusCode: 500, body: 'Config error' }; } console.log('Success: env vars loaded'); return { statusCode: 200, body: 'Working' }; }; ```
Step 4 - Verify in Netlify UI: 1. Site settings → Build & deploy → Environment 2. Confirm your variables are listed 3. Check deploy log mentions function bundling
---
Why This Happens
Netlify Functions run in AWS Lambda containers. The Netlify UI stores env vars in their servers, but they're not automatically passed to the Lambda execution context when you use git-based deployments. Using the CLI (netlify deploy --prod) explicitly bundles the variables into each function deployment.
Note on version behavior: I'm uncertain if Netlify's automatic environment injection via git webhooks changed in 2025-2026. If you're on a specific Netlify plan tier, behavior may differ—check your [Functions documentation](https://docs.netlify.com/functions/overview/) for current details.
---
Still broken? Check these too
1. Function location wrong: Netlify expects functions in netlify/functions/ or path specified in netlify.toml. Move files if they're in functions/ at project root—that's for local dev only.
2. Build cache hiding changes: Netlify may be serving cached builds. Go to Site settings → Build & deploy → Trigger deploy → Clear cache and redeploy.
3. Environment variable scope: Vars set in UI apply to builds AND functions by default, but check if you accidentally scoped them to "Build" only instead of "All contexts."
---
Related Guides
---
Official Resources
📖 [Netlify Functions Environment Variables - Official Docs](https://docs.netlify.com/functions/overview/#environment-variables)
---
Quick Checklist
netlify.toml includes functions = "netlify/functions"netlify deploy --prod (not git push alone)netlify/functions/*.js)---
Found a different variation? Drop it in the comments—especially if you're using edge functions, Deno runtime, or a specific plan tier where behavior differs. Your 2am debugging insight helps others.