Forge tunnel doesn't forward traffic to local server (using Build a custom UI app in Jira)

Good day

chip: apple silicon
os: MacOS 15.3.1
forge: v12.1.0
node: v22.14.0

App setup
Build a custom UI app in Jira tutorial except the template is with jira:adminPage module
– resource tunnel configuration as per tunneling guide
– deployed to development env via forge deploy -e development
– installed development version of the app to a test Jira instance via forge install -e development -s ... (I can see dev badge next to the app)
– started a tunnel via forge tunnel -e development --verbose

Tunnel assumptions based on logs and some digging
– correctly created cloudflared tunnel - no errors in the process, I get a URL to {hash}.tunnel.atlassian-dev.net
– correctly identified resource port, ws proxy is pointing at the correct place
– correctly started local proxy server (let’s say on port 8123) that would route traffic to the client application on specified port

Problem details
Opening the admin page in Jira results in static assets pulled from atlassian cdn and not my local, the same happens with function execution
While using the app there are no logs in the terminal

Let’s say the output of forge tunnel says Listening for requests on local port 64148…
if I try to hit what is called faas tunnel url which is https://{hash}.tunnel.atlassian-dev.net/, I can see verbose-only logs

DBG GET http://localhost:8080/ ... host={hash}.tunnel.atlassian-dev.net ... originService=http://localhost:64148
DBG 404 Not Found originService=http://localhost:64148

If I hit the local proxy (on port 8123) I correctly get the client application back but any activity via faas tunnel url isn’t getting through to the local proxy

I had this issue and I solved it by doing the following:

  1. Inside your manifest at the root of your app add tunnel and then define the port that you’re running your JS tooling on in my case is localhost:3000 in this example.

  2. In your terminal cd into the dir with the frontend and start it. In my case I run npm run dev which triggers the vite command

  3. Then inside your terminal in a new session at the root dir of the app (where the manifest is) run your forge tunnel. You will likely be prompted to redeploy your app as your manifest updated. You can see then that Vite is connected and pulling resources from my local dev env inside the browsers console.

  4. Another thing that I have noticed is that if you have ‘disable cache’ enabled inside your browsers inspector it can cause issues with the automatic updates from your js tools if you have HMR enabled.

The issue is resolved, it was something in Atlassian’s infra where they couldn’t detect an active tunnel via graphql