Project sidebar and Activity tabs in Jira 9.0
Jira 9.0 no longer supports the BigPipe mechanism that was used to load the Project sidebar and Activity tabs (like comments or work logs in the Jira issue view).
What is BigPipe?
BigPipe is a server-side lazy-loading mechanism. The idea of BigPipe is to deprioritize the rendering of some sections of the page.
When loading the page, you might see a placeholder (for example, for the Project sidebar). Full HTML of the BigPiped areas is prepared and added just before closing the
Before Jira 9.0, there was an option to use BigPipe in web panels. Internally, BigPipe was used in the Project sidebar and Activity tabs (like comments or work logs). In Jira 9.0, we removed BigPipe support and changed the rendering process of both sidebar and Activity tabs. More detailed information on how it works now is covered in the following sections.
Why remove support for BigPipe?
With the introduction of deferred scripts in various interactions, BigPipe has become a performance threat as it significantly increases initial document size and postpones the execution of scripts.
We decided to replace BigPipe with an asynchronous mechanism and use AJAX calls to fetch content. You can notice that on issue view Jira makes an AJAX call to render the content of the sidebar and the Activity tabs. In this way, we are downloading fewer resources on the critical path, ultimately making Jira a bit faster and easier to maintain.
How can you know if you’re vulnerable as an app vendor?
If you use BigPipe directly in your plugin, your web panel is no longer going to work and you need to make some updates as described in the following sections.
The sidebar will be initially rendered as a placeholder and will start fetching all required resources and content when necessary.
Sidebar content might be no longer available during
DOMContentLoaded event. If you have further questions regarding the development of project-centric plugins, refer to Developing for the JIRA project-centric view and use
getSidebar API to interact with a sidebar when it’s ready.
Currently, trying to render a sidebar on the server-side by using the
com.atlassian.jira.projects.api.sidebar.ProjectSidebarRenderer.render method is not possible. We recommend switching to
com.atlassian.jira.projects.api.sidebar.SidebarPlaceholderRenderer.render. This method accepts only optional
selectedItemId parameter (same as in
Additionally, it's necessary to provide extra guidance for front-end rendering via WRM:
Project project = getSelectedProject(); final ProjectTypeKey projectTypeKey = project.getProjectTypeKey(); final RequiredData data = page.assembler().data(); data.requireData("project-id", project.getId()); data.requireData("project-key", project.getKey()); data.requireData("project-name", project.getName()); data.requireData("project-type", projectTypeKey.getKey());
Similarly, to render a relevant global board sidebar, you need to provide:
data.requireData("sidebar-rapid-view-id", rapidView.getId()); data.requireData("has-global-board-sidebar", true);
For the majority of interactions in Activity tabs, the content is fetched via an AJAX call as well. The extension points for plugins should not change.
Future-proof apps for Activity tabs and Project sidebar
The order of loading Activity tabs and Project sidebar might change in the future, as well as its dependencies and contexts too. Thus, we don’t recommend relying directly on a DOM structure or transitive dependencies.
The recommendations outlined on this page might change in the future, so we suggest reading the upcoming EAP notes, announcements, and implementing tests. Any changes will be announced earlier, as specified in Jira Front-end API.