The jira:uiModifications module is shared between Jira and Jira Service Management. It allows you to change the look and behavior of:
This page documents how jira:uiModifications works for Jira. The module itself is the same but for Jira Service Management-specific views, see Jira Service Management UI modifications.
The module is designed to be used in conjunction with the UI modifications (apps) REST API.
1 2modules {} └─ jira:uiModifications [] ├─ key (string) [Mandatory] ├─ title (string | i18n) [Mandatory] └─ resource (string) [Mandatory] resources [] ├─ key (string) [Mandatory] └─ path (string) [Mandatory]
| Property | Type | Required | Description |
|---|---|---|---|
key |
| Yes |
A key for the module, which other modules can refer to. Must be unique within the manifest. Regex: |
resource | string | Required if using Custom UI or the latest version of UI Kit. | A reference to the static resources entry that your context menu app wants to display. See resources for more details. |
title | string or i18n object | Yes |
A title for the module. The |
resolver | { function: string } or{ endpoint: string } | Yes | Set the Set the |
| Key | Type | Required | Description |
|---|---|---|---|
i18n | string | Yes | A key referencing a translated string in the translation files. For more details, see Translations. |
UIM Forge modules can retrieve the current project and issueType using the getContext bridge method in Custom UI and UI Kit.
1 2{ extension: { type: 'jira:uiModifications', project: { id: string, key: string, type: string, }, issueType: { id: string, name: string, }, viewType: 'GIC' } }
1 2import { view } from '@forge/bridge'; import { uiModificationsApi } from '@forge/jira-bridge'; uiModificationsApi.onInit(async ({ api, uiModifications }) => { const { getFieldById } = api; const context = await view.getContext(); const { project, issueType } = context.extension; uiModifications.forEach(({ data: customDataConfiguredUsingRestApi }) => { // ... }); }, ({ uiModifications }) => [ // ... ])
UI modifications expose customer data to the app that provides them. Therefore, you must declare either classic (recommended) or granular scopes in your manifest. Note that you always have to declare all scopes from your chosen group.
1 2permissions: scopes: - 'read:jira-user' - 'read:jira-work' - 'manage:jira-configuration' - 'write:jira-work' - 'manage:jira-project'
| Scope | Data exposed | Field | Method | ||
|---|---|---|---|---|---|
read:jira-user | User timezone and account ID | n/a | view.getContext | ||
| User display name, account ID, and avatar | Assignee | getValue | |||
read:jira-work | Project ID, key, and type; issue type ID and issue type name of the issue being created using the GIC form or presented on the Issue view | n/a | view.getContext | ||
| Issue data of the issue being created using the GIC form or presented on the Issue view | All supported fields | getValue | |||
| Field name | All supported fields | getName | |||
| Field visibility | All supported fields | isVisible | |||
manage:jira-configuration | Field description | All supported fields | getDescription | ||
| User locale | n/a | view.getContext | |||
| Atlassian app license status | n/a | view.getContext | |||
The following values can be modified:
| All supported fields |
| |||
write:jira-work | Default field value can be modified | All supported fields | setValue | ||
manage:jira-project | Screen tabs can be modified | All visible screen tabs |
|
In case a required permission isn’t assigned, the user will see the following error:
1 2We couldn't load the UI modifications configuration for this form
| View | Required permission |
|---|---|
| Jira global issue create | “Create issues” permission |
| Jira issue view | “Browse projects” permission |
| Jira issue transition | “Transitions issues” permission |
Each supported view type has its own known limitations:
| Category | Details |
|---|---|
| Supported project types |
|
| Supported entry points |
*The Global issue create modal with UIM will only open from Add a child issue and Create subtask if the summary and at least one other field is set as mandatory for the issue type. |
| Known limitations |
|
If you install and configure multiple UIM apps to run for a given combination of project, issue type, and view type, up to 5 apps can apply changes simultaneously. If more than 5 apps are configured, changes from the remaining apps will be disregarded. Apps apply changes asynchronously, so the order of application is random.
There may be conflicts when multiple apps attempt to modify the same field using the same FieldAPI method. In such cases, app developers will receive conflict errors via the onError handler, and users will see corresponding notifications:

If the conflict happens, the changes applied by the app which finished running last will override changes from other apps.
The Atlassian Document Format (ADF) supports rich content when using the UIM to add media content (like images) to Jira description, text area, or rich text custom fields.
However, when adding an image through the UIM during issue creation (for example, throught the GIC modal) the image
preview might display a Preview unavailable message. This is because the necessary permissions to display the image
aren't available yet; they'll be available after the issue is created and/or the page is refreshed.
Rate this page: