Ports

Five manager-level ports plus a reserved block of eleven for every project. What each one is for and how to change it.

The five kinds of port

The manager uses five distinct port roles. The manager port serves the API and WebSocket. The development frontend port serves Vite. The front door is the path-routed entry point. The subdomain proxy is the host-routed entry point. The shared pooler is one PgBouncer for all projects. On top of those, each managed project owns a block of eleven service ports.

Manager-level ports

RoleSettingDefaultBind address
Manager API and WebSocketPORT24084 in the example file; 24085 in code127.0.0.1
Development frontendVite5173127.0.0.1
Path-routed front doorFRONT_DOOR_PORT6000127.0.0.1
Subdomain proxyPROXY_PORT9000127.0.0.1
Shared PgBouncer poolerPGBOUNCER_PORT6432127.0.0.1

All manager-level ports bind to loopback by default.

Per-project ports

A managed project owns eleven ports, computed as 60000 + slot × 11 + offset. The offsets are api 0, db 1, shadow 2, studio 3, inbucket 4, smtp 5, pop3 6, analytics 7, pooler 8, edge_runtime 9 and edge_inspector 10. Slot zero therefore owns 60000 through 60010, slot one owns 60011 through 60021, and so on. The values are written into the project's supabase/config.toml before a managed start.

Changing a port

The manager and proxy ports are read at startup; the front-door and pooler ports can also be changed at runtime from Admin Settings. A runtime change rebinds the listening socket, but it does not rewrite clients, project configurations or bookmarks. After a change, update the clients that depend on the old value and confirm the proxy health panel.

PORT_BAND_BASE and PORT_BLOCK_SIZE look configurable but are not: the allocator uses the constants 60000 and 11. Changing the environment values has no effect on allocation.

If a port is in use

The launcher frees orphaned processes on PORT and PROXY_PORT before a start. It does not free the front-door port or the pooler port, because those are not managed by the launcher's orphan cleanup. If one of them is held, stop the process that holds it. On Windows, scripts/ports.ps1 lists the listeners on the known ports with their owning process. On Linux and macOS, lsof -i tcp:<port> does the same.

Prefer the front door to raw project ports in client configuration. It survives a restart, while a raw port is an implementation detail of the current allocation.