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