Releases: vaadin/flow
Vaadin Flow 25.0.0-beta5
Changes since 25.0.0-beta4
Breaking changes
-
Enable productionMode with Gradle's bootJar
Commit · Pull requestFlow Gradle plugin enable productionMode automatically when run with bootJar or bootBuildImage task. -Pvaadin.productionMode=false overrides automation.
Vaadin Flow 25.0.0-beta4
Changes since 25.0.0-beta3
Breaking changes
-
Remove elemental-json from flow-server
Commit · Pull requestRemove all elemental-json usage from flow-server module (excluding flow-client which still uses it for GWT). This removes internal APIs and updates all code to use Jackson 3 exclusively. Changes: - Delete JsonUtils.java and JsonSerializer.java (internal APIs) - Remove elemental-json bridge methods from JacksonUtils.java - Remove gwt-elemental dependency from flow-server/pom.xml - Update EventData documentation to remove elemental.json.JsonValue - Update VaadinServletContextInitializer package exclusions - Update RouterLinkView test to use Jackson ObjectNode - Update DefaultApplicationConfigurationFactoryTest to use JacksonUtils BREAKING CHANGE: Internal APIs JsonUtils and JsonSerializer have been removed. Applications should use Jackson 3 types (JsonNode, ObjectNode, ArrayNode) and JacksonUtils methods instead. The EventData annotation no longer supports elemental.json.JsonValue - use JsonNode instead.
-
NPM assets available under assets
Commit · Pull request · IssueCopy all npm assets to sub folder assets in VAADIN/static and accept redirect for /assets/{filepath} to prepend VAADIN/static to the requested file. This reverts commit 9ae2190.
-
Change Dependency.toJson() to return Jackson ObjectNode
Commit · Pull requestServer-side code now uses Jackson's automatic bean serialization via valueToTree(). Client-side GWT tests use helper methods to manually construct elemental JSON when needed for testing.
New features
-
Add SignalPropertySupport helper
Commit · Pull request · IssueProvides a SignalPropertySupport helper class that encapsulates the state management needed for making getXyz, setXyz, and bindXyz behave in the same way as Signal for Element properties.
-
Add Tailwind CSS support behind the feature flag
Commit · Pull request · Issue -
Add UI.ensureCurrent() to provide better error message if UI is not available
Commit · Pull requestAdd a new UI.ensureCurrent() method that returns a non-null UI instance or throws IllegalStateException with a helpful error message guiding developers to use UI.access() for background threads. This provides a cleaner alternative to the UI.getCurrent() + null check pattern and makes code more explicit about requiring an active UI context.
Fixes
-
CssImport in webcomponentexporter should not show in document
Commit · Pull request · IssueAny CssImport added to a WebComponentExporter should only be applied to the WebComponent and not apply to elements outside the component.
-
Wait for dev server in DevModeNoClassCacheIT to prevent flaky test
Commit · Pull requestThe test was timing out waiting for the "last-span" element because it didn't wait for the Vite dev server to fully initialize before checking for DOM elements. Adding waitForDevServer() ensures the dev server, Spring Boot app, and view rendering complete before assertions.
-
Extract filename and content type from headers in StreamReceiverHandler for XHR uploads
Commit · Pull requestStreamReceiverHandler.doHandleXhrFilePost() was using hardcoded "unknown" values for both filename and content type, even though the headers were available in the request. This fix: - Extracts filename from X-Filename header (with proper decoding) - Extracts content type from Content-Type header - Creates reusable helper methods in TransferUtil to avoid duplication with the existing XHR upload handling code (from commit 1c777e1)
-
Use content type from header and name from X-Filename/Content-Disposition for XHR uploads
Commit · Pull requestUses the filename from a X-Filename header (set by vaadin-upload). The filename is encoded using JavaScript's encodeURIComponent and decoded on the server using UrlUtil.decodeURIComponent (RFC 3986).
-
Flush outputStream after write
Commit · Pull requesttransfer() method should call flush() on the OutputStream before returning to ensure all buffered data is actually written
-
Invalid generated javascript
Commit · Pull request · Issue -
Use ResourceProvider to search for frontend resources
Commit · Pull request · IssueUsing resource provider to search for frontend resources prevents potential issues with environment that use multiple classloaders, like Quarkus. Every environment can provide its own resource provider implementation that uses the best approach for loading resources from classpath.
-
Do not use undefined this.log
Commit · Pull request
Vaadin Flow 24.9.5
Changes since 24.9.4
Fixes
-
Flush outputStream after write (#22660)
Commit · Pull requesttransfer() method should call flush() on the OutputStream before returning to ensure all buffered data is actually written
-
Use ResourceProvider to search for frontend resources (#22627)
Commit · Pull request · IssueUsing resource provider to search for frontend resources prevents potential issues with environment that use multiple classloaders, like Quarkus. Every environment can provide its own resource provider implementation that uses the best approach for loading resources from classpath.
-
Respect spring.devtools.livereload.enabled property (#22624)
Commit · Pull request · IssueWhen developers set spring.devtools.livereload.enabled=false, the application should not attempt to establish a WebSocket connection to the Spring Boot livereload server. This commit fixes the issue by checking the enabled property at the source (SpringDevToolsPortHandler) and propagating the result through the entire chain: - SpringDevToolsPortHandler: Only assigns port if livereload enabled - IndexHtmlRequestHandler: Only includes liveReloadPort in config if set - vaadin-dev-tools.ts: Only creates WebSocket connection if port exists
Vaadin Flow 24.8.12
Changes since 24.8.11
Fixes
-
Flush outputStream after write (#22660)
Commit · Pull requesttransfer() method should call flush() on the OutputStream before returning to ensure all buffered data is actually written
-
Use ResourceProvider to search for frontend resources (#22627)
Commit · Pull request · IssueUsing resource provider to search for frontend resources prevents potential issues with environment that use multiple classloaders, like Quarkus. Every environment can provide its own resource provider implementation that uses the best approach for loading resources from classpath.
Vaadin Flow 25.0.0-beta3
Changes since 25.0.0-beta2
New features
-
Add varargs-based scrollIntoView API
Commit · Pull requestAllows doing
component.scrollIntoView(ScrollIntoViewOption.Behavior.SMOOTH, ScrollIntoViewOption.Block.END, ScrollIntoViewOption.Inline.CENTER);without creating an intermediate options object. Consistent with thefocus(...)API -
Add preventScroll and focusVisible support to Focusable
Commit · Pull request · IssueAdd FocusOption... to focus so you can do e.g. focus(FocusOption.VISIBLE) or focus(FocusOption.NOT_VISIBLE, PreventScroll.ENABLED)
-
Add signal binding for attribute in Element
Commit · Pull request · IssueIntroduces bindAttribute(String attribute, Signal signal) method in Element to bind a Signal to attribute.
Fixes
-
The default for livereload in Spring Boot 4 RC1 is false
Commit · Pull request -
Update stylesheet when a referenced resource changes
Commit · Pull request · Issue -
Prevent AppShellRegistry validation failure for StyleSheet.Container
Commit · Pull request · IssueWhen AppShellRegistry validates offending annotation on other compoent classes it ignore the StyleSheet annotation. However, if a component has multiple StyleSheet annotations on it, the validation fails. This change also ignores StyleSheet.Container annotation during validation
-
Respect spring.devtools.livereload.enabled property
Commit · Pull request · IssueWhen developers set spring.devtools.livereload.enabled=false, the application should not attempt to establish a WebSocket connection to the Spring Boot livereload server. This commit fixes the issue by checking the enabled property at the source (SpringDevToolsPortHandler) and propagating the result through the entire chain: - SpringDevToolsPortHandler: Only assigns port if livereload enabled - IndexHtmlRequestHandler: Only includes liveReloadPort in config if set - vaadin-dev-tools.ts: Only creates WebSocket connection if port exists
Vaadin Flow 25.0.0-beta2
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
Vaadin Flow 2.13.0
No changes since 2.13.0-beta1
New features
- Component tracking and improved error message when node is moved to another UI
Commit · Pull request
Fixes
- Add try-catch to removing UIs (#22200) (#22323)
Commit · Pull request
Vaadin Flow 2.13.0-beta1
Changes since 2.12.3
New features
- Component tracking and improved error message when node is moved to another UI
Commit · Pull request
Fixes
- Add try-catch to removing UIs (#22200) (#22323)
Commit · Pull request
Vaadin Flow 24.9.4
Changes since 24.9.3
Fixes
-
Set Content-Length header in InputStreamDownloadHandler (#22558) (#22564)
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
-
No empty first line in log (#22523)
Commit · Pull request · IssueAdded message to not log with "" and throwable.
-
Store UI reference on start (#22532)
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 (#22531)
Commit · Pull request · Issuein order to match resources in subfolders. Also adds some basic test to ensure main resources are accepted
Vaadin Flow 24.8.11
Changes since 24.8.10
Fixes
-
Set Content-Length header in InputStreamDownloadHandler (#22558) (#22564)
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
-
Store UI reference on start (#22532)
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 (#22531)
Commit · Pull request · Issuein order to match resources in subfolders. Also adds some basic test to ensure main resources are accepted