Developer
Get Support
Sign in
Get Support
Sign in
DOCUMENTATION
Cloud
Data Center
Resources
Sign in
Sign in
DOCUMENTATION
Cloud
Data Center
Resources
Sign in
Last updated Jan 21, 2026

Changelog

This changelog is the source of truth for all changes to the Forge platform that affect people developing Forge apps.

See what's next for Forge on our platform roadmap.

21 January 2026

Early Access Forge customer-managed egress and remotes are now available in EAP

Forge customer-managed egress and remotes are now available through Forge’s Early Access Program (EAP). This capability lets admins control which external domains and remotes a Forge app can connect to, and configure those connections per installation. This approach is useful for apps that need to load data from customer-defined URLs, without declaring every possible destination up front in the manifest.

To join the EAP, complete this sign-up form.

20 January 2026

Announcement webTrigger API now supports querying and deleting URLs

We've added new methods to the webTrigger API from @forge/api that allow you to query and delete previously created web trigger URLs.

  • webTrigger.queryUrls() — Retrieve all web trigger URLs for your app, optionally filtered by module key

  • webTrigger.deleteUrl() — Delete a specific web trigger URL

For implementation details and examples, see the Web trigger runtime API documentation.

Early Access Forge LLMs (EAP) now offers dynamic retrieval of supported models

Support for dynamically retrieving the list of supported models is now available in Forge LLMs. The new list function in the @forge/llm SDK lets apps fetch the latest list of models, returning a response like:

1 2 3 4 5 6 7 8 9 10 11 12 { "models": [ { "model": "claude-sonnet-4-20250514", "status": "active" }, { "model": "claude-opus-4-20250514", "status": "deprecated" } ] }

You can filter on the status field to ensure your app always uses an active model and avoid breaking changes when a model is removed.

Forge LLMs remain in Early Access (EAP). Due to high demand, participation is limited. To request access, join the waitlist here.

For implementation details, refer to the documentation here.

19 January 2026

Announcement Jira Issue Field module migration available

You can now migrate a Connect Jira Issue Field module to Forge's custom field module. The functionality is now available for String, Number and Read-only fields.

See https://developer.atlassian.com/platform/adopting-forge-from-connect/migrate-jira-issue-fields/ for more details.

Announcement Forge app REST APIs now available in Preview

Forge app REST APIs let your app expose its own HTTP endpoints so that external systems can call your app code running on Forge.

These Forge app REST APIs are secured with developer-defined scopes and use 3LO (OAuth 2.0) for authentication and authorization. You define the endpoints in your app manifest using the apiRoute module.

This capability is currently in Preview and is available for Jira and Confluence Forge apps. This is currently not available in Isolated Cloud.

More details

To learn how to expose REST APIs in your Forge app, see Expose Forge app REST APIs. For a step-by-step tutorial on configuring a 3LO integration to access exposed REST APIs, see Access REST APIs exposed by a Forge app.

Early Access Forge embedded macros are now open for EAP

Forge embedded macros are now available through Forge’s Early Access Program. To join the EAP, please complete this sign-up form.

Forge bodied macro apps can now render embedded Forge macro apps through the AdfRenderer component (UI Kit) and the view.createAdfRendererIframeProps method from @forge/bridge (Custom UI).

For more information, see the updated documentation for Forge rich-text bodied macros.

Request for Comments (RFC) UI Modification for Forge Custom Fields

16 January 2026

Request for Comments (RFC) RFC-124: Evolving the Marketplace Trust Program

15 January 2026

Announcement Jira global background scripts now available in preview

Jira global background scripts are now available in Preview. This feature enables you to add an invisible container that coordinates data and behavior across all pages in Jira, enabling advanced integrations and automations.

We’re releasing this feature in preview to gather feedback and help you prepare for upcoming changes. You can use global background scripts in production environments during the preview period.

More details

Announcement Icon glyphs will be removed in UI Kit

As announced in July 2025, a number of glyphs for the Icon component will now be removed.

More details

