This error means a Supabase Edge Function tried to read an environment variable that is not set. Edge Functions use Deno.env.get() to access secrets, and missing variables cause the function to crash or return errors. Add the required variables in the Supabase Dashboard under Edge Functions > Secrets, and remember that variable names must NOT start with SUPABASE_ (reserved).
What does "Edge function error: missing environment variables" mean?
When a Supabase Edge Function reports missing environment variables, it means the function's code called Deno.env.get('SOME_VARIABLE') but the variable was not defined in the function's runtime environment. Edge Functions run in Deno (not Node.js), and they access secrets through Deno's environment API rather than process.env.
This error cascades dramatically in AI-generated apps. When an Edge Function fails because of a missing environment variable, it returns a 500 error. If the frontend does not handle this error, it may trigger a CORS error (because the error response lacks CORS headers), which then causes a confusing chain of 500 > CORS > undefined errors that makes the root cause nearly impossible to identify without checking the Edge Function logs.
A critical naming restriction catches many developers: environment variable names must NOT start with 'SUPABASE_' because that prefix is reserved for Supabase's own internal variables. If you name a variable SUPABASE_MY_KEY, it will be silently ignored. Additionally, .env files for Edge Functions must be placed under /supabase/functions/ (not /supabase/), and values copied from the Supabase production dashboard will not work because they are encrypted.
Common causes
The required environment variable was
never added to the Supabase Dashboard Edge Functions Secrets section
The variable name starts with SUPABASE_ which is a reserved prefix
the variable is silently ignored
The .env file is in the wrong directory
it must be under /supabase/functions/ not /supabase/
The variable was set in
the local development environment but not deployed to the production Supabase project
A typo in the variable name
the code references OPENAI_KEY but the secret is set as OPENAI_API_KEY
The variable value was copied from
the Supabase dashboard and contains encrypted/encoded characters instead of the raw value
How to fix missing environment variables in Supabase Edge Functions
Go to the Supabase Dashboard, navigate to Edge Functions in the left sidebar, then click the Secrets tab. Add the missing environment variable with the exact name your code expects. The name is case-sensitive and must not start with SUPABASE_. Enter the raw, unencrypted value for the secret.
For local development, create a .env file at /supabase/functions/.env (not in the supabase root). Each line should follow the format VARIABLE_NAME=value with no quotes around the value. After adding secrets, redeploy the Edge Function for the changes to take effect. You can verify the variable is accessible by adding a temporary log statement: console.log('Variable exists:', !!Deno.env.get('MY_VARIABLE')). Check the function's Logs tab in the Dashboard for the output. If Edge Function configuration is complex in your project, RapidDev can help set up proper environment management across local and production environments.
// Edge Function crashing on missing variableconst apiKey = Deno.env.get('OPENAI_API_KEY');// apiKey is undefined — function crashes when usedconst response = await fetch('https://api.openai.com/v1/chat/completions', { headers: { 'Authorization': `Bearer ${apiKey}` }});// Edge Function with proper variable validationconst apiKey = Deno.env.get('OPENAI_API_KEY');if (!apiKey) { return new Response( JSON.stringify({ error: 'OPENAI_API_KEY is not configured' }), { status: 500, headers: { 'Content-Type': 'application/json' } } );}const response = await fetch('https://api.openai.com/v1/chat/completions', { headers: { 'Authorization': `Bearer ${apiKey}` }});Prevention tips
- Never name environment variables with the SUPABASE_ prefix — it is reserved and variables with this prefix are silently ignored
- Place .env files for Edge Functions at /supabase/functions/.env, not at /supabase/.env
- Add validation at the top of every Edge Function to check that all required environment variables exist before processing the request
- After adding or changing secrets in the Dashboard, redeploy the Edge Function — secrets are loaded at deploy time, not at runtime
Still stuck?
Copy one of these prompts to get a personalized, step-by-step explanation.
My Supabase Edge Function fails with a missing environment variable error. I set the variable in the dashboard but the function still cannot find it. How do I debug this?
Add environment variable validation to the top of my Supabase Edge Function that checks all required secrets exist and returns a clear error message if any are missing.
Frequently asked questions
Why does my Supabase Edge Function show "missing environment variables" after I added the secret?
Secrets are loaded when the Edge Function is deployed. If you added the secret after the last deployment, you need to redeploy the function. Also verify the variable name matches exactly (case-sensitive) and does not start with SUPABASE_.
Where do I add environment variables for Supabase Edge Functions?
In the Supabase Dashboard, go to Edge Functions in the left sidebar, then click the Secrets tab. Add each variable with its name and raw value. For local development, use a .env file at /supabase/functions/.env.
Why are environment variable names starting with SUPABASE_ not working?
The SUPABASE_ prefix is reserved for Supabase's internal variables. Any user-defined variable with this prefix is silently ignored. Rename your variable to use a different prefix like MY_APP_ or just omit the prefix.
Can missing environment variables cause CORS errors in Supabase?
Yes, indirectly. When an Edge Function crashes due to a missing variable, it returns a 500 error without CORS headers. The browser then reports a CORS error instead of the actual 500 error, hiding the root cause.
How do I check which environment variables are available in my Edge Function?
Add a temporary log statement: console.log(Object.keys(Deno.env.toObject())). Deploy the function, trigger it, and check the Logs tab in the Dashboard to see all available variable names.
Do Edge Function secrets sync between local and production?
No. Local development uses the .env file at /supabase/functions/.env, while production uses the secrets set in the Dashboard. You must manage them separately.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your issue.
Book a free consultation