What's Changed
Breaking Changes 💥
- Convert widgets to classes + switch to esbuild / ESM + load packages from NPM by @blutorange in #12717
- Fixes #11915 Remove HTML5_COMPIANCE and other 4.0 upgrades by @tandraschko in #13417
- Fix #12519: Remove NestedSelectItem/PF by @melloware in #13487
- Fix #13531: Remove Separator by @melloware in #13536
- Fix #13522: GraphicImage default cache to false by @melloware in #13558
- improve modal dialog scrollability by @BalusC in #13575
- Fix #13651: PrimeFlex 4.0.0 by @melloware in #13652
- Fix #13531: Separator menu style removal by @melloware in #13703
- Behavior: Fix the spelling of Unobtrusive and Obtrusive by @melloware in #14556
Security 🔒
- Fix #13347: Add CycloneDX SBOM by @melloware in #13349
- SelectOneRadio can select disabled items by @EvanKnowles in #13956
- Fix #14012: ImageCompare remove Flickr by @melloware in #14013
- Fix #14656: Schedule XSS fix by @melloware in #14658
- Fix #14810: Schedule add escape property to allow HTML tooltips safely by @melloware in #14815
- CVE-2026-46625 Bump js-cookie from 3.0.5 to 3.0.7 in /primefaces/src/main/frontend by @dependabot[bot] in #14926
Performance⚡
- Refactor: precompile frequently used regex patterns for better performance by @kamilkrzywanski in #13870
- MoveScriptsToBottom optimizations: cpu & memory by @melloware in #14784
- LangUtils: optimizations + minor warnings fix by @melloware in #14791
- NativeFileUploadDecoder optimization by @pizzi80 in #14796
New Features & Enhancements 🎉
- Fixes #13463 Improve JPALazyDataModel by @tandraschko in #13464
- Fix #13480: ProgressBar add start and progress AJAX events by @melloware in #13481
- Refactor InFilterConstraint to leverage EqualsFilterConstraint by @FlipWarthog in #13606
- Fix #13616: Spinner support right-to-left by @melloware in #13628
- Fix #13666 - Dialog fit viewport width in addition to height by @SkylerMime in #13667
- Add expand mode to treetable by @kamilkrzywanski in #13862
- AccordionPanel: key-based active state (#13890) by @jungm in #13901
- Fix #13858: Extending validateFile with allowMediaTypes by @DazzlingBob in #13973
- Fix #13990: Theme dialog footer button margin by @melloware in #13992
- Fix #13836: Release workflow and Sonatype publisher upgrade by @melloware in #13840
- Implement #13700: if oncomplete represents a ValueExpression then run it via executeScript() after action event by @BalusC in #14059
- Switch to Faces annotations by @melloware in #13702
- #14084 LocaleUtils: replace deprecated API-usage by @christophs78 in #14085
- fix(#14067): InputNumber: move autoNumeric updating from blur to change event by @jungm in #14068
- Fix #14150: Apply default script-src 'self' when CSP_REPORT_ONLY_POLICY is incomplete; update docs by @DazzlingBob in #14151
- Tree table dbl select by @mnyakushev in #14165
- Add scroll direction CSS classes
ui-scrollable-x/ui-scrollable-yto scrollBody of Treetable and Datatable by @mrcasio in #14230 - Fix 14239: CSP_POLICY Expression Language support by @Maverick-501 in #14240
- Fix #14239: EL expression improvements by @melloware in #14242
- Fix 14276: CSP Expression Language support by @Maverick-501 in #14277
- Sticky: add new stickyTopAt property by @NicolaIsotta in #14311
- Fix #14237: GMap allow asynchronous loading of the Google API JS by @melloware in #14319
- Fix #14332: SelectOneButton add custom layout by @melloware in #14333
- Fix #14086: MessageFactory remove Java8 Unicode handling no longer necessary by @melloware in #14337
- Fix #10706: SelectManyButton custom rendering by @melloware in #14341
- Fix #239: SplitButton add dynamic option by @melloware in #14356
- Fix #14112: ColumnToggler add showSelectAll property to show/hide checkbox by @melloware in #14358
- Fix #13714: MenuButton add new buttonIcon property for icon only display by @melloware in #14362
- Fix #14071: ColumnToggler respect table draggableColumns by @melloware in #14366
- added CDK by @tandraschko in #14361
- #14406: Add TreeTable filterPrune descendants mode with pruning logic / tests by @jxmai in #14439
- Fix #14479: TabView add new widget selectTabById(id) method by @melloware in #14498
- Fix #14474: Picklist dragDrop property to disable transfer/reordering by @melloware in #14494
- Fix #14519: PrimeFaces.version() return the value by @melloware in #14520
- Fix #14537: Dialog/ConfirmDialog dismissibleMask property to match PrimeVue/React/Ng by @melloware in #14575
- Fix #14584: Paginator format integers for Locale by @melloware in #14586
- Fix #14706: Panel set cursor:pointer on toggleHeader by @melloware in #14717
- Fix #14719: SelectOne always recalculate panel width by @melloware in #14792
- Fix #14775: button components: add new size property by @NicolaIsotta in #14797
- Fix type of rowKey in DataTableRenderer by @jbrower2 in #14821
- Fix #14863: SelectOneMenu DOM with grouping fix by @melloware in #14899
- Fix #14450: StaticMessage add ability for custom icon by @melloware in #14908
- FileUpload: add new "header" facet by @NicolaIsotta in #14897
- BlockUI: don't hide on redirects by @NicolaIsotta in #14914
- Snapshot Publish Workflow by @melloware in #14936
- Fix 14965: ImageCropper: Do not allow viewMode="0" by @Maverick-501 in #14968
- Fix #14532: Support to icons PanelMenu by @tiagoLachman in #15018
Accessibility ♿
- Fix #13538: SplitButton aria menu button fixes by @melloware in #13561
- Fix #13521: Tooltip allow multiple events and ESC to close by @melloware in #13555
- Fix #13790: GraphicImage render alt="" when alt is not set by @melloware in #13796
- Fix #13793: Carousel add aria-labels by @melloware in #13799
- Fix #13813: TristateCheckbox ARIA accessibility by @melloware in #13815
- Fix #13847/#13848/#13849: ARIA accessibility issues by @melloware in #13851
- Fix #13846: DatePicker improve accessibility of date cells by @melloware in #13856
- Fix #13854: Table render with ARIA role="group" by @melloware in #13866
- Fix #13883: Datatable respect ariaRowLabel by @melloware in #13889
- Fix #13905: Paginator aria-label for navigator by @melloware in #13932
- Fix #13946: ToggleSwitch proper use of aria-checked by @melloware in #13947
- Fix #13989: SelectOneButton ARIA role by @melloware in #13996
- Fix #14006: Menu keyboard focus non-disabled item by @melloware in #14011
- Fix #14183: AutoComplete ARIA f ...