billing-filled
billing
bitbucket/builds
bitbucket/clone
bitbucket/compare
bitbucket/forks
bitbucket/output
bitbucket/pipelines
camera-rotate
camera-take-picture
canvas
hipchat/chevron-double-down
hipchat/chevron-double-up
dropbox
editor/addon
editor/advanced
editor/file-preview
editor/image-border
editor/remove-emoji
editor/strikethrough
editor/table-display-options
editor/text-color
editor/underline
emoji/atlassian
folder-filled
following
googledrive
gsuite
highlights
image-border
jira/failed-build-status
list
hipchat/media-attachment-count
media-services/annotate
media-services/arrow
media-services/blur
media-services/brush
media-services/button-option
media-services/line-thickness
media-services/no-image
media-services/open-mediaviewer
media-services/oval
media-services/pdf
media-services/rectangle
media-services/text
media-services/unknown
media-services/zip
mention
notification-all
pdf
person-with-circle
person-with-cross
portfolio
presence-active
presence-busy
presence-unavailable
status
vid-audio-muted
vid-backward
vid-camera-off
vid-connection-circle
vid-forward
vid-hang-up
vid-hd-circle
vid-raised-hand
vid-share-screen
vid-speaking-circle

Request for Comments (RFC) RFC-123: CSM Extensibility on Forge

14 January 2026

Announcement Jira "Issue created" events for clone issues now include source details

The avi:jira:created:issue event now includes an clonedFrom field if the issue was created through the “Clone” operation. This field contains the ID and key of the original issue.

Early Access Forge LLMs (EAP) now supports Claude Opus 4.5

Support for Claude Opus 4.5 model is now available in Forge LLMs. This is in addition to the already supported Claude Opus 4 and Claude Opus 4.1 models.

Also note that Claude Opus 4 has been marked as deprecated and support will be removed in February 2026.

Forge LLMs remain in Early Access (EAP). Due to high demand, participation is limited. To request access, join the waitlist here.

More details

For the exhaustive list of supported models, refer to our documentation here

13 January 2026

Removed Removal of changes to invocation rate limits

We announced in a previous changelog that we would be changing the Forge user invocation rate limits from 1,200 requests per minute (RPM) to 20 requests per second (RPS). In response to customer feedback, we’ve decided not to implement this change. Invocation rate limits will continue to be 1,200 per one-minute fixed window.

These invocation rate limits are applied specifically by the Forge platform, and unrelated to the upcoming Jira/Confluence point-based rate limits. For more information, see https://developer.atlassian.com/platform/forge/limits-invocation/.

Fixed JQL EMPTY and != operators now evaluate consistently in Match API and webhooks

This fix will be rolled out on Jan 28, 2026 across all Jira Cloud instances.

We fixed bugs that caused the Issues Match REST API and webhooks to evaluate JQL queries differently than the standard Issue Navigator. JQL expressions using EMPTY or != with issue properties or the "Epic Label" field now return consistent results across all Jira Cloud features.

This fix is not backward-compatible. Integrations that relied on the previous behavior may see different results from the Match API or different events triggering webhooks.

Related tickets: JRACLOUD-96922, JRACLOUD-97120

More details

EMPTY operators for issue properties and Epic Label

JQL expression

Previous behavior (Match API/webhooks)

New behavior

field = EMPTY

Did not match issues where the field was unset

Matches issues where the field is unset

field IS EMPTY

Matched correctly

No change

field IN (EMPTY)

Did not match issues where the field was unset

Matches issues where the field is unset

field != EMPTY

Matched all issues, including those where the field was unset

Only matches issues where the field is set

field IS NOT EMPTY

Matched correctly

No change

field NOT IN (EMPTY)

Matched all issues, including those where the field was unset

Only matches issues where the field is set

This applies to both issue properties (for example, issue.property[key].path) and the "Epic Label" field.

!= comparisons for issue properties

JQL expression

Previous behavior

New behavior

issue.property[key].path != "a"

Returned issues where the property was never set

Only matches issues where the property exists and its value is not "a"

Impact

You may see differences in:

  • The issues returned by POST /rest/api/3/match when using JQL with EMPTY or != on issue properties or "Epic Label"

  • The events that trigger webhooks using JQL filters with these operators and fields

Developer guidance

Review any JQL used in webhook filters or Match API requests that contains:

  • EMPTY operators with issue properties or "Epic Label"

  • != comparisons with issue properties

Best practices:

Goal

Recommended JQL

Check if a field is set

field IS NOT EMPTY

Check if a field is not set

field IS EMPTY

Specific scenarios:

To find issues where a property is either not set OR has a different value:

1 issue.property[key].path != "a" OR issue.property[key].path IS EMPTY

To find issues where a property is set AND has a different value:

1 issue.property[key].path != "a" AND issue.property[key].path IS NOT EMPTY

Test critical webhook flows and integrations that use the Match API to confirm they behave as expected.

Rate this page: