Changes since 25.0.0-beta1
Breaking changes
- 
WithStatusLabel now sets field invalid state for consistent visual feedback 
 Commit · Pull request · IssuePreviously, withStatusLabel() only updated the status label but did not set the field's invalid state, resulting in inconsistent visual feedback where fields would not show the red background indicator for validation errors. This fix ensures that withStatusLabel() also delegates to the binder's handleValidationStatus() method, which properly sets/clears the field's invalid state through handleError()/clearError(). This provides consistent visual feedback (red background + status label) across all validation scenarios: - Required field validation - Custom validator failures - Conversion errors - Multiple validators 
- 
Add aria-hidden="true" to hr component by default 
 Commit · Pull request · IssueThe "hr" element is announced as "Horizontal Splitter" by screen readers (e.g., VoiceOver on macOS), but in most cases it's used for visual purposes only. Adding aria-hidden="true" by default improves accessibility by preventing screen readers from announcing it. Users can still override this if needed by removing the attribute. 
New features
- 
Add signal binding to element text (#22406) 
 Commit · Pull request · IssueImplements signal binding to element text. 
- 
Add inline Content-Disposition support with filenames (#21934) 
 Commit · Pull requestAdd inline() methods to DownloadEvent for RFC 6266 compliant inline content disposition headers with filenames. Update all download handlers to include filenames when in inline mode, preventing browser UUID-based filenames. Add containsHeader() to VaadinResponse to prevent overriding custom headers. 🤖 Generated with Claude Code 
- 
Add Image constructor for byte array content 
 Commit · Pull request · IssueAdd a convenience constructor to Image class that accepts byte array content and an image name, simplifying the creation of images from in-memory data. The constructor automatically handles DownloadHandler creation, MIME type detection via URLConnection, and sets inline content disposition for proper browser display. 
- 
Add support for HTML element (#14882) 
 Commit · Pull request · IssueAdd native Vaadin Flow support for the HTML abbreviation element to improve accessibility and eliminate the need for custom workarounds. - Add ABBR constant to Tag interface - Create Abbr component extending HtmlContainer with ClickNotifier - Add comprehensive test suite via AbbrTest - Support for title attribute inherited from HtmlComponent The component provides three constructors for flexible usage: empty, text-based, and component-based initialization. 
- 
Add ElementEffect 
 Commit · Pull requestAdds ElementEffect that does exactly same that ComponentEffect did before, but with Element API. Refactored ComponentEffect to use ElementEffect. Part of #22395 
- 
Allow skipping Vaadin maven plugin execution during a build 
 Commit · Pull request- Added skip parameter to FlowModeAbstractMojo with property "vaadin.skip" - Added early return in execute() method when skip=true - Added informative log message when skipping - Created integration test and unit test for skip functionality - Parameter can be used with: mvn clean install -Dvaadin.skip 🤖 Generated with Claude Code
 
- 
Env variable and one time message to users for usage stats 
 Commit · Pull requestThere is now a GLOBAL opt out in the form of the environment variable. Log message is shown only when executed for the first time. 
Fixes
- 
Set Content-Length header in InputStreamDownloadHandler (#22558) 
 Commit · Pull requestInputStreamDownloadHandler now properly sets the Content-Length HTTP header when provided in DownloadResponse, enabling browsers to display download progress and allowing TransferProgressListener implementations to calculate accurate progress percentages. This aligns behavior with FileDownloadHandler. 🤖 Generated with Claude Code 
- 
Reconcile remaining children to prevent double removal 
 Commit · Pull request · Issue
- 
Move CSS imports from @theme to bootstrap JS file 
 Commit · Pull request · Issue
- 
No empty first line in log 
 Commit · Pull request · IssueAdded message to not log with "" and throwable. 
- 
Store UI reference on start 
 Commit · Pull request · IssueStore UI ref to have a correct ui for TransferProgress even when element is detached during transfer. 
- 
Fix glob pattern in runtime hints registration 
 Commit · Pull request · Issuein order to match resources in subfolders. Also adds some basic test to ensure main resources are accepted 
Chore
- 
Replace glob package with Node.js built-in glob 
 Commit · Pull requestReplace the external glob package dependency with Node.js built-in globSync functionality (available since Node.js 22). Changes: - Remove glob dependency from 3 package.json files - Update imports from 'glob' to 'node:fs' in theme plugins - All glob usage patterns are compatible with built-in implementation 🤖 Generated with Claude Code 🤖 Generated with Claude Code