The Forge global:ui module is now in Preview, and therefore fully supported. However, it remains under active development and may be subject to shorter deprecation windows. Preview features are suitable for early adopters in production environments.
The global:ui module currently supports only UI Kit (render: native).
Atlassian releases preview features so partners and developers can study, test, and integrate them before General Availability (GA). For more details, see Forge EAP, Preview, and GA.
This tutorial walks you through creating your first app using the global:ui module. By the end,
you'll have a working global app that appears in the Atlassian app switcher with its own side
navigation and content area.
Complete Getting started before working through this tutorial.
You need an Atlassian site where you can install and test your app.
You can provision a Forge demo development site from the CLI. Demo sites include realistic seeded data and enterprise editions of Jira, Confluence, Jira Service Management, and Rovo.
To provision a demo site before installing an app, run:
1 2forge site provision
Alternatively, deploy your app and run forge install --demo-site. The CLI reuses your latest
active demo site, or offers to provision one if none exists.
Demo sites are active for 90 days by default. For more information, see Provision a demo development site.
Alternatively, create a traditional Atlassian cloud developer site:
You can install your app to multiple Atlassian sites. However, app data won't be shared between separate Atlassian apps, sites, or Forge environments.
The following user limits apply to traditional cloud developer sites:
When you create a new app, Forge will prompt you to set a default environment. In this
tutorial we use the development environment as our default.
Learn more about staging and production environments.
Navigate to the directory where you want to create the app. A new subdirectory with the app’s name will be created there.
Create your app by running:
1 2forge create
Enter a name for your app (up to 50 characters). For example, my-global-app.
Select Global (Preview) as the category.
Select your template.
Change to the app subdirectory to see the app files:
1 2cd my-global-app
Your app has the following structure:
1 2 3 4 5 6 7my-global-app/ ├── manifest.yml # App configuration ├── package.json └── src/ └── frontend/ └── index.jsx # UI Kit frontend code
The manifest declares the global:ui module:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19modules: global:ui: - key: my-app resource: main render: native title: default: My App resolver: function: resolver app: id: ari:cloud:ecosystem::app/<your-app-id> runtime: name: nodejs22.x resources: - key: main path: src/frontend tunnel: port: 3000
Key parts of the manifest:
global:ui module — Defines your app's entry point with a title and resource.resources — Points to your frontend code.For full details, see the global:ui module reference.
The frontend uses the Global, Sidebar, and Main components to build the app layout:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25import React from "react"; import ForgeReconciler, { Global, Sidebar, LinkMenuItem, Main, } from "@forge/react/global"; import { Text } from "@forge/react"; const App = () => { return ( <Global> <Sidebar> <LinkMenuItem label="Dashboard" href="/dashboard" icon="chart-bar" /> <LinkMenuItem label="Settings" href="/settings" icon="settings" /> </Sidebar> <Main> <Text>Welcome to your global app!</Text> </Main> </Global> ); }; ForgeReconciler.render(<App />);
For icon guidelines and a list of icons to avoid in global navigation, see Using icons.
For all available global:ui components, see global:ui UI Kit components.
Build and deploy your app by running:
1 2forge deploy
Install your app by running:
1 2forge install
When prompted, select your Atlassian site.
Once installed, your app appears in the Atlassian app switcher. You can also access it directly using the following URL format:
1 2{site-hostname}/apps/{installation-id}
To find your installation ID, run:
1 2forge install list
view.createHistory().Rate this page: