Compatibility of Atlassian's New Transition Experience with Jira Expressions
Since April 2025, Atlassian has permanently rolled out the new transition experience in Jira. As a consequence, the way your Jira expressions (conditions and validators) work will change.
When working with Jira Cloud, it's important to understand that there are two types of rich text fields:
- Pre-defined Atlassian fields: These are built-in fields like
descriptionandenvironment. They areRichTexttype and have a built-inplainTextproperty for easy access to their text content. - Custom fields: These are fields created by customers. They are stored as simple
Mapobjects and require additional processing to access their text content.
Understanding this distinction is crucial for correctly handling rich text content in your Jira scripts and expressions. You can refer to Atlassian's documentation for more details on Jira expression types.
Atlassian pre-defined fields (RichText type)
These fields, such as description and environment, are of RichText type and have a built-in plainText property.
For pre-defined fields, always use .plainText directly.
Access plain text content
Before Atlassian's new transition experience:
issue.description != ""
issue.environment != ""After Atlassian's new transition experience:
issue.description.plainText != ""
issue.environment.plainText != ""Check for specific content
Before Atlassian's new transition experience:
issue.description.toLowerCase().contains("urgent")
issue.environment.toLowerCase().contains("production")After Atlassian's new transition experience:
issue.description.plainText.toLowerCase().includes("urgent")
issue.environment.plainText.toLowerCase().includes("production")Count words
Before Atlassian's new transition experience:
issue.description.split(/\s+/).length > 50
issue.environment.split(/\s+/).length > 20After Atlassian's new transition experience:
issue.description.plainText.split(/\s+/).length > 50
issue.environment.plainText.split(/\s+/).length > 20Check for empty fields
Before Atlassian's new transition experience:
issue.description == ""
issue.environment == ""After Atlassian's new transition experience:
issue.description.plainText == ""
issue.environment.plainText == ""Concatenate multiple rich text fields
Before Atlassian's new transition experience:
issue.description + " " + issue.environmentAfter Atlassian's new transition experience:
issue.description.plainText + " " + issue.environment.plainTextCustom fields (Map type)
For custom fields, always use the plainTextValue() function to extract the text content. Custom fields require a helper function to extract plain text content, as shown below:
/ function declaration
let plainTextValue = value =>
typeof value == 'Map' ?
new RichText(value).plainText :
value ;
// the actual jira expression that returns a true or false
plainTextValue(issue.customfield_10076) == "text"
Access plain text content
Before Atlassian's new transition experience:
issue.customfield_10234 != ""After Atlassian's new transition experience:
plainTextValue(issue.customfield_10234) != ""Check for specific content
Before Atlassian's new transition experience:
issue.customfield_10234.toLowerCase().contains("urgent")After Atlassian's new transition experience:
plainTextValue(issue.customfield_10234).toLowerCase().includes("urgent")Count words
Before Atlassian's new transition experience:
issue.customfield_10234.split(/\s+/).length > 50After Atlassian's new transition experience:
plainTextValue(issue.customfield_10234).split(/\s+/).length > 50Check for empty fields
Before Atlassian's new transition experience:
issue.customfield_10234 == ""After Atlassian's new transition experience:
plainTextValue(issue.customfield_10234) == ""Concatenate custom fields with pre-defined fields
Before Atlassian's new transition experience:
issue.description + " " + issue.customfield_10234After Atlassian's new transition experience:
issue.description.plainText + " " + plainTextValue(issue.customfield_10234)