What’s running on port 54321 on my Mac?
54321 is Supabase’s local API, started by supabase start. It never runs alone: a whole block of 5432x ports and a stack of Docker containers come with it.
Updated
Commonly used by
- Supabase CLI: API gatewayREST, Auth, Storage and Realtime are served at
http://127.0.0.1:54321. - Supabase CLI: PostgresThe local database is on 54322.
- Supabase CLI: StudioThe dashboard is on 54323.
- Supabase CLI: email testingInbucket (Mailpit in newer CLIs) catches auth emails on 54324.
Check what’s on port 54321
lsof -nP -iTCP:54321 -sTCP:LISTEN
You’ll see com.docker.backend (Docker Desktop) or OrbStack, not Supabase itself, because the CLI runs everything in containers. To see the whole block at once:
lsof -nP -iTCP:54320-54330 -sTCP:LISTEN
Then ask the CLI, from the project folder:
supabase status
To find which project owns a running stack when you don’t know the folder, list the containers. Their names end in the project_id from config.toml:
docker ps --format '{{.Names}}' | grep supabase
With Stat Space: statspace port 54321.
Stop it
supabase stop
Run it in the project folder. Your local data is kept in Docker volumes; add --no-backup only if you want a clean database next time. Don’t kill com.docker.backend to free the port, because that stops every container you have.
Change the ports
Each service has its own section in supabase/config.toml:
project_id = "acme-2"
[api]
port = 55321
[db]
port = 55322
[studio]
port = 55323
[inbucket]
port = 55324
Restart with supabase stop && supabase start, and update SUPABASE_URL in your app’s .env. Changing project_id matters too: it’s what keeps the two stacks’ containers and volumes apart.
Who can reach it
Docker publishes these ports on your Mac, and the local stack uses well-known demo keys and the postgres password. Check lsof: on some setups the bindings show *:54321 rather than 127.0.0.1. On shared networks, that means anyone nearby can query your local API or connect to Postgres on 54322. Stop the stack when you’re not using it. See dev server exposed to the network.
Seeing it live
With Pro, Stat Space maps 54321 and its neighbors to the Supabase containers behind them instead of a row of com.docker.backend entries. The free Ports tab still shows every listener and flags ones bound to all interfaces.
Questions
How do I see all the Supabase local ports?
Run supabase status in the project folder. It prints the API URL, DB URL, Studio URL, mail URL and the local keys.
Why does supabase start say the port is already allocated?
Another Supabase project is already running with the same ports. Run supabase stop in that project, or docker ps to find its containers, then start the one you want.
How do I run two Supabase projects at once?
Give the second project different ports in its supabase/config.toml (for example 55321, 55322, 55323…) and a unique project_id, then supabase start.
Know what your Mac is doing, without adding to it.
Free, no account. Pro is $9.99 once for the first 100 buyers.