Feature Parity and Script Alternatives
ScriptRunner for Jira Cloud does not have the same feature set as the Server/Data Center version. We have noted below the parity of each ScriptRunner for Server/Data Center feature, along with any script/function alternatives where there is currently no value parity.
ScriptRunner for Server/Data Center features, which are not supported in ScriptRunner for Jira Cloud, are also listed in the parity tables for full transparency to allow an informed decision when migrating from Server/Data Center to Cloud.
Jira REST API and UI Modifications API
The varying parities between Cloud and Server/Data Center exist due to the limitations of the Jira REST API and UI Modifications API, which ScriptRunner relies on to allow certain functionality. Unfortunately, it is likely that some features cannot be part of the Cloud feature set due to restrictions in the Cloud platform. There are also some general limitations within ScriptRunner Cloud, such as script execution timeouts and script storage which we recommend reviewing.
Key | Definition |
---|---|
Full value parity. | |
◐ | Partial value parity. |
ALT | No value parity, but custom script alternatives are available. |
No value parity or alternatives are available. |
Behaviours
Server/DC Feature | Cloud Parity | Parity Notes/Alternatives |
---|---|---|
Behaviours | ◐ | Atlassian created an API called UI Modifications on the Forge platform, which made it possible for ScriptRunner to build Behaviours. As more capabilities become available in the UI Modifications API, more functionality can be built in ScriptRunner's Behaviours feature. Notable differences for Behaviours on Cloud:
|
Built-In Scripts
Server/DC Feature | Cloud Parity | Parity Notes/Alternatives |
---|---|---|
Built-In: Bulk Copy SLA Configuration |
| |
Built-In: Bulk Fix Resolution | ◐ | Jira Cloud does not allow clearing resolutions (selecting None option). |
Built-In: Bulk Import Custom Fields | ALT | The same function can be achieved by writing your own script in the Script Console but with all the caveats of time limitations, API availability, etc. |
Built-In: Change Dashboard, Filter or Board Ownership | ALT | Similar functionality can be achieved by writing a script in the Script Console to call the Change Filter Owner and the Bulk edit dashboards APIs to update and filter dashboard owners. We have created a sample script for this here. |
Built-In: Clean Workflows |
| |
Built-In: Clear Groovy Class Loader | ||
Built-In: Configuration Exporter | A third-party tool such as salto.io can provide this. | |
Built-In: Copy Custom Field Values | ◐ | Jira Cloud currently supports:
|
Built-In: Copy Project | ALT | You can achieve the same functionality in Jira Cloud by using the Script Console and a script. |
Built-In: Generate Events | ||
Built-In: Guardrails - Maximum number of comments per issue.
| ALT | You can use the numberOfComments JQL Keyword to search for issues that exceed a maximum number of comments using a JQL query similar to the one below.
You can then manually review these issues and delete the comments if needed. To automate this, you could run this query in the Script Console calling the Archive Issues by JQL API with this JQL to archive all issues returned that exceed this threshold. |
Built-In: Guardrails - Maximum number of unrchived projects | ALT | Similar functionality can be achieved by writing a script in the Script Console to call the Get Projects Paginated API and filter out results where the You can then call the Archive project API for every project returned by this API. We have an example script to do this here, which can be run on the script console. |
Built-In: Guardrails - Maximum Number of Issue Links Per Issue
| ALT | You can use the numberOfLinks JQL Keyword to search for issues that exceed a maximum number of links using a JQL query similar to the one below.
You can then manually review these issues and delete the links if needed. If you wanted to automate this, you could run this query in the Script Console calling the Archive Issues by JQL API with this JQL to archive all issues returned that exceed this threshold. |
Built-In: Guardrails - Maximum Attachment Size
| ||
Built-In: Guardrails - Maximum Change History Records Per Issue | ||
Built-In: List Scheduled Jobs | ||
Built-In: Re-index Issues | ||
Built-In: Script Registry | ||
Built-In: Service Desk Template Comments | ||
Built-In: Split Custom Field Contexts | ALT | Similar functionality can be achieved by writing a script in the Script Console as shown in this example script. |
Built-In: Switch to a Different User | ||
Built-In: Test Runner | ||
Built-In: View Server Log Files |
Code Insights
Server/DC Feature | Cloud Parity | Parity Notes/Alternatives |
---|---|---|
Code Insights |
Integrations
Server/DC Feature | Cloud Parity | Parity Notes/Alternatives |
---|---|---|
Automation for Jira: Asset Object Created Trigger | Automation for Jira triggers and actions are currently unsupported on cloud. | |
Automation for Jira: Asset Object Updated Trigger | ||
Automation for Jira: Create Asset Action | ||
Automation for Jira: Execute a ScriptRunner Script Action | ||
Automation for Jira: Lookup Asset (Insight) Object Action | ||
Automation for Jira: Lookup Asset (Insight) Objects from AQL (IQL) Action | ||
Automation for Jira: Update Asset Action | ||
Vendors API |
Jobs
This feature is known as Scheduled Jobs in Jira Cloud.
Server/DC Feature | Cloud Parity | Parity Notes/Alternatives |
---|---|---|
Jobs: Custom Scheduled Job | ◐ | Jira Cloud supports:
|
Jobs: Escalation Service | ◐ | Jira Cloud supports:
|
Jobs: Issue Archiving Job | ALT | This can be achieved by writing a custom escalation service that calls the Archive issue API to archive any issues returned by the JQL query specified on the schedule specified. |
JQL Functions
Both versions of ScriptRunner use JQL Functions. However, this feature has been implemented as Enhanced Search within ScriptRunner for Jira Cloud.
Customized Epic Link field
If you've renamed or customized the Epic Link default field in your Jira instance, you may notice issues with epic-related queries, such as:
Failures with getting automatic syncing and the most up-to-date results.
Epic-related JQL functions (e.g.,
epicsOf, linkedIssuesOf
) not returning expected results.
Atlassian has deprecated the Epic Link field and now recommends using the Parent property to link to epics. Since the Epic Link field was customizable, any epic fields that you have renamed or customized are no longer supported in JQL queries.
Server/DC Feature | Cloud Parity | Parity Notes/Alternatives |
---|---|---|
JQL Functions: addedAfterSprintStart | This JQL function will identify issues that were added to an open sprint after the feature was released (21st December 2020). Historical searches for issues added to open sprints prior to that date are not supported. | |
JQL Functions: aggregateExpression | Manually calculate using spreadsheets. | |
JQL Functions: commented | ALT | There is not a like-for-like function in Jira Cloud, but depending on what you want to achieve you could use some ScriptRunner JQL Keywords to achieve the same: |
JQL Functions: completeInSprint | ALT | There is not a like-for-like match here, but the inSprint JQL function can be used to search for issues in the sprint which have a completed status to get a similar query. |
JQL Functions: componentMatch | ◐ | |
JQL Functions: dateCompare | ||
JQL Functions: earliestUnreleasedVersionByReleaseDate | ||
JQL Functions: epicsOf | ◐ | This JQL function is available for Jira company-managed projects but not for team-managed projects. |
JQL Functions: expression | ||
JQL Functions: fileAttached | ALT | There is not a like-for-like function in Jira Cloud, but depending on what you want to achieve, you could use some ScriptRunner JQL Keywords to achieve the same: |
JQL Functions: hasAttachments | ALT | There is not a like-for-like function in Cloud, but depending on what you want to achieve, you could use the ScriptRunner JQL Keywords: |
JQL Functions: hasComments | ALT | The ScriptRunner JQL Keyword: |
JQL Functions: hasLinks | ALT | There is not a like-for-like function in Jira Cloud, but depending on what you want to achieve, you can use native Jira keywords |
JQL Functions: hasLinkType | ALT | There is not a like-for-like function in Jira Cloud, but depending on what you want to achieve, you can use the native Jira keyword |
JQL Functions: hasRemoteLinks | ||
JQL Functions: hasSubtasks | You could use the ScriptRunner JQL Keywords: | |
JQL Functions: inactiveUsers | ||
JQL Functions: incompleteInSprint | ALT | There is not a like-for-like match here, but the inSprint JQL function can be used to search for issues in the sprint which have a not completed status to get a similar query. |
JQL Functions: issueFieldExactMatch | This feature is called | |
JQL Functions: issueFieldMatch | ||
JQL Functions: issuesInEpics | This JQL function is available for Jira company-managed projects but not for team-managed projects. | |
JQL Functions: jiraUserPropertyEquals | ||
JQL Functions: lastComment | ALT | There is not a like-for-like function in Jira Cloud, but depending on what you want to achieve you could use the |
JQL Functions: lastUpdated | ALT | There is not a like-for-like function in Jira Cloud, but depending on what you want to achieve you could use the |
JQL Functions: linkedIssuesOf | This function can be used in Jira Server/Data Center to search for issues linked with the parent-child hierarchy provided by Advanced Roadmaps/Portfolio but not in the Jira Cloud Enhanced Search. | |
JQL Functions: linkedIssuesOfAll | ||
JQL Functions: linkedIssuesOfAllRecursive | ||
JQL Functions: linkedIssuesOfAllRecursiveLimited | ||
JQL Functions: linkedIssuesOfRecursive | ||
JQL Functions: linkedIssuesOfRecursiveLimited | ||
JQL Functions: linkedIssuesOfRemote | ||
JQL Functions: memberofRole | ||
JQL Functions: myProjects | ||
JQL Functions: nextSprint | ||
JQL Functions: overdue | ||
JQL Functions: parentsOf | ||
JQL Functions: portfolioChildrenof() | ◐ | JQL function childrenOf can be used to find all descendant issues of a given subquery, including children, grandchildren, and beyond. |
JQL Functions: portfolioParentOf() | ◐ | JQL function parentsOf can be used to find all ancestor issues of a given subquery, including parents, grandparents, and beyond. |
JQL Functions: previousSprint | ||
JQL Functions: projectMatch | In Jira Cloud this function uses the | |
JQL Functions: projectsOfType | ALT | There is no like-for-like match here, but you can use the native Jira keyword of projectType to return all issues from projects of a certain type such as Software. |
JQL Functions: recentProjects | ALT | There is no like-for-like match here, but you can use the native Jira keyword of lastViewed to return issues you last viewd in the past x days to see what projects you interacted with in that timeframe. |
JQL Functions: releaseDate | ||
JQL Functions: removedAfterSprintStart | ||
JQL Functions: startDate | ||
JQL Functions: subtasksOf | ||
JQL Functions: versionMatch | ||
JQL Functions: workLogged |
Listeners
This feature is known as Script Listeners in Jira Cloud.
Server/DC Feature | Cloud Parity | Parity Notes/Alternatives |
---|---|---|
Listeners: Adds the current user as a watcher | ALT | The same function can be achieved using a Custom Listener and a script. |
Listeners: Clone an issue and links | ALT | The same function can be achieved by writing your own script in the Custom Listener but with all the caveats of time limitations, API availability, etc. Check out our page on Scripting in ScriptRunner for Jira Cloud for tips. We have an example script to show how to clone an issue and link it here. |
Listeners: Create a sub-task | ALT | The same function can be achieved using a Custom Listener and this script for creating a subtask(s). |
Listeners: Custom Listener | ◐ | There is a limit of 240 seconds for script executions. After running for 240 seconds, the logs will be collected, and the code will be terminated. Currently, a custom event may not be created and used to trigger listener actions. Events supported in Cloud: The list below shows the list of events that Jira Cloud supports to trigger listener actions from: |
Listeners: Execution failure notifier | ALT | In Jira cloud, the Notifications group setting allows you to specify a group of users who will get an email each time a script fails, but this can't be configured to send to other messaging services such as Slack because the notify API doesn’t allow you to email external emails. |
Listeners: Fast-track transition an issue | ALT | The same function can be achieved using a Custom Listener and a script to transition an issue. |
Listeners: Fires an event when a condition is true | ALT | In Jira Server/Data Center, this listener is used to send an email when a condition occurs. In Jira Cloud, you can add the condition to be matched to the script conditions box, which uses the Jira Expression Framework. When the condition is true, you can call the Send notification for issue API to send a notification to specific users, similar to what is shown in the example script here. |
Listeners: Post a message to slack | ALT | The same function can be achieved using a Custom Listener and a script to Post to Slack. |
Listeners: Send a custom email (non-issue events) | ALT | The same function can be achieved using a Custom Listener and a script to send a notification. The notify API doesn’t allow you to email external emails and only allows you to notify users, groups, or user fields (such as assignee or reporter) on an issue. |
Listeners: Send a custom email | ALT | The same function can be achieved using a Custom Listener and a script to send a notification. The notify API doesn’t allow you to email external emails and only allows you to notify Jira users, groups, or user fields (such as assignee or reporter) on an issue. The API does not allow users to send notifications to themselves. |
Listeners: Version Synchronizer | ALT | The same function can be achieved by writing your own script in the Custom Listener but with all the caveats of time limitations, API availability, etc. Check out our page on Scripting in ScriptRunner for Jira Cloud for tips. |
Mail Handler
Server/DC Feature | Cloud Parity | Parity Notes/Alternatives |
---|---|---|
Mail Handler |
Resources
Server/DC Feature | Cloud Parity | Parity Notes/Alternatives |
---|---|---|
Resources: Database Connection | ALT | You can connect to databases in scripts and link to the examples we have in the Script Console examples. |
Resources: LDAP Connection | ALT | If the LDAP service exposes a REST API, you could connect to this in Scripts by making a REST API call. |
Resources: Local Database Connection | ||
Resources: Slack Connection | ALT | You can connect to Slack in scripts via the REST API and link to the examples we have in the Script Console examples. |
REST End-Points
Server/DC Feature | Cloud Parity | Parity Notes/Alternatives |
---|---|---|
REST End-Points: Custom End-Point | Jira cloud only works via the Atlassian REST API, and this means you can call the external system's REST endpoints directly in Scripts to receive data from external systems. |
Script Console
Server/DC Feature | Cloud Parity | Parity Notes/Alternatives |
---|---|---|
Script Console | There is a limit of 240 seconds for Cloud script executions. After running for 240 seconds, the logs will be collected, and the code will be terminated. |
Script Editor
Server/DC Feature | Cloud Parity | Parity Notes/Alternatives |
---|---|---|
Script Editor | ||
HAPI |
Script Fragments
Server/DC Feature | Cloud Parity | Parity Notes/Alternatives |
---|---|---|
Script Fragments | ◐ | ScriptRunner for Jira Cloud supports Web Panels only. Script source must be specified (and accessible to Jira), inline script is not available. |
Script Fields
Server/DC Feature | Cloud Parity | Parity Notes/Alternatives |
---|---|---|
Script Fields: Custom Script Fields | ◐ | Due to current limitations, the value of Scripted Fields will currently only refresh on issue view. |
Script Fields: Custom Picker | ||
Script Fields: Database Picker | You can connect to databases in scripts and link to the examples we have in the Script Console examples. | |
Script Fields: Date of the first transition | ALT | The same function can be achieved using a Custom Scripted Field and a script using a Text Field type. |
Script Fields: Issue(s) Picker | ||
Script Fields: LDAP Picker Field | If the LDAP service exposes a REST API, you could connect to this in Scripts by making a REST API call. | |
Script Fields: No. of times in a status | ALT | The same function can be achieved by writing your own script in the Custom Scripted Field but with all the caveats of time limitations, API availability, etc. Check out our page on Scripting in ScriptRunner for Jira Cloud for tips. |
Script Fields: Remote issue(s) picker | ALT | You can link to issues in a remote Jira instance using the Create remote issue link API inside a script. We have an example of using this API here. |
Script Fields: Show parent issue in a hierarchy | ALT | The same function can be achieved by writing your own script in the Custom Scripted Field but with all the caveats of time limitations, API availability, etc. Check out our page on Scripting in ScriptRunner for Jira Cloud for tips. |
Script Fields: Time of Last status Change | ALT | The same function can be achieved using a Custom Scripted Field and a script using a Text Field Type. |
Settings
Server/DC Feature | Cloud Parity | Parity Notes/Alternatives |
---|---|---|
Script Edit Permissions |
| |
Hapi Code Helper | ||
In-App Communications | ◐ | There is no opt-in for this, but we use in-app banners and popups to communicate information relating to Scriptrunner for Jira Cloud. |
Switch User Function | ||
Anonymous Analytics | ||
User Editor Settings |
Workflow Conditions
ScriptRunner for Jira Cloud provides workflow conditions using the Jira Expression Framework. It is not possible to use the REST API.
Server/DC Feature | Cloud Parity | Parity Notes/Alternatives |
---|---|---|
Workflow > Condition: All sub-tasks must be resolved | ALT | The same function can be achieved using a custom script condition and a script to check all sub-tasks are resolved. |
Workflow > Condition: Allows the transition if this query matches a JQL query |
| |
Workflow > Condition: Checks the issue has been in a status previously | ALT | The same function can be achieved using a custom script condition and a script that Checks the Issue Has Been in a Status Previously. |
Workflow > Condition: Custom script condition | ALT | Cloud conditions use Jira Expression language where the result must be true or false. |
Workflow > Condition: Field(s) required condition | ALT | The same function can be achieved using a custom script condition and a Field(s) Required script. |
Workflow > Condition: Group(s) condition | ALT | The same function can be achieved using a custom script condition and a script to check the user is within a specified user group. |
Workflow > Condition: JQL query matches condition |
| |
Workflow > Condition: Linked issues condition | ALT | The same function can be achieved using a custom script condition and a Linked Issues script. |
Workflow > Condition: Project role(s) condition | ALT | The same function can be achieved using a custom script condition and a script to check the user is within a specified project role. |
Workflow > Condition: Regular expression condition | ALT | The same function can be achieved using a custom script condition and the Regular Expressions script. |
Workflow > Condition: Simple scripted condition | ◐ | Cloud conditions use Jira Expression language where the result must be true or false, it does not use Groovy. |
Workflow > Condition: User in field(s) condition | ALT | The same function can be achieved using a custom script condition and the User in Field(s) script. |
Workflow > Condition: User(s) and User Group(s) condition | ALT | The same function can be achieved using a custom script condition and the User(s) and User Group(s) script. |
Workflow Post Functions
Server/DC Feature | Cloud Parity | Parity Notes/Alternatives |
---|---|---|
Workflow > Post Function: Add a comment to this issue | ALT | The same function can be achieved using a custom post function and a script. |
Workflow > Post Function: Add/remove from sprint | ||
Workflow > Post Function: Adds a comment to linked issues when this issue is transitioned | ALT | The same function can be achieved using a custom post function and a script. |
Workflow > Post Function: Adds the current user as a watcher | ALT | The same function can be achieved using a custom post function and a script. |
Workflow > Post Function: Archive this issue | ALT | This can be achieved by writing a script to call the Archive issue API to achieve this. Note: to use this API, you need to be on the Premium or Enterprise tiers of Jira Cloud. |
Workflow > Post Function: Assign to first member of role | ALT | The same function can be achieved using a custom post function. |
Workflow > Post Function: Assign to last role member | ALT | The same function can be achieved using a custom post function. |
Workflow > Post Function: Clear field(s) post function | ALT | The same function can be achieved using a custom post function and a script. |
Workflow > Post Function: Clones an issue, and links | ||
Workflow > Post Function: Copy field values | ALT | The same function can be achieved by writing your own script in the custom post function but with all the caveats of time limitations, API availability, etc. Check out our page on Scripting in ScriptRunner for Jira Cloud for tips. We have an example script to show how to clone an issue and link it here. |
Workflow > Post Function: Create a sub-task | ||
Workflow > Post Function: Custom script post-function | ||
Workflow > Post Function: Fast-track transition an issue | ||
Workflow > Post Function: Fires an event when condition is true | ALT | This post function is used to send an email when a condition occurs in Jira Server/Data Center. In Jira Cloud you can add the condition to be matched to the script conditions box on a custom post function. When the condition is true, you can call the Send notification for issue API to send a notification to specific users, similar to what is shown in the example script here. |
Workflow > Post Function: Post a message to Slack | ALT | The same function can be achieved using a custom script post-function with a script to post to Slack. |
Workflow > Post Function: Send a custom email | The equivalent in Cloud is “Send Notification”. | |
Workflow > Post Function: Set issue security level depending on the provided condition | ALT | This can be achieved by writing a script that, if the condition matches, calls the Edit Issue API and updates the issue to set the security field on an issue. We have an example of setting issue security here. |
Workflow > Post Function: Transition parent when all subtasks are resolved | ◐ | The same function can be achieved using the fast-track transition issue built-in post function and adding a condition script to verify all subtasks are resolved. |
Workflow Validators
ScriptRunner for Jira Cloud provides workflow validators using the Jira Expression Framework. It is not possible to use the REST API.
Server/DC Feature | Cloud Parity | Parity Notes/Alternatives |
---|---|---|
Workflow > Validator: Custom script validator | ALT | Cloud conditions use Jira Expression language where the result must be true or false. |
Workflow > Validator: Field(s) changed validator | ALT | The same function can be achieved using a custom script validator and the Field(s) Changed script. |
Workflow > Validator: Field(s) required validator | ALT | The same function can be achieved using a custom script validator and the Field(s) Required script. |
Workflow > Validator: Regular expression validator | ALT | The same function can be achieved using a custom script validator and a script. |
Workflow > Validator: Require a comment on transition | ALT | This script can be used to enforce that a comment has been given on transition. |
Workflow > Validator: Simple scripted validator | ◐ | Cloud conditions use the Jira Expression language where the result must be true or false, it does not use Groovy. |
Workflow > Validator: User in field(s) validator | ALT | The same function can be achieved using a custom script validator and a script. |