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

Netlify functions can't read env vars because they're not deployed or the function runtime doesn't have access—redeploy with netlify.toml or use process.env correctly.

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

TL;DR

Cause: Environment variables defined in Netlify UI aren't automatically available to serverless functions unless explicitly configured in netlify.toml or you're running functions locally without proper setup.

Fix: Add environment block to netlify.toml OR rebuild/redeploy after setting vars in the UI (cache invalidation issue).

---

Real Console Error Messages

``` Error: Cannot read property 'DATABASE_URL' of undefined at Object.<anonymous> (/var/task/api/db.js:5:15) ```

``` TypeError: process.env.STRIPE_KEY is undefined at runtime Stack: at handler (/var/task/functions/checkout.js:12:8) ```

``` [Function] Error: Missing required environment variable: API_TOKEN Message: env var passed but function doesn't see it (null check failed) ```

``` Warning: Accessing undefined environment variable 'NEXT_PUBLIC_API_URL' at Runtime.handler (/var/task/.next/server/chunks/pages_api_route.js) ```

``` 502 Bad Gateway - Your function returned an error: ReferenceError: DB_USER is not defined ```

---

The Problem: Broken vs. Fixed Code

❌ BROKEN: netlify.toml doesn't declare function env vars

```toml [build] command = "npm run build" functions = "netlify/functions"

Missing: environment variables not declared here!

```

Function code tries to use it:

```javascript // netlify/functions/api.js exports.handler = async (event) => { const dbUrl = process.env.DATABASE_URL; // Returns undefined! const stripe = process.env.STRIPE_KEY; // Returns undefined! return { statusCode: 500, body: JSON.stringify({ error: 'Env vars missing' }) }; }; ```

---

✅ FIXED: Declare env vars in netlify.toml

```toml [build] command = "npm run build" functions = "netlify/functions"

[functions] environment = { DATABASE_URL = "postgres://...", STRIPE_KEY = "sk_live_..." } ```

Or use UI AND redeploy:

1. Go to Site settings → Environment variables 2. Add your vars (e.g., DATABASE_URL, STRIPE_KEY) 3. Trigger a rebuild: Go to Deploys → Trigger deploy

Function code (now works):

```javascript // netlify/functions/api.js exports.handler = async (event) => { const dbUrl = process.env.DATABASE_URL; // ✅ Works! const stripe = process.env.STRIPE_KEY; // ✅ Works! if (!dbUrl || !stripe) { return { statusCode: 500, body: JSON.stringify({ error: 'Check netlify.toml or UI settings' }) }; } return { statusCode: 200, body: JSON.stringify({ success: true }) }; }; ```

---

Why This Happens

Netlify functions have TWO separate env var scopes:

1. Build-time (site build process) 2. Runtime (when function executes)

Variables set only in the UI don't always propagate to the function runtime without a redeploy. The netlify.toml approach explicitly binds them.

Local development caveat: If you're testing locally with netlify dev, make sure you have a .env.local file:

```bash

.env.local (only for local dev, never commit)

DATABASE_URL=postgres://localhost/test STRIPE_KEY=sk_test_123 ```

---

Still broken? Check these too

1. [Serverless function timeouts and cold starts](/?guide=netlify-timeout) — Your function might crash before logging env vars. Add explicit error handling and check function duration.

2. [Next.js API routes vs. Netlify Functions confusion](/?guide=nextjs-netlify-functions) — If using Next.js on Netlify, NEXT_PUBLIC_* vars work differently than in standard functions. Rebuild required.

3. Function deployment cache issue — Sometimes Netlify doesn't flush the function bundle cache. Force clear: delete the .netlify folder locally, commit changes, and push to trigger a clean rebuild.

---

Verification Checklist

✓ Restart netlify dev after changing .env.local ✓ Redeploy after changing UI environment variables ✓ Check that netlify.toml isn't in .gitignore (must be committed) ✓ Verify env var names match exactly (case-sensitive!) ✓ Don't mix NEXT_PUBLIC_ prefix rules with standard function vars ✓ Check function logs in Netlify dashboard → Functions tab → Recent logs

---

Official Resources

  • [Netlify Environment Variables Documentation](https://docs.netlify.com/environment-variables/overview/)
  • [Netlify Functions Runtime Environment](https://docs.netlify.com/functions/overview/)
  • ---

    Found a different variation? Drop it in the comments

    This guide covers the most common scenario (functions not seeing UI-defined vars), but Netlify environment handling varies by deployment method, build configuration, and function runtime. If you hit a different error or workaround, share it below—community knowledge saves the next person at 2am.

    🔥 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