Projects list never loads over Cursor port forward: /api/workspaces request stalls in browser (connection exhaustion on localhost:3000)

Where does the bug appear (feature/product)?

Cloud Agent (GitHub, Slack, Web, Linear)

Describe the Bug

Over the Cursor port forward to localhost:3000, the projects list request (/api/workspaces) never reaches the VM and the page spins indefinitely; the request stays Pending/Stalled in the browser, and in the latest case the stylesheet and scripts also fail to load, leaving the page unstyled.

Steps to Reproduce

Environment: Web app running on a remote VM, accessed from a local Chrome browser through an IDE port forward (plain HTTP, local port).

  1. Forward the app’s port from the VM and open it in Chrome.
  2. Sign in and open several app tabs (document/editor tabs). Leave them open in the background.
  3. Let the forward drop or reconnect, or wait a while, so that some live update streams are dropped.
  4. Open a new app tab through the same forward.
  5. Watch the Projects page.

Expected: The projects list request (/api/workspaces) completes and the list loads. If it can’t, a “Projects did not load” message with a Try again button appears after about 36 seconds.

Actual: The page shows a spinner indefinitely. In Chrome DevTools (F12 > Network), the workspaces request stays “Pending”/“Stalled” with no response, so it never reaches the server. In a second case, with the forward unhealthy (the IDE’s Ports panel showed “No ports detected”), even the IDE’s built-in browser loaded only the HTML. The stylesheet and scripts stalled, and the page rendered unstyled.

Control: Chrome on the VM’s own desktop loads the app fully styled, so the app itself works.

Workaround: Close all other app tabs and reload. If that fails, stop the forward and add the port again. If that also fails, fully quit and reopen the IDE.

Operating System

Windows 10/11

Version Information

Version 3.27.22

Does this stop you from using Cursor

No - Cursor works, but with this issue

Hi @agagathaha,

The stalled request is most likely Chrome’s limit of 6 open connections per host over plain HTTP. Each app tab’s live update stream holds one for localhost:3000, so once six are in use, new requests (the workspaces call, CSS, JS) wait for a free slot. After the forward drops, those streams can hang instead of closing, so the slots don’t free up.

For now:

  1. Keep fewer app tabs open, or have the app share one live stream across tabs.
  2. Open extra tabs at http://127.0.0.1:3000, which gets its own pool of 6 (you’ll need to sign in there separately).
  3. If it still stalls, stop and re-add port 3000 in the Forwarded Ports menu, which closes every connection on it. Running “Developer: Reload Window” from the Command Palette may also clear it without fully quitting.

Next time it stalls, could you check whether port 3000 in the Forwarded Ports menu shows a red dot with a “Can’t reach” message? That tells us whether the forward itself failed.