Early Access Program: Forge UI fullscreen modal

We’re excited to announce the launch of the Early Access Program (EAP) for fullscreen modals in Forge! :tada:

What’s new?

Fullscreen modals are now available for Forge apps, closing a major gap for partners migrating from Connect or building complex workflows on Forge. This new capability allows you to deliver high-density experiences like rich editors and detailed object views, without squeezing content into small modal windows.

Fullscreen Modal Features

  • New fullscreen modal size exists for all Forge UI modals

  • All fullscreen modals exists with an enforced header

    • Developers can nominate icon and name for this header. If none are declared, we will look for any logo or name stored by the app.
  • Improved modal close handling to prevent data loss

    • Close button features a view.onClose method which allows a function to run before the close action is completed. This will support use cases like data saving methods.
      For the EAP this feature is currently opt in. In 2 months, we will elevate to GA which will allow users to click out of all macro custom config modals.

We understand that the enforced header is a new feature from connect fullscreen macros and this may require refactoring from partners. This enforcement was included for accessibility and UX consistency for in-product experiences to ensure we can provide the most seamless experience for end users.

We’re looking forward to your feedback! Sign up for the EAP here.

I’m trying to sign up for this EAP as well as the view.onClose bridge method one released today, but both sign-up pages are going to the ‘Forbidden’ page ( Jira Service Management ) instead of the sign-up form. I’ve been able to sign up for EAPs in the past. What am I doing wrong?

Hey Quinn!
Are you able to screenshot what you see when you click the EAP sign up link? I’ve been getting requests from other developers.

Hey Vicky, sure thing. When I click your link in the post ( Jira Service Management ) it immediately redirects to Jira Service Management . Same happens when I follow the EAP sign-up link posted in https://developer.atlassian.com/platform/forge/ui-kit/components/modal/.

This is the page it redirects to:

Hey Vicky,

I’ve been testing the new EAP features and have some quick feedback:

  • view.onClose(): Working perfectly! It’s exactly what we needed to handle saves and cleanup reliably before the modal closes.

  • Fullscreen Modals: The platform-level container enforces a padding with var(--ds-space-300, 24px) on both the header (title/close button area) and the body (left/right sides).

I tested a CSS override in the browser console that reclaimed the space we need. Specifically, adjusting the padding-block-start/end on the header and padding-inline on the body worked much better for our need with --ds-space-100

Since the padding sits outside the Custom UI iframe, we can’t override it. I’ve drafted a formal feature request below to add padding customization to the Modal API to help us fully utilize the fullscreen real estate.

Feature Request: Add style/padding customization options to Custom UI Modal API

Summary

The @forge/bridge Modal API should support customization of container padding (and ideally other style properties) for Custom UI fullscreen modals.

Motivation

When using size: 'fullscreen', the default ~24px padding on the modal dialog container (custom-ui-fullscreen-modal-dialog--header and --body) is excessive for apps that need maximum screen real estate (e.g., embedded editors, dashboards). Since Custom UI runs in an iframe, there is no way to override this padding from the app side.

Proposed Solution

Add optional style properties to the Modal constructor:

constmodal =new Modal({
resource: 'edit-project-modal',
size: 'fullscreen',
// New options:
padding: 'compact', // or a preset like 'none' | 'compact' | 'default'
// OR
containerStyle: {
padding: 'var(--ds-space-100, 8px)',
},
});

Alternatively, expose CSS custom properties that Custom UI apps can set to influence the parent modal container.

Context

The recent v5.12.0 release added icon, title, and onClose support to the Modal API, demonstrating that Atlassian is actively expanding modal customization. Padding control would be a natural addition to these capabilities.

Investigation Notes

  • Root cause: Modal container elements are rendered by the Forge platform outside the Custom UI iframe. Browser cross-origin isolation prevents CSS/JS from within the iframe from affecting them.

  • @forge/bridge v5.12.0: No padding/style configuration options available in the Modal API.

  • No workaround exists from the Custom UI side.

Hi @VickyHu,

I see a potential usability issue where users might accidentally click the close button before completing their interaction with the modal. Would you consider adding the ability to define a “Do you really want to discard your changes?” dialog for fullscreen modals?

Although the proposed view.onClose function would allow us to save user input and prevent data loss, treating the close button like a save button seems unintuitive. Do you have any recommendations for how apps should handle this scenario?

