Netlify: env vars not loading in functions [2026 fix]
Netlify functions can't access env vars because they're not exposed to the build context. Redeploy after adding vars to Site settings → Environment.
Netlify: env vars not loading in functions [2026 fix]
TL;DR
Cause: Environment variables defined locally or in.env files aren't automatically sent to Netlify's function runtime.
Fix: Add all variables to Netlify dashboard (Site settings → Environment variables) and redeploy.---
Real Console Error Messages
Here are exact errors you'll see at 2am:
``` ReferenceError: process is not defined at /var/task/functions/api.js:12:15 ```
``` TypeError: Cannot read property 'DATABASE_URL' of undefined at handler (/var/task/.netlify/functions/query.js:5:3) ```
``` Error: env variable API_KEY is undefined in production at queryAPI (/var/task/functions/fetch-data.js:18:42) ```
``` [Functions] Loaded function api — failed to load env vars from context ```
```
Uncaught SyntaxError: Unexpected token u in JSON at position 0
at JSON.parse (<anonymous>)
at /var/task/functions/config.js:9:14
```
*(This happens when process.env.CONFIG is undefined and code tries to parse it)*
---
Broken Code → Exact Fix
❌ BROKEN: Relying on .env file
```javascript // netlify/functions/api.js require('dotenv').config();
exports.handler = async (event) => { const apiKey = process.env.API_KEY; // ← undefined in production const dbUrl = process.env.DATABASE_URL; // ← undefined in production return { statusCode: 200, body: JSON.stringify({ apiKey, dbUrl }) }; }; ```
✅ FIXED: Variables in Netlify dashboard
Step 1: Add to Netlify
1. Go to your site on netlify.com
2. Site settings → Environment variables
3. Click "Add a variable" and enter:
- Key: API_KEY
- Value: your-actual-key
4. Repeat for DATABASE_URL and all other vars
5. Redeploy (push to git or use Netlify UI)
Step 2: Update your code (no .env needed)
```javascript // netlify/functions/api.js // NO dotenv.config() needed — Netlify injects these automatically
exports.handler = async (event) => { const apiKey = process.env.API_KEY; // ← now defined ✓ const dbUrl = process.env.DATABASE_URL; // ← now defined ✓ if (!apiKey || !dbUrl) { return { statusCode: 500, body: JSON.stringify({ error: 'Missing env variables' }) }; } return { statusCode: 200, body: JSON.stringify({ apiKey, dbUrl }) }; }; ```
---
Version Note
I'm uncertain whether Netlify Functions in 2026 still require explicit redeploy for env var updates, or if they auto-sync. Previous behavior (2024-2025): Changes to environment variables required a new deploy. If you see immediate availability without redeploying, your Netlify version may have changed this. Always redeploy to be safe.
---
Quick Verification Checklist
netlify functions:invoke locally---
Still broken? Check these too
1. Using require('dotenv') in production
Netlify doesn't load .env files in the deployed function runtime. Remove require('dotenv').config() from production code. Keep it only in local dev.
2. Scope creep: vars not scoped to your deploy context If you set vars in "Build & deploy → Environment" instead of the main dashboard, they won't reach functions. Vars must be in the top-level "Environment variables" section, not nested under build settings.
3. Race condition with dependent services Your function loads correctly, but the *API or database* it's calling requires those env vars during initialization. Ensure your external service (database driver, HTTP client) also has access to credentials. For [related troubleshooting, see our Next.js + Netlify integration guide](/?guide=nextjs-netlify) and [Netlify Functions timeout fix](/?guide=netlify-timeout).
---
Official Reference
📖 [Netlify Functions Environment Variables](https://docs.netlify.com/functions/overview/#environment-variables) – Official docs
---
Summary
The fix is almost always: (1) add vars to Netlify dashboard, (2) redeploy, (3) wait 30 seconds, (4) test. Avoid .env files in production and verify vars are in the right settings section.
Found a different variation? Drop it in the comments — especially if you're using Edge Functions, monorepos, or recent Netlify config changes.