Netlify: env vars not loading in functions [2026 fix]

Environment variables undefined in Netlify Functions due to missing netlify.toml config or incorrect build settings.

Netlify: env vars not loading in functions [2026 fix]

TL;DR

Cause: Your netlify.toml lacks a [functions] section or environment variables aren't declared in Netlify UI/toml, causing functions to receive undefined instead of values.

Fix: Add [functions] block to netlify.toml and redeploy, OR set env vars in Netlify dashboard → Site settings → Build & deploy → Environment.

---

Real Console Error Messages

You'll see one or more of these:

``` TypeError: Cannot read property 'toLowerCase' of undefined at handler (/var/task/function.js:15:3) ```

``` ReferenceError: process.env.STRIPE_KEY is not defined at exports.handler (/opt/nodejs/node_modules/handler.js:8:12) ```

``` Error: Missing required environment variable: DB_URL undefined !== 'postgresql://...' ```

``` Function invocation failed: Error processing event with Lambda runtime Environment variable "API_TOKEN" returned undefined ```

``` Netlify Function error: process.env.SUPABASE_URL is undefined Check your netlify.toml [functions] config or dashboard settings ```

---

Broken Code vs. Exact Fix

❌ BROKEN: Missing netlify.toml configuration

```toml

netlify.toml (incomplete)

[build] command = "npm run build" publish = "dist"

← No [functions] section!

```

```javascript // functions/api.js exports.handler = async (event) => { const apiKey = process.env.STRIPE_KEY; // undefined! console.log(apiKey); // logs: undefined return { statusCode: 500, body: "Missing API key" }; }; ```

✅ FIXED: Add [functions] block + redeploy

```toml

netlify.toml (complete)

[build] command = "npm run build" publish = "dist"

[functions] node_bundler = "esbuild" directory = "functions" ```

```javascript // functions/api.js (unchanged code now works) exports.handler = async (event) => { const apiKey = process.env.STRIPE_KEY; // Now loads correctly! console.log(apiKey); // logs: sk_live_... return { statusCode: 200, body: "Success" }; }; ```

Also add via Netlify Dashboard:

1. Go to Site settings → Build & deploy → Environment 2. Click Edit variables 3. Add key-value pairs: - STRIPE_KEY = sk_live_... - DB_URL = postgresql://... 4. Deploy site (Settings → Deploys → trigger deploy)

---

Alternative: Using .env.example + .env locally

If you want local testing to match production:

```bash

.env.example (commit to git)

STRIPE_KEY= DB_URL= API_TOKEN=

.env.local (gitignored, local only)

STRIPE_KEY=sk_test_local DB_URL=postgresql://localhost API_TOKEN=dev_token_123 ```

```javascript // functions/api.js const stripe = require('stripe')(process.env.STRIPE_KEY); // Reads from .env.local locally, from dashboard vars on Netlify ```

---

Version-specific behavior

I'm uncertain whether: Netlify Functions behavior differs between Node 14, 16, 18, and 20 runtimes regarding env var timing. If you're on an older runtime, try explicitly specifying runtime in netlify.toml:

```toml [functions] node_bundler = "esbuild" node_version = "18.0.0" ```

Older versions may require full redeployment (not just pushing new code) for env vars to take effect.

---

Still broken? Check these too

1. Build-time vs. Runtime variables: If your variables are used during npm run build, set them in dashboard *and* in Build & deploy → Environment. Frontend build vars need NETLIFY_ prefix in some cases—[see our guide on build vars](/?guide=netlify-build-env).

2. Netlify CLI local testing: Running netlify dev locally pulls env vars from .env files, not the dashboard. Use netlify env:list to verify what's deployed, then netlify env:set KEY value to push new vars without UI.

3. Function timeout or cold start issues: Environment variables *are* loaded, but function fails before using them. Check CloudWatch logs in Netlify → Functions tab. Also see [our Lambda timeout guide](/?guide=netlify-function-timeout).

---

Official Documentation

  • [Netlify Environment Variables Docs](https://docs.netlify.com/configure-builds/environment-variables/)
  • [Netlify Functions Reference](https://docs.netlify.com/functions/overview/)
  • [netlify.toml Configuration](https://docs.netlify.com/configure-builds/file-based-configuration/)
  • ---

    Quick Checklist

  • [ ] netlify.toml has [functions] section with directory = "functions"
  • [ ] Environment variables set in Netlify dashboard (Site settings → Build & deploy → Environment)
  • [ ] Site redeployed *after* adding env vars (not just code push)
  • [ ] Using process.env.VARIABLE_NAME in function, not process.env['VARIABLE_NAME'] (both work, but verify syntax)
  • [ ] Function file is in correct directory (default: netlify/functions/ or custom in netlify.toml)
  • [ ] Checked function logs in Netlify dashboard for actual error message
  • ---

    Found a different variation? Drop it in the comments.

    🔥 0d
    LIVE
    ↓ PlanetScale rage spiking •⚠ Vercel pricing complaints •↑ Railway gaining fast •↑ Supabase happiness rising •↑ Resend loved by devs •↓ PlanetScale rage spiking •⚠ Vercel pricing complaints •↑ Railway gaining fast •↑ Supabase happiness rising
    DEVELOPER PAIN RADAR // Loading...

    Developers complain.
    Opportunities appear.

    We track what developers are struggling with today — and what opportunities that creates.

    —
    guides today
    —
    avg happiness
    🔥 Pain
    📖 Guides
    🔭 Explore
    👤 Mine
    🔥 Pain Radar — rage scores today
    ↗ share
    💡 Opportunity Feed — pain = market gap
    📈 Tool Momentum
    all scores →
    📖 Latest Guide
    all guides →
    📖 All Guides
    📊 Tool Scores
    + Submit
    📰 Hacker News
    ➕ Submit a Tool
    ← back