Tunneling runs your app code locally on your machine via the Forge CLI and Cloudflare.
Tunneling uses Cloudflare instead of ngrok as of CLI version 10.1.0. We recommend that you upgrade
Forge CLI to the latest version following these instructions.
To verify your tunnel provider, run forge tunnel --verbose
.
If you are using a firewall, you might see new connections to Cloudflare tunnel infrastructure. Please allow these for tunneling to work.
More information about this change can be found here.
You can start a tunnel for any app that has been deployed and installed on to a site. To start a tunnel for your app, run the following command in your CLI:
1 2forge tunnel
You'll see output similar to this:
1 2Tunnel redirects requests you make to your local machine. This occurs for any Atlassian site where your app is installed in the specific development environment. You will not see requests from other users. Press Ctrl+C to cancel. === Running forge lint... No issues found. === Bundling code... ✔ Functions bundled. Listening for requests...
Messages logged to the console will look similar to this:
1 2INFO 17:34:04.955 Count of objects in test array: 0
Tunneling also helps you debug your app in two ways:
console.log()
statements in your code,
you can see the output in the Forge CLI as the code executes.Variations in your local environment can cause functions to succeed there but fail in Forge. To prevent this:
We are evaluating support for an optional Docker image for tunnelling, based on feedback and interest from Forge app developers.
When running forge tunnel
with a UI Kit app, any changes to your source
code triggers a rebundle from the Forge CLI. Once the rebundling is completed successfully, you can
see your changes by refreshing the page that your app is on.
When running forge tunnel
with a custom UI app, the Forge CLI serves
the content from the path
directories specified in each resource
that's defined in your manifest.
This means that if your static assets require rebundling, you need to bundle them before refreshing
the page that your app is on. See here for more details on resource
declarations for custom UI apps.
While forge tunnel
lets you avoid redeploying your custom UI app to test changes, you have to
manually bundle it for each change you make. To solve having to do this, popular tools, such as
create-react-app can automatically reload your app each time
you change the code. These tools usually host their own server on a specific port.
For example, running npm start
with create-react-app
starts a server at http://localhost:3000
by default. The Forge CLI allows you to proxy tunnel requests to these servers, enabling features,
such as hot-reloading while developing your custom UI apps.
To connect a server to forge tunnel
, first identify the port that the server is hosted on.
In the above example, the port would be 3000
. Then, add the following to your manifest.yml
file,
under the resource
your server is hosting:
1 2tunnel: port: <YOUR_PORT_HERE>
For example, a resources
definition might look like this:
1 2resources: - key: main path: static/hello-world/build tunnel: port: 3000
Once a port has been added to a resource definition, running forge tunnel
causes the Forge CLI
to bypass the path
directory, and instead proxy the request to http://localhost:<port>
.
You can then run forge tunnel
, and start your server by running npm start
. You can then see
the assets served by your local server by refreshing the page that your app is on. If your server
supports hot-reloading, you no longer need to refresh the page to see updates when you make
changes to the code.
When running forge tunnel
with non-UI functions, such as
custom UI resolvers and
web triggers, any changes to your source
code triggers a rebundle from the Forge CLI. Once that rebundling is completed successfully,
you can see your changes reflected in the next invocation of the function.
Forge tunnel uses ngrok to tunnel invocations. As ngrok does not support anonymous users, you need to set up your credentials before using tunnel command. If you don't have an ngrok account, sign up for one.
Once you have an ngrok account:
1 2version: 2 log_level: debug region: us authtoken: <your-ngrok-authtoken>
forge settings set ngrok-config-path <file>
.forge logs
. This is because your
app code runs locally while tunneling. forge logs
only shows information for your deployed app,
not locally running code.manifest.yml
file, you must deploy the app with the latest manifest.
This is needed for the tunnel to pick up the changes.forge tunnel
supports Forge Cache methods, but with the following limitations:
Older versions of the Forge tunnel use Docker, which may cause issues.
Docker doesn't follow symlinks when creating a container to avoid potential inconsistencies. Therefore, you can't use symlinks in your app repository.
To work around this, install Yalc locally and add dependencies
via yalc add <dependency>
before running forge tunnel
or forge deploy
.
The forge tunnel
command will get stuck in the Bundling Code
step if you:
To work around this, disable the "Rosetta" setting on your Docker Desktop and restart your Docker daemon.
forge tunnel
CLI command.Rate this page: