Learn what's new across releases, with details of features, enhancements, and resolved issues.
Jan
Feb
Mar
Apr
May
Jun
Jul
Aug
Sep
Oct
Nov
Dec
jQWidgets v27.0.0Major versionSep 18, 2026
Features
PickList (jqxPickList) - A new dual-list widget for moving items between an available and a selected list, with optional search boxes, checkbox selection and a reorderable selected list. Available for jQuery, Angular, React and Vue 3, with demos for each.
All Vue demos migrated to Vue 3 - The Vue demo set now targets Vue 3 and builds with webpack 5. Every demo previously used Vue 2 with webpack 3; Vue 2 reached end of life in December 2023. Demo components now import the Vue 3 wrappers from jqwidgets-scripts/jqwidgets-vue3 and bootstrap with createApp. Vue 2 demos are no longer provided.
Server-side rendering support for React and Vue 3 - jQWidgets components can now be imported in Next.js and Nuxt applications without the build failing. Previously every React wrapper accessed window at module scope and every Vue 3 wrapper called JQXLite in setup(), so importing a component threw "ReferenceError: window is not defined" during a server build.
Component teardown in all framework wrappers - React, Angular and Vue 3 components now unbind their event handlers and destroy the underlying widget when unmounted. Previously each mount/unmount cycle leaked a widget instance, which surfaced under React StrictMode, hot reload and route changes.
Model Context Protocol server (jqwidgets-mcp-server) - Lets AI coding assistants generate correct jQWidgets code for jQuery, Angular, React and Vue 3 from the same API definitions that drive the documentation.
Documentation - A full README covering installation, framework quick-starts, the widget and theme inventory, and the server-side rendering constraint. Release notes for v11 through v24 have also been restored; this file previously ended at v10.1.0.
Accessibility:
ARIA grid semantics in jqxGrid, jqxTreeGrid and jqxDataTable - Row and column counts and 1-based row and column indices are now published. This matters most for virtualized data: previously a screen reader announced "row 3 of 30" while the user was on record 4,312 of 50,000, because only the rendered window existed in the DOM.
Accessible names now reach the element that carries the grid role - Setting aria-label or aria-labelledby on a grid, tree grid or data table had no effect, because the role sits on an inner element. Several grids on one page were all announced simply as "grid".
Hierarchy in jqxTreeGrid - Rows publish their level, expanded state and selected state, under a treegrid role.
Dialog support in jqxWindow - Modal windows are labelled from their header, described by their content, marked aria-modal while open, contain keyboard focus, and restore focus to the element that opened them.
Keyboard access to Scheduler appointments - Appointments are now focusable, reachable by Tab, announced with subject, location and time range, and activatable with Enter. Previously they were plain positioned elements that assistive technology did not report at all.
Status message announcements - Grid filtering, sorting and paging, and validation messages, are announced through shared ARIA live regions. New localizable strings filterresultsstring, sortappliedstring and pagechangedstring have been added to the grid localization object.
Visible keyboard focus indicator in the base theme - The base stylesheet suppressed focus outlines in 92 places and defined no replacement, so keyboard users had no visible indication of focus. A focus-visible indicator is now applied, without showing an outline on mouse interaction.
Verified with the NVDA screen reader - Grid, tree grid, tabs, scheduler and dialog have been tested with NVDA on Windows. A draft conformance report and the reproducible test suite are included under accessibility/.
Breaking Changes:
The vendored jquery.js (jQuery 1.8.3) is no longer included in the SDK download. It was a 2012 release subject to four upstream XSS advisories that could not be patched locally, and nothing in the product or its documentation referenced it. jQWidgets does not require it: load the jQuery of your choice (3.5.0 or later is advised) or use the bundled JQXLite runtime. Applications whose script tags pointed at jqwidgets/jquery.js need to point at a current jQuery instead.
Angular 12 through 18 are no longer supported. The minimum supported version is Angular 19, which is required for the standalone component output. Customers on Angular 18 or earlier should remain on v26.
jqxTabs publishes the tablist role on its list element rather than the container. Stylesheets or scripts that select the container by that role need updating.
jqxNavigationBar is exposed as an accordion rather than a tab set, which changes the roles and states published to assistive technology. Its API and visual appearance are unchanged.
jqxLinkButton no longer overrides the anchor role.
The base theme now draws a visible focus ring on keyboard focus. Applications that supply their own focus styling may want to override it.
Two visually hidden live-region elements are appended to document.body on page load, to carry status announcements.
The Vue demos target Vue 3 and webpack 5. Anyone building the demo projects needs to reinstall dependencies; the Vue 2 demo sources are replaced, not kept alongside.
Tab order in jqxGrid follows document order rather than the previous positive tabindex values. Pages that relied on the grid appearing early in the tab sequence will see a different order.
Fixes
jqxScheduler getJQXAppointmentByElement returned the wrong appointment. The lookup mixed an appointment's id with its internal key, so it returned a neighbouring appointment.
jqxScheduler appointment text colour used an approximation to decide between light and dark text; it now uses the WCAG relative luminance formula, so text on custom appointment colours stays readable.
jqxScheduler could trap keyboard focus: Tab cycled between appointments and never left the widget.
Seven framework wrappers did not compile or parse and could not be used at all: jqxLinkButton for React, and jqxBarcode, jqxQRCode, jqxDragDrop, jqxLinkButton, jqxForm and jqxGantt for Vue 3.
The React package declared "sideEffects": false while its only link to the runtime is a side-effect import. Aggressive bundlers dropped it, so production builds failed at runtime with "JQXLite is not defined" while development builds worked.
The Vue tree navigation demo contained two unclosed list items. Vue 2 tolerated the markup; the stricter Vue 3 template compiler rejected the file outright.
jqxDataTable rendered a plain table inside a grid role, which is not a valid structure for assistive technology.
jqxLinkButton forced a button role onto an anchor, hiding it from users navigating by link.
The MCP server generated import paths that do not resolve, so AI-assisted React and Vue users received code that failed on the import line. It also targeted Vue 2, which reached end of life in December 2023, and now targets Vue 3.
Accessibility:
Colour contrast in the base theme - Text and placeholder colours that fell below the WCAG AA 4.5:1 threshold have been corrected, and low-opacity label and disabled-state text was raised.
Tab order no longer hijacked - Positive tabindex values have been removed from jqxGrid and its filter and pager rows, and from jqxExpander, jqxNavigationBar, jqxListBox and jqxTree. Positive values pull elements to the front of the page tab sequence; tab order now follows document order.
Correct roles and states across the suite - Includes tab semantics in jqxTabs, accordion semantics in jqxNavigationBar, range semantics in jqxSlider, jqxProgressBar and jqxGauge, group labelling in jqxRadioButtonGroup, and decorative images correctly hidden in jqxRating.
Security:
Prototype pollution in the deep-merge helper (JQXLite.extend / jqxBaseFramework.extend) - Affects every version before 27.0.0. The public CVE record lists 24.0.1 as the last affected version because that is what the reporter tested; the vulnerable path was unchanged through 26.0.0, so customers on 25.x and 26.x are affected and should upgrade. An object carrying an own "__proto__" key - which is what JSON.parse produces for {"__proto__": ...} - could write properties onto Object.prototype when deep merged. Every widget applies its options through a deep merge, so any application that built widget options from untrusted input reached the vulnerable path without calling extend itself. The key is now rejected before the destination object is read.
jQWidgets v26.0.0Major versionJul 9, 2026
Features
Added a new jqxChat widget.
Brand-new AI chat/assistant widget (jqxchat.js with a provider-agnostic transport supporting Anthropic, OpenAI, and other adapters.
Streaming responses, typing indicator, avatars, timestamps, and a themeable "modern skin" independent of the jqWidgets theme.
Full integration kit (jqxchat-integration/) with server-side streaming proxies (PHP + Node/Express) so API keys stay off the client, plus TypeScript typings.
New API docs (jqxchat-api.htm and pages for chatColorScheme, chatMode, chatProvider, chatRole, etc.).
Added jqxGrid AI features (jqxgrid.ai.js).
aiCommand() - natural language - filter/sort/group.
aiAsk() - conversational analytics over the (filtered) data.
aiSummarize() - summarize selected/visible rows.
aiExplainRow() - explain a row vs. the dataset.
aiClassifyColumn() - AI-generated label per row.
Added new grid options: aiProvider, aiModel, aiProxyUrl, aiHeaders, aiSendRequest, aiMaxRows.
Results fire as gridaiResult/gridaiError events; actions are validated against real columns before being applied (never executed as code).
Added new demos: ai-ask-data.htm, ai-classify-column.htm, ai-command-bar.htm, ai-summarize.htm (JS and Angular versions).
Added a declarative cellTemplate column property (badge, avatar, moustache-style string templates, or a function).
Compiles to a standard cellsrenderer, so sort/filter/page/export keep working unchanged.
Added Angular 22 integration and support.
jqxgrid.js - Accessibility pass: role/aria-label/aria-haspopup have been added to the column-menu button and header filter/sort icons so screen readers announce them properly; added a new columnmenustring localization key.
jqxgrid.filter.js - AI-assisted filter now uses the configurable aiModel option instead of a hardcoded gpt-4.
Styles (jqx.base.css, jqx.darkblue.css, jqx.tailwind.css) - Made substantial additions (theme updates in darkblue/tailwind) for jqxChat and the new cell templates.
Fixes
jqxgrid.selection.js - Fixed a bug where unselecting filtered rows in checkbox-selection mode left holes in selectedrowindexes (via delete), which kept the header checkbox stuck "checked" even with nothing selected; now rebuilds the array cleanly.
jqxgrid.sort.js - Classic (image-based) themes now get the sort-priority number applied to the asc/desc arrow elements too (previously only the general sort icon), and it's cleared correctly when sorting is removed.
jQWidgets v25.1.0Mar 9, 2026
Fixes
Grid & Filtering:
Resolved an issue with jqxDateTimeInput filtering in jqxGrid that caused incorrect theming of the component.
Fixed a filter row rendering issue in jqxGrid when using the Fluent and Tailwind themes.
Corrected a problem affecting Grid cell pinning styling in the Dark, Light, Fluent, and Tailwind themes.
Fixed an issue with Pager rendering in jqxGrid when the pager’s Go To input was re-rendered.
PivotGrid:
Fixed a positioning issue in jqxPivotGrid where the itemsRenderer function could behave incorrectly and render elements in the wrong position.
Calendar:
Addressed a re-rendering issue in jqxCalendar when used with the Tailwind theme, ensuring consistent behavior during dynamic updates.
Scrollbar:
Fixed a Content Security Policy (CSP) related issue in jqxScrollbar introduced during previous refactoring.
jQWidgets v25.0.0Major versionJan 2, 2026
Features
Added Angular 21 support, ensuring compatibility with the latest Angular features, build tooling, and performance optimizations.
Full Content Security Policy (CSP) compliance refactor - All frontend components (scheduler, grid, dialogs, buttons, tables) have been refactored to be fully Content Security Policy (CSP) compliant by removing inline styles, inline event handlers, and any dynamic script execution.
Accessibility - Made WCAG-aligned improvements across all components.
jqxGrid Filtering - Added a new combobox filter in the filter row.
jqxNumberInput - Added an option to hide the prompt when the component is not on focus.
Fixes
jqxForm - Smart AI Paste fix. With some forms, the AI output was not parsed correctly.
jqxNumberInput - Clipboard handling in the simple input mode.
jqxMaskedInput - Val method was not working correctly.
jqxMaskedInput - Did not work correctly with ngModel.
Fixed Tailwind theme rendering issues in some of the components.