Extending Jira applications

Jira is very flexible and has a number of extension points where Jira's data can be queried or its functionality extended. This page provides an overview of the mechanisms available for extending Jira.

For information on installing or enabling existing apps, read the Managing apps documentation. To learn about creating your own apps, see developing apps with the Atlassian Plugin SDK.

Note that an app that specifically plugs into the architecture of an Atlassian application such as Jira is sometimes called a plugin, although the terms "plugin" and "app" are often used interchangeably.

Custom field types

Jira comes with various custom field types defined. New types can be written and plugged into Jira. See the How to create a new Custom Field Type tutorial for more information.

User formats

Jira comes with many options to change the look and feel of features in the system. User formats are a feature that can be customized by apps. You can write your own user format app to change the display of user details in JIRA, e.g. display a profile picture. See the User Format Plugin Module for more information.


New gadgets can be created by writing an XML descriptor file, packaged as an Atlassian app. See Tutorial - Writing gadgets for Jira for more information.


Jira comes with various reports built-in. Using the app system, new reports can be written, providing new ways of viewing and summarizing Jira's data.

Workflow functions and conditions

Jira's issue workflow (states and state transitions an issue can go through) can be customized through the web interface (see the workflow documentation. The workflow engine provides hooks where you can plug in your own behavior:

  • Run arbitrary Java when a certain transition occurs, via post-functions.
  • Limit visibility of transitions to certain users, via conditions.
  • Validate input on transition screens (eg. in comments), via validators.

See the Working with workflows for details on workflow post-functions, conditions, and validators. Once written, these can be packaged as apps and reused.

Issues and projects

On the 'View Issue' page, some issue information (comments, change history) is displayed. Likewise, the 'Browse Project' page contains separate sections, listed on the far left, for different types of project information.

By writing an app, you can add new issue or project sections (that will be listed in the left panel) to Jira. For instance, you may wish to display project/issue data pulled in from an external source. This is how the Jira Subversion app works.

Listeners (Note this is not configurable in Jira Cloud applications)

Jira has a complete event subsystem, which fires events whenever anything happens. For example, an ISSUE_CREATED event is fired whenever an issue is created. A listener is just a class that implements a JiraListener interface and is called whenever events occur in Jira. Using those events, you can then perform any action you want. For example, the email sent by Jira is driven by the MailListener. This is useful when you want to drive or affect external systems from events, which occur within Jira — usually used to push data into outside systems. For more information, read the listeners documentation.


Services are classes that implement the JiraService interface. When installed, you specify an update period, and Jira will call the run() method of your service periodically. A sample service is POPCommentService. This service checks a particular POP mailbox periodically, and if it finds messages, tries to extract an issue key from the subject. If the subject contains a key, the body of the mail is added as a comment to the message. Services are useful when you want to periodically pull data into Jira from outside systems. For more information, see the services guide.

Last modified on Aug 14, 2022

Was this helpful?

Provide feedback about this article
Powered by Confluence and Scroll Viewport.