release notes

SurveyJS v2.3.7

Released: September 17, 2025

SurveyJS v2.3.7 introduces several new features, including exclusive columns in matrix questions, in-place editing control in Survey Creator, Dashboard support for composite and specialized question types, a custom delimiter for Table View item lists, and a JSON schema with properties metadata distributed in the npm package.

Matrix with Checkboxes: Exclusive Column

Starting with this release, matrix questions with checkboxes can include an exclusive column. When a user selects a checkbox in this column, all other checkboxes in the same row are automatically deselected. This is useful for options like "None", "Refuse to answer", or "Don't know".

To mark a column as exclusive, enable its isExclusive property:

{
  "elements": [
    {
      "type": "matrix",
      "name": "device-usage",
      "cellType": "checkbox",
      "title": "Which devices do you use for each of the following activities?",
      "columns": [
        { "value": "phone", "text": "Phone" },
        { "value": "tablet", "text": "Tablet" },
        { "value": "laptop", "text": "Laptop" },
        { "value": "smart-tv", "text": "Smart TV" },
        { "value": "none", "text": "None", "isExclusive": true }
      ],
      "rows": [
        { "value": "videos", "text": "Watching videos" },
        { "value": "news", "text": "Reading news" },
        { "value": "calls", "text": "Video calls" },
        { "value": "shopping", "text": "Online shopping" }
      ]
    }
  ]
}

Open in Plunker

[Survey Creator] Disable In-Place Editing for Individual Properties

Survey Creator v2.3.7 introduces the onAllowInplaceEdit event. This allows you to disable direct text editing on the design surface for specific properties, which is useful when a rich text editor is integrated in the Property Grid, but the surface displays raw markup when users try to edit the properties on it.

The following code disables in-place editing for all "text" and "html" properties:

// ...
// Omitted: `SurveyCreatorModel` creation
// ...
creator.onAllowInplaceEdit.add((_, options) => {
  const prop = Serializer.findProperty(
    options.element.getType(),
    options.propertyName
  );
  if (prop.type == "text" || prop.type == "html") {
    options.allow = false;
  }
});

Open in CodeSandbox

[Dashboard] Support for Specialized and Composite Question Types

Dashboard visualizations now support specialized and composite question types. For example, consider the following composite question:

import { ComponentCollection } from "survey-core";

ComponentCollection.Instance.add({
  name: "workEnvironmentFeedback",
  title: "Work Environment & Wellbeing",
  defaultQuestionTitle: "Please provide feedback on your work environment and wellbeing",
  elementsJSON: [
    { type: "rating", name: "workstationComfort", title: "How comfortable is your workstation?", rateMin: 1, rateMax: 5 },
    { type: "dropdown", name: "equipmentQuality", title: "Which equipment needs improvement?", choices: ["Laptop", "Monitor", "Chair", "Keyboard"], showOtherItem: true, showNoneItem: true },
    { type: "radiogroup", name: "noiseLevel", title: "How would you describe the noise level in your work area?", choices: ["Quiet", "Moderate", "Noisy"] },
    { type: "rating", name: "workLifeBalance", title: "How do you rate your work-life balance?", rateMin: 1, rateMax: 5 },
    { type: "comment", name: "openFeedback", title: "Any additional feedback or suggestions?" }
  ]
});

Here's how this question is visualized in the Dashboard:

SurveyJS Dashboard: Composite question visualization

Open in Plunker

[Table View] API to Change the Delimiter in Item Lists

Table View now supports a custom itemsDelimiter property to change how item lists are displayed. For example, the following code uses a pipe | as a delimiter:

import { Model } from 'survey-core';
import { Tabulator } from 'survey-analytics/survey.analytics.tabulator';

const surveyJson = { /* Survey JSON schema */};
const survey = new Model(surveyJson);
const data = [ /* Survey responses */ ];

const tableView = new Tabulator(
  survey,
  data,
  {
    itemsDelimiter: " | "
  }
);
SurveyJS Table View: Custom delimiter for item lists

Open in Plunker

JSON Schema with Properties Metadata Included in the Distribution Package

A JSON schema with properties metadata is now bundled with SurveyJS. This schema helps validate survey JSON structures and ensures that question and property definitions are consistent with the framework. You can use it in editors, linters, or automated testing workflows to detect configuration errors early.

Starting with v2.3.7, the schema is available both in the survey-core npm package and via CDN.

Bug Fixes and Minor Enhancements

Form Library

  • Expression functions: Add access to the name of the property that triggered the expression (#10323)
  • Yes/No (Boolean): The "required" mark doesn't appear when the question is rendered as a checkbox (#10320)
  • Numeric Single-Line Input: Data validation ignores the step value (#10348)
  • "Skip To" trigger navigates to a wrong page when its expression contains calculated values (#10376)
  • [Vue 3] "Thank You" page doesn't display an updated score (#10381)
  • Conditional visibility doesn't work for a Panel nested inside a Dynamic Panel in input-per-page survey mode (#10360)
  • File Upload raises an exception when uploading an image on a screen size less than 300px (#10363)
  • Dynamic Matrix: Matrix rows are incorrectly indicated as droppable inside a detail section (#10365)

Survey Creator

  • Multiple Textboxes: A textbox's bottom border is cut in edit state (#7140)

Dashboard

  • Enhance the accessibility of chart titles (#619)

PDF Generator

  • Signature is misaligned when exported to PDF (#429)

How to Update SurveyJS Libraries in Your Application

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

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

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

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

<script src="https://unpkg.com/survey-pdf@2.3.7/survey.pdf.min.js"></script>
<script src="https://unpkg.com/survey-pdf@2.3.7/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.