Project sidebar and Activity tabs in Jira 9.0
Platform notice: Server and Data Center only. This article only applies to Atlassian products on the Server and Data Center platforms.
Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.
*Except Fisheye and Crucible
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 </html>
tag. After that, the placeholder is replaced with correct content by using JavaScript. You can read more about BigPipe here: BigPipe: Pipelining web pages for high performance.
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.
Sidebar rendering
The sidebar will be initially rendered as a placeholder and will start fetching all required resources and content when necessary.
Front-end changes
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.
Back-end changes
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 ProjectSidebarRenderer.render
).
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);
Activity tabs
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.