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

Environment variables undefined in Netlify Functions? Your functions.toml is missing or vars aren't deployed—redeploy with netlify deploy --prod.

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

TL;DR

Cause: Environment variables defined in Netlify UI aren't automatically injected into function runtime without explicit configuration or deployment trigger. Fix: Create netlify.toml with [functions] config and redeploy with netlify deploy --prod.

---

Real Console Error Messages

``` Error: undefined is not a function at Object.<anonymous> (/var/task/my-function.js:5:12) at Module._load (internal/modules/esm_loader.js:1043:23) ```

``` TypeError: Cannot read property 'apiKey' of undefined at handler (/var/task/functions/fetch-data.js:15:8) ```

``` ReferenceError: process.env.DATABASE_URL is not defined at exports.handler (/var/task/api/query.js:22:5) ```

``` Function invocation failed: Error loading module: SyntaxError in handler code near line 1: ReferenceError: process.env.STRIPE_KEY === undefined ```

``` 502 Bad Gateway x-nf-request-id: a1b2c3d4-e5f6-7890 Function returned an error: process.env.API_ENDPOINT is null ```

---

Broken Code vs. Fixed Code

❌ Broken: Missing netlify.toml Configuration

```javascript // functions/fetch-user.js exports.handler = async (event) => { const apiKey = process.env.API_KEY; // ← undefined at runtime const response = await fetch(https://api.example.com/user, { headers: { "Authorization": Bearer ${apiKey} } }); return { statusCode: 200, body: JSON.stringify(await response.json()) }; }; ```

Problem: You set API_KEY in Netlify UI (Site settings → Build & deploy → Environment), but functions don't receive it without explicit config.

✅ Fixed: Proper netlify.toml + Redeploy

Step 1: Create/Update netlify.toml in repo root

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

[[context.production.environment]] API_KEY = "$API_KEY" DATABASE_URL = "$DATABASE_URL" STRIPE_KEY = "$STRIPE_KEY" ```

OR (simpler approach for most cases):

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

Then keep vars ONLY in Netlify UI (Site settings → Build & deploy → Environment), but ensure you:

Step 2: Redeploy with explicit flag

```bash

From repo root

netlify deploy --prod ```

OR push to your connected branch (main/develop) and let Netlify's CI trigger the build.

Step 3: Function code stays the same

```javascript // functions/fetch-user.js (no changes needed!) exports.handler = async (event) => { const apiKey = process.env.API_KEY; // ← NOW defined const response = await fetch(https://api.example.com/user, { headers: { "Authorization": Bearer ${apiKey} } }); return { statusCode: 200, body: JSON.stringify(await response.json()) }; }; ```

What changed: Only the deployment method and config. The runtime now has access to env vars.

---

Why This Happens

Netlify Functions read environment variables from three sources (in priority order):

1. netlify.toml [context.*.environment] section 2. Netlify UI Environment variables (Site settings) 3. .env.production local file (for local testing only)

If your netlify.toml is missing *and* you haven't redeployed since adding vars to the UI, functions run with a stale environment snapshot.

---

Still broken? Check these too

1. Mixed Node versions: If you specify node_bundler = "esbuild" but use CommonJS require() instead of import, syntax errors occur. Verify your function uses compatible syntax for the bundler. [See Node.js runtime guide](/?guide=netlify-node-versions).

2. Caching issue: Clear Netlify's build cache. Go to Site settings → Builds & deploy → Clear cache and retry the deploy. Sometimes stale artifacts block env injection.

3. Function format mismatch: Ensure functions are in netlify/functions/ directory (not functions/ at root unless configured differently in netlify.toml with directory property). Check [build.functions] path in your config file. [Reference on function placement](/?guide=netlify-function-paths).

---

Official Resources

  • [Netlify Functions Environment Variables Documentation](https://docs.netlify.com/functions/overview/?fn-language=js#environment-variables)
  • [netlify.toml Configuration Reference](https://docs.netlify.com/configure-builds/file-api-reference/)
  • ---

    Quick Checklist

  • [ ] Env vars are set in Netlify UI (Site settings → Build & deploy → Environment)
  • [ ] netlify.toml exists with [functions] section
  • [ ] Functions are in netlify/functions/ directory
  • [ ] Ran netlify deploy --prod (or pushed to connected branch)
  • [ ] Waited 30 seconds for deployment to complete
  • [ ] Checked function logs in Netlify UI 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