templateTitlePlaceholder gives a Dynamic Panel entry a fallback header when its regular title is blank. This is especially useful when entries are collapsed and the header is all the respondent can see.
In this example, templateTitle: "{panel.fullName}" uses each contact's Full name as the header. The Full name field stays empty until the respondent enters a name.
The fallback appears whenever the title resolves to an empty value, even if other fields in the entry are already filled in. If you have several unnamed entries, use "Contact {panelIndex}" to show Contact 1, Contact 2, and so on.
The new setting is available in SurveyJS v3.2.5 and applies to Dynamic Panel entries in list mode.
For more details, see the latest release notes: https://t.co/RgW0eMNMMv
SurveyJS v3.2.5 is out!
You can now require a Yes answer for consent or acknowledgment.
With isRequired: true alone, both Yes and No are valid because either one answers the question. requireTrue: true already rejects unanswered responses, so you can use it on its own.
Use requireTrueErrorText to explain what the respondent needs to do, such as "You must agree to the terms and conditions to continue." If your backend expects a value like "accepted" instead of true, set valueTrue to "accepted". The respondent still selects Yes, and the form stores your custom value.
Try it out👇 Yes/Now Question demo: https://t.co/nEtQWSTEp0
This release also brings custom dropdown loading indicators, fallback titles for empty Dynamic Panel entries, and formula previews in Survey Creator.
Plus redesigned tooltips and bug fixes.
Explore all updates: https://t.co/RgW0eMNeWX
SurveyJS v3.2.4 is out!
Read-Only View Mode now lets you present a filled-out form as a readable record. Answers appear as text or other non-interactive elements, so users can review the information easily.
The two settings work together:
- "readOnly": true prevents users from changing answers.
- "readOnlyMode": "view" controls how those read-only answers appear.
In JavaScript:
survey.readOnly = true;
survey.readOnlyMode = "view";
You can apply view mode to the entire form or configure it for individual pages, panels, or questions. Setting readOnlyMode controls the presentation when that element is read-only.
Try it out👇 Read Only demo: https://t.co/IBNyDJd4yS
This release also brings keyboard hints and new Tailwind CSS v4 theme adapter to help your forms feel like a natural part of your Tailwind app.
Explore all updates: https://t.co/FOlBVr3J0T
SurveyJS v3.2.2 makes it easier to answer forms with a keyboard.
Radio Button Group, Checkboxes, and Image Picker questions support optional letter shortcuts (A, B, ..., Z, AA, ...). When the question has keyboard focus, press a choice's shortcut to select it. In questions that allow multiple selections, pressing the same shortcut again clears that choice.
Set choiceShortcutsEnabled: true in your survey JSON or turn on Enable choice shortcuts in Survey Creator to enable shortcuts across supported questions.
Turn on Show keyboard hints to display the available keyboard actions below each question so respondents can see which keys to use.
You can override both settings for individual questions.
For details on how keyboard navigation works when auto-advance is enabled, see the v3.2.2 release notes: https://t.co/bdtA6Rx8xo
SurveyJS v3.2.3: Performance improvements ⏩
Large, complex forms now load and respond faster, and Survey Creator opens tabs more quickly.
In our large-form benchmarks comparing v3.2.0 with v3.2.3:
- Survey model loading took 90% less time.
- Repeated answer processing took 98% less time.
- Creator's Translation tab opened in about 0.1 seconds, down from 6.8 seconds.
- The initial Designer DOM contained 67% fewer nodes.
These results reflect cumulative October optimizations. Performance varies by form and environment.
See the benchmarks and implementation details 👇
https://t.co/URXVZxhTwq
Describe who you want to survey and what you want to learn — Pollarix AI drafts the questions.
Pollarix then uses SurveyJS to detect errors loading the draft and adds its own checks for problems such as missing answer choices, broken logic, and leading questions.
The draft opens in Survey Creator for human review and editing. Users can also request changes through Pollarix's AI assistant and undo those edits.
Once shared, the survey is displayed to respondents by SurveyJS Form Library.
See how Pollarix built this workflow 👇
https://t.co/4m3Z8zO7IS
SurveyJS v3.2.3 is out!
In questionPerPage or inputPerPage modes, the progress bar now shows where respondents are in the form — for example, "Question 2 of 5" and 40%. It updates as they move forward or back, and adjusts the total when conditional logic or dynamic content changes the number of steps.
What counts as a step depends on the mode:
- questionPerPage: Each displayed question or panel is one step. A question containing multiple inputs can still count as a single step.
- inputPerPage: Individual inputs are shown as separate steps. Dynamic questions can also have summary screens, which count as steps.
Try it out👇
Loop and Merge demo: https://t.co/mJvpkZqxHd
Demo: Multi-Step Form Wizard: https://t.co/u5zZMZ4YWQ
This release also brings major performance improvements, Clear button support for more question types, and reorganized row and entry settings in Survey Creator.
Explore all updates:
https://t.co/mzj2id4TB7
SurveyJS now supports pagination within Multi-Select Matrix, Dynamic Matrix, and Dynamic Panel questions.
Previously, all rows or panels were displayed at once, making long questions difficult to navigate. Now, developers can use the pageSize property to specify how many rows or panels appear per page, with navigation controls allowing respondents to move between them.
In Survey Creator, form authors can set the number of rows or panels per page using the Rows per page or Entries per page setting in the Property Grid.
Try it out👇
Paging in Matrices: https://t.co/2rHNJ3jICx
Paging in Dynamic Panel: https://t.co/1gMJK0wIBR
SurveyJS v3.2.2 improves integration with Bootstrap, Material UI (MUI), and shadcn/ui.
Theme adapter stylesheets already help SurveyJS components match your application's visual design. The new setupThemeAdapter() function takes this a step further. It adjusts default form layout settings and Survey Creator's Property Grid options to better align with the selected design system.
To enable it, import the matching adapter stylesheet and call setupThemeAdapter("bootstrap"), setupThemeAdapter("mui"), or setupThemeAdapter("shadcn") before creating your survey or Survey Creator instance.
Learn more about the new function in the Theme Adapter Guide: https://t.co/BLIvONOB8j
SurveyJS now tracks dependencies between calculated values and the questions or variables they reference. Previously, changing any survey answer could trigger recalculation of all calculated values. Now, by default, SurveyJS skips unnecessary recalculations.
Imagine you have a form with these fields:
- quantity — number of products ordered
- price — price per product
- customerName — customer's name
- deliveryAddress — delivery address
The form also has a calculated value called total:
{
"calculatedValues": [
{
"name": "total",
"expression": "{quantity} * {price}"
}
]
}
Previously, changing any of the four fields could trigger recalculation of total. Now, SurveyJS recognizes that total depends only on quantity and price.
Changing either of these values triggers recalculation, while changing customerName or deliveryAddress does not.
This reduces unnecessary calculations and can improve performance in complex forms with multiple calculated values.
To restore the previous behavior, set the global calculatedValueTrackDependencies property to false.
SurveyJS Dashboard v3.2.2 lets developers define custom intervals for histograms, instead of relying on automatically generated intervals. This gives you more control over how survey results are presented and makes charts easier to interpret.
For example, you can group respondents by age (Under 30, 30-49, 50+), exam scores, or other meaningful categories, with full control over interval boundaries and labels.
📌Two Recent Breaking Changes to Be Aware Of
If you're updating to SurveyJS v3.0.4 or later, please note two breaking changes that may affect the appearance of your forms and other SurveyJS components.
Fonts are no longer bundled with SurveyJS
SurveyJS Form Library, Survey Creator, and Dashboard no longer include font files in their packages. This reduces package size and gives you more control over how fonts are loaded and hosted.
Advanced survey header is now the default
SurveyJS Form Library now uses the advanced survey header by default, replacing the basic header used in previous versions. This brings the default header appearance in line with the updated SurveyJS design.
Both changes were introduced in v3.0.4. We recommend reviewing them before upgrading, especially if your application relies on the previous default styling.
https://t.co/01kukmKO6U
We added 10 cool features to @SurveyJS
and forked it exactly ZERO times. Every single enhancement was built on SurveyJS’s own extension points. Read all about it in the latest blog post: https://t.co/Z2InMyXqld
New in SurveyJS v3.2.0: AI Tools & Resources
We're making it easier to build, customize, and integrate SurveyJS forms with your AI coding assistants.
Here's what's new:
🔹 SurveyJS MCP Server – Gives AI agents access to up-to-date documentation and API references, helping them generate more accurate, version-aware code.
🔹 AI Agent Skills – Ready-to-use instructions for common development tasks, from creating and validating survey JSON to customizing Survey Creator, matching forms to your design system, and generating PDFs.
🔹 AI-Ready Documentation – SurveyJS documentation and demos are now available in Markdown, with an llms.txt file to help AI agents discover relevant resources.
💡 Less time explaining SurveyJS to your AI assistant. More time building.
Explore the new AI tools and resources:
https://t.co/Ps3d8ohcyg
#SurveyJS #AITools #MCP #AICoding
Multi-user form editing is now available in Survey Creator.
Your team can work on questions, branching logic and translations in the same form at the same time. Changes appear in real time, presence indicators show where collaborators are active, and change history records their edits.
Under the hood, CollaborationPlugin captures edits as JSON records and applies incoming updates without sending them back out. Your application provides the connection and server.
Our reference implementation uses a Node.js WebSocket server and includes React, Angular, Vue 3 and vanilla JavaScript clients — all able to join the same room.
Watch the video for a walkthrough, then open the demo in two tabs to try it yourself:
Live demo: https://t.co/Upui19GhCV
Source code: https://t.co/QFjzYMnStx
Documentation: https://t.co/FNgUuMWow0
If you build with .NET, you can now add SurveyJS to https://t.co/WBSKcYzCVU Core and Blazor apps directly through NuGet. The packages include ready-to-use scripts and styles that your app serves itself, so no Node.js, npm or bundler setup is required for the SurveyJS libraries. Version 3.2.0 is live: https://t.co/9OqK36mWQA
Bug reports and feature requests are welcome here or on GitHub: https://t.co/SWdegIGWu0
We've put together a demo showing how multiple users can complete the same SurveyJS form at the same time. Each participant joins a room, and changes to individual answers are synchronized across everyone's form and rare recorded in the Changes panel.
The demo uses onValueChanged to capture edits, https://t.co/yHv3KreTsL to share them, and setValue() to update each participant’s form. Watch the video, or open the demo in two tabs to try it yourself: https://t.co/0Xvktexodp
Implementation and source code: https://t.co/LVusklaSlc
A survey JSON schema can load even when its logic is broken. A typo in visibleIf, for example, can leave a question hidden without producing a model validation error.
The SurveyJS Linter helps catch these issues before the form reaches users.
It analyzes survey JSON for misspelled question references, conditions that can never be true, invalid choice comparisons, and cycles in calculated values or triggers. It runs without building a survey model or changing your JSON.
The Linter is available in survey-core 3.0.3 and later. See the example and full documentation:
https://t.co/JlU0Y2DFb4