Hey @VickyHu,

We’re hitting a significant design blocker with the current fullscreen modal implementation.

In our use case, the default 24px padding and fixed header structure are causing two main issues:

  1. Visual Fragmentation: Our app uses a specific brand background color. Because the platform-level container enforces a white/black padding area outside our iframe, the app looks “boxed in” rather than truly fullscreen.

  2. Header Limitations: We need to surface more actions/buttons directly in the modal header to maintain a standard editor/dashboard UX. The current container restricts us to just the title and the default close button.

Since we can’t touch the parent DOM from within the Custom UI iframe, we’re stuck with a UI that feels “bolted on.”

Hi @VickyHu ,

How can we set the onClose event handler of macro configuration. Without that, changes are lost. Also, it is better to allow a confirmation of closure as suggested above.

Thanks

Hi @VickyHu ,

Another issue with the onClose event (I tested it with explicit modal open) is the iframe of the modal is destroyed then the onClose event is triggered. So, there is no way to communicate with the iframe to retrieve the data and save it. Am I wrong?

Thanks

Hey Ashraf! Thanks for the feedback!
Hooking into the on.close method will allow a function to run before the iframe closes, so it shouldn’t destroy the iframe before the function runs. If this is the case for you can you help provide a bit more detail on how to replicate this bug?

Hey Everyone!
Thanks so much for the valuable feedback.
After review, we’ve decided to remove the padding and reduce the header height for fullscreen modals to provide a less interruptive, more immersive experience. This way you can add your own padding if you require.

As for hooking into the header to insert your own action items. We’re still exploring this and don’t currently have a timeline on delivery here.
Were you able to help provide some examples of how you’d hope this was implemented so we can stress test its impact on the header?

Hi,

Thank you for the EAP. Unfortunately, it’s yet just another trade-off compared to the “max” size option. As the header cannot be controlled, we’re just wasting 72px of UI. This design and the height is so awkward, that the max option, where the full frame can be controlled, is almost always better, even if you’re looking for a fullscreen scenario.

Proposed solution, either:

  • Remove the header bar entirely and just let vendors do it, like you did with connect, which worked flawlessly and no customer EVER complained about this UX. You’re trying to solve problems that don’t exist in the real world
  • Or at very least, if you don’t trust vendors to properly close the modal, then remove the logo and at least make the X positioned absolute, so that we can use the remaining header space

Thanks,

Philip

Hi Vicky, thanks for the update!

I can confirm that the left/right padding has been removed on fullscreen modals, that’s working well on our end.
However, the header height and its padding (24px top padding + 32px header) appear unchanged from before. On our side this is acceptable as-is.

Do you have
a timeline for when the fullscreen modal feature will be GA? We’re currently testing on an EAP instance.

Hi @VickyHu,

are there any plans to introduce custom dialog sizes? We have dialogs that are more wide then high, or at least squareish in content, which now have a lot of unnecessary vertical whitespace. Just having a custom sizing (in a sane range, e.g. height: 400px, width: 40vw), would be great so our existing Connect UIs do not look bad on Forge.

Thanks

Tobias

“New feature”, no you’ve removed a feature.

Partners simply want feature parity before being forced to migrate.

Hey Tobias!
Yes there is, please follow this public roadmap ticket!
I’m currently exploring how PX sizing might work for modals on Forge and I’m hoping to get both a custom sizing and resizing API released.

Hey Everyone!
Thank you to everyone who gave valuable feedback on this thread! Both view.onClose() methods and the fullscreen sizing is in GA! We’ve removed the surrounding padding in the bridge modal and allowed the UI Kit modal padding to be toggled to provide you more surface area. (changelog)
Can’t wait to see what you build here :smiley:

Hi Vicky,
Thank you for releasing this. I have installed the latest @forge/bridge (5.16.0), the fullscreen mode is working, but we are still seeing left and right padding within the content of the modal (24px). This was tested using the Modal imported from @forge/bridge
import { Modal, view } from "@forge/bridge";
Are you planning to remove that padding as well, or by “surrounding padding” did you mean the padding outside the modal?

Hey @maciej.dudziak :waving_hand: Just tried this on latest @forge/bridge and the padding did not appear for me, could you open a ECOHELP ticket and I can help out more on your specific case there.