Description
Bug report
- I confirm this is a bug with Supabase, not with my own application.
- I confirm I have searched the Docs, GitHub Discussions, and Discord.
Describe the bug
Making concurrent requests to a Supabase edge function will result in InvalidWorkerCreation errors or 502 errors.
To Reproduce
Steps to reproduce the behavior, please provide code snippets or a repository:
- Using the Supabase CLI, create a new function with
supabase functions new test_concurrency
. Here is an example of a function I have (I realize the createClient is not used):
import "jsr:@supabase/functions-js/edge-runtime.d.ts"
import { createClient } from 'jsr:@supabase/supabase-js@2';
console.log("Hello from Functions!")
Deno.serve(async (req) => {
const supabaseClient = createClient(
Deno.env.get('SUPABASE_URL') ?? '',
Deno.env.get('SUPABASE_SERVICE_ROLE_KEY') ?? '',
);
const { name } = await req.json()
const data = {
message: `Hello ${name}!`,
}
return new Response(
JSON.stringify(data),
{ headers: { "Content-Type": "application/json" } },
)
})
-
Run
supabase functions serve
-
In a new terminal tab, execute this bash script which sends 200 concurrent requests, replacing
SERVICE_ROLE_KEY
with your service role key:
#!/bin/bash
seq 1 200 | xargs -n1 -P0 -I{} curl -L -X POST 'http://localhost:54321/functions/v1/test_concurrency' -H 'Authorization: Bearer SERVICE_ROLE_KEY' --data '{"name":"Example"}'
- Notice how it will successfully execute the function for the first 100 or so requests, before erroring on the
supabase functions serve
tab:
InvalidWorkerCreation: worker did not respond in time
at async UserWorker.create (ext:sb_user_workers/user_workers.js:145:15)
at async Object.handler (file:///root/index.ts:154:22)
at async respond (ext:sb_core_main_js/js/http.js:163:14) {
name: "InvalidWorkerCreation"
}
with the following error message on the tab that executes the test script:
{"code":"BOOT_ERROR","message":"Worker failed to boot (please check logs)"}
Expected behavior
I would expect the edge function to be able to handle concurrent requests to this degree.
Screenshots

System information
- OS: macOS, M3 Max
- Browser (if applies) [e.g. chrome, safari]
- Version of supabase-js: 1.192.5, using supabase-edge-runtime-1.58.2 (compatible with Deno v1.45.2)
- Version of Node.js: 18
Additional context
From my understanding, edge functions can be used to serve API routes, and in a production application it is perfectly reasonable that you would have 200 users hit the same endpoint at the same time. This example uses an edge function with minimal computations. If you add database reads, a text embedding call using Supabase.ai gte-small
, and a database write, it can handle even fewer concurrent requests (around 40 from my testing). I noticed this issue at first because I wanted to generate text embeddings on seed data consisting of only 40 users (which gets triggered on inserts to a table) but it failed to work for every user.
I'm not entirely sure how edge functions work, maybe a worker is being re-used to handle multiple requests and then a CPU limit or similar is hit, resulting in failures - but I thought the idea of edge functions is to scale up with requests and a mere 200 requests is nothing.
At first I thought that this could be a problem with local Supabase running in Docker, but I also confirmed this occurs on a remote Supabase project (ran using Supabase to host) - where I get 502 errors after the first 50-100 requests or so.