SurveyJS v2.5.20

Released: April 14, 2026

SurveyJS v2.5.20 extends the minInArray and maxInArray expression functions by adding support for returning values from related fields.

The minInArray and maxInArray functions compute the minimum or maximum numeric value from a specified field within an array (for example, Multi-Select Matrix, Dynamic Matrix, or Dynamic Panel responses).

Previously, these functions always returned only the computed numeric value from the target field. With this update, they can optionally return a value from another field in the same array item that produced the min/max result.

To accommodate this enhancement, the argument order has been updated:

  • The third argument can specify either a return field or a filter condition.
  • When a return field is provided as the third argument, the filter condition must now be passed as the fourth argument.

Updated signature (same applies to maxInArray):

minInArray(array, valueField)
minInArray(array, valueField, returnField)
minInArray(array, valueField, filterCondition)
minInArray(array, valueField, returnField, filterCondition)

Examples:

{
  matrixdynamic: [
    { name: "A", price: 10, active: false },
    { name: "B", price: 20, active: true },
    { name: "C", price: 30, active: true }
    { name: "D", price: 40, active: false }
  ]
}
"minInArray({matrixdynamic}, 'price')" // 10
"minInArray({matrixdynamic}, 'price', 'name')" // A
"minInArray({matrixdynamic}, 'price', active = true)" // 20
"minInArray({matrixdynamic}, 'price', 'name', active = true)" // B

"maxInArray({matrixdynamic}, 'price')" // 40
"maxInArray({matrixdynamic}, 'price', 'name')" // D
"maxInArray({matrixdynamic}, 'price', active = true)" // 30
"maxInArray({matrixdynamic}, 'price', 'name', active = true)" // C

New Demo

Multi-Step Form Wizard

Bug Fixes and Minor Enhancements

Form Library

  • age() is not calculated when the DateTime value doesn't match the specified mask and saveMaskedValue is enabled (#11157)
  • Single-Line Input: Display value ignores the mask when using "defaultValueExpression": "today()" (#11158)
  • [Survey Creator] Multi-Select Matrix: allowClear is preserved when changing cellType from "default" to "radiogroup", although radio columns do not support it (#11146)
  • Matrix cell values in expressions: Reference placeholder is displayed until the actual cell value is defined (#11140)
  • isContainerReady() expression function returns true even when not all required questions are specified (#11142)
  • Dropdown: Custom item template is not rendered in read-only mode (#11143)
  • Visibility expression evaluates incorrectly when it relies on RegExp validation and references a calculated value and the containsErrors property (#11152)
  • Dynamic Matrix column: Unique value validation is bypassed when expression validator is used (#11155)

Survey Creator

  • [Vanilla JS] TypeScript build breaks after migrating from Webpack to Rollup (#7616)
  • Property Grid: Survey element selector persists in a custom sidebar component (#7552)
  • Design surface: "Choices are loaded from a web service" message overflows its container in certain cases (#7614)

How to Update SurveyJS Libraries in Your Application

Angular
npm i survey-core@v2.5.20 survey-angular-ui@v2.5.20 --save
npm i survey-creator-core@v2.5.20 survey-creator-angular@v2.5.20 --save
npm i survey-analytics@v2.5.20 --save
npm i survey-pdf@v2.5.20 --save
React
npm i survey-core@v2.5.20 survey-react-ui@v2.5.20 --save
npm i survey-creator-core@v2.5.20 survey-creator-react@v2.5.20 --save
npm i survey-analytics@v2.5.20 --save
npm i survey-pdf@v2.5.20 --save
Vue.js
npm i survey-core@v2.5.20 survey-vue3-ui@v2.5.20 --save
npm i survey-creator-core@v2.5.20 survey-creator-vue@2.5.20 --save
npm i survey-analytics@2.5.20 --save
npm i survey-pdf@2.5.20 --save
HTML/CSS/JavaScript
<link href="https://unpkg.com/survey-core@2.5.20/survey-core.min.css" type="text/css" rel="stylesheet">
<script type="text/javascript" src="https://unpkg.com/survey-core@2.5.20/survey.core.min.js"></script>
<script type="text/javascript" src="https://unpkg.com/survey-js-ui@2.5.20/survey-js-ui.min.js"></script>

<script src="https://unpkg.com/survey-core@2.5.20/themes/index.min.js"></script>
<script src="https://unpkg.com/survey-creator-core@2.5.20/themes/index.min.js"></script>

<link href="https://unpkg.com/survey-creator-core@2.5.20/survey-creator-core.min.css" type="text/css" rel="stylesheet">
<script src="https://unpkg.com/survey-creator-core@2.5.20/survey-creator-core.min.js"></script>
<script src="https://unpkg.com/survey-creator-js@2.5.20/survey-creator-js.min.js"></script>

<link href="https://unpkg.com/survey-analytics@2.5.20/survey.analytics.min.css" rel="stylesheet">
<script src="https://unpkg.com/survey-analytics@2.5.20/survey.analytics.min.js"></script>

<script src="https://unpkg.com/survey-pdf@2.5.20/survey.pdf.min.js"></script>
<script src="https://unpkg.com/survey-pdf@2.5.20/pdf-form-filler.min.js"></script>

Your cookie settings

We use cookies to make your browsing experience more convenient and personal. Some cookies are essential, while others help us analyse traffic. Your personal data and cookies may be used for ad personalization. By clicking “Accept All”, you consent to the use of all cookies as described in our Terms of Use and Privacy Statement. You can manage your preferences in “Cookie settings.”

Your renewal subscription expires soon.

Since the license is perpetual, you will still have permanent access to the product versions released within the first 12 month of the original purchase date.

If you wish to continue receiving technical support from our Help Desk specialists and maintain access to the latest product updates, make sure to renew your subscription by clicking the "Renew" button below.

Your renewal subscription has expired.

Since the license is perpetual, you will still have permanent access to the product versions released within the first 12 month of the original purchase date.

If you wish to continue receiving technical support from our Help Desk specialists and maintain access to the latest product updates, make sure to renew your subscription by clicking the "Renew" button below.