This is a Vaadin Flow 25.0 beta pre-release for Vaadin 25.0.
Vaadin Flow 25.0 is based on Jakarta EE 11, uses Spring Framework 7.0 / Spring Boot 4.0 and requires JDK 21+.
See Vaadin Flow V24-V25 upgrade instructions (in draft so far) for help.
Breaking changes
-
Set Java 21 as a baseline
Commit · Pull request -
Spring Framework 7.0 and Spring-boot 4.0 support (vaadin/platform#7327)
Spring Framework 6 and Spring-boot 3 are no longer supported, mainly because of deprecated API removal in Spring Boot.See the Spring Boot Migration Guide for help.
-
Jakarta 11 EE support (vaadin/platform#7326)
This requires upgrade to the new specification versions and later versions of servlet containers/app servers compatible with Jakarta EE 11. -
Flow Gradle plugin uses Gradle 8.14 as a baseline
-
Set minimum Node version to 24
Commit · Pull requestNode 24 becomes the active LTS before 25.0.0 - guaranteeing the longest possible support.
-
Use React 19 by default and remove feature flag for it (#21523)
-
Upgrade Jackson 2 to 3 (#22205)
-
Deprecated API removal (#21396)
See the list of removed classes/methods in the referenced ticket. -
@polymer/polymer dependency is not installed and included by default (#22022)
Use@NpmPackage(value = "@polymer/polymer", version = "3.5.2")
if this is needed for your project or add-on. -
Replace Elemental with Jackson in public API and internally (#21060)
-
Remove VaadinWebSecurity
Commit · Pull request · IssueRemoves deprecated
VaadinWebSecurity
. This leavesVaadinSecurityConfigurer
the only supported build-in API to secure Vaadin application integrated with Spring Security. Follow the instructions in V24-V25 upgrade guide above to start using it. -
Restrict access by default for url-based security (#21831)
URLs not explicitly specified in security configuration changed from being allowed for authenticated users to restricted by default. This requires extra security rules (path matchers) for URLs that were allowed only for authentication users. -
Deny access if Flow layout has no security annotation (#21832)
Flow layouts now require access annotation (e.g.RolesAllowed
) on layout classes. This was added to align with auto-layout default security rules. -
Make server-side modality less strict by default (#22279)
MakesDialog
be less strict and allow background requests to server. Also allows to change this behavior if needed. -
Centralize hierarchy management server-side
Commit · Pull request · Issues 21876, 21877HierarchyMapper
andHierarchicalCommunicationController
have been replaced with the new concept -Cache
. This new class provides a system for storing data in a hierarchical structure while enabling access in a flattened format for client-side consumption.setRequestedRange
andsetParentRequestedRange
have been replaced with a singlesetViewportRange
which spans all hierarchy levels. -
Changes for Binder.validate()
Binder.validate()
implementation has been changed to behave as its javadoc states. In other words,Binder.validate()
no longer fails when bean level validators have been configured but no bean is currently set (i.e.Binder
is used in buffered mode). -
Remove construct-style-sheets-polyfil (#21675)
-
Move component theme behind feature flag
Commit · Pull requestAdd feature flag for component theme files in
themes/themename/components
Closes #21608 Overwrite any autoInjectComponents property with the feature flag state. -
Remove theme url translation
Commit · Pull requestDrop translation of url for theme files.
-
No default theme loaded
Commit · Pull request · IssueDo not load Lumo as the default theme if not defined.
-
Remove setConfiguration from VaadinSession
Commit · Pull request
New features
-
Improvements for new theming system
-
Allow
StyleSheet
onAppShellConfigurator
class
Commit · Pull request · IssueAllows StyleSheet annotation on top of AppShellConfigurator extending class. This allows to load stylesheets globally and also import Vaadin themes in V25 as they are shipped as single CSS files.
-
Css import to web-component and font-face imports to body
Commit · Pull request · IssueOnly add css from CssImport annotation to exported web component, but add any font-face to document.
-
-
Use Jackson to make public API with Bean/List/Map to replace the current JsonValue API
Lets Component and Element public API to support beans, lists and maps. Includes:
-
Add TypeReference support for generic type deserialization across all JSON APIs
Commit · Pull requestAdd
TypeReference<T>
parameter overloads to enable proper deserialization of generic collections likeList<Bean>
andMap<String, Bean>
across all Flow JSON APIs. This eliminates the need for unsafe casting when working with generic return types from JavaScript execution, property access, and event data handling. -
Extend @ClientCallable to support beans and collections for all RPC calls
Commit · Pull requestExtend
@ClientCallable
to support custom beans and generic collections. -
Add Jackson serializers for Component and Node types
Commit · Pull request -
Replace array-based type encoding with
@v
object format
Commit · Pull request -
Add bean deserialization support for executeJs return values
Commit · Pull requestExtends
JacksonCodec.decodeAs()
to deserialize JSON objects into Java beans using Jackson. -
Add bean serialization support
Commit · Pull requestImplements bean-only serialization using Jackson. Beans are serialized on server and handled as standard JS objects on client.
-
Add support for event.detail in DOM events
Commit · Pull requestAdd convenience methods to capture and deserialize event.detail from custom DOM events.
-
-
Signals
-
Clarify SignalEnvironment details
Commit · Pull request -
Make signal environment init optional
Commit · Pull request · Issue -
Extract Signal interface for simple computed signals
Commit · Pull request · Issue -
Add ComponentEffect.bindChildren
Commit · Pull request · IssueAdds helper API ComponentEffect for binding ListSignal to any parent component or element.
-
-
Improvements for TreeGrid
-
Introduce flattened hierarchy format
Commit · Pull requestThe PR introduces a new getHierarchyFormat() method to HierarchicalDataProvider. It can be configured to return either HierarchyFormat#NESTED (default) or HierarchyFormat#FLATTENED (new). The selected format defines in what way the data provider returns hierarchical data and how HierarchicalDataCommunicator should fetch and render it.
-
Add flattened hierarchy support to TreeDataProvider
Commit · Pull request -
Add getItemIndex and getParent to hierarchical data providers
Commit · Pull requestThis PR adds getItemIndex and getParent to HierarchicalDataProviders. This allows the users to define ways to provide item indexes and parents of items efficiently. This allows the TreeGrid component to implement scrollToItem functionality for any data provider without breaking existing implementations.
-
-
Element namespace support
Commit · Pull requestMake it possible to set a namespace for elements. Adds automatic namespace for svg and math tags.
-
Add convenient API to set items
Commit · Pull request · IssueAdd convenient API to set items with ListDataView#setItems(Collection).
-
Add Exception to DownloadResponse and TransferContext
Commit · Pull request · IssueAdds DownloadResponse#exception and TransferContext#exception of type java.lang.Exception. Updates DownloadHandlers to fill exception automatically in case of IOException (or RuntimeException, or error in DownloadResponse for InputStreamDownloadHandler).
-
Enable client-side logging in production via localStorage flag (#17935)
Commit · Pull requestAllow dynamic control of browser console logging in production mode by checking localStorage for "vaadin.browserLog" flag. Developers can now enable client-side logging in production using: localStorage.setItem('vaadin.browserLog', 'true') This helps with debugging production issues without requiring JAR modifications or rebuilds.
-
Remove legacy frontend folder fallback
Commit · Pull request · Issue -
Add ModalityMode enum
Commit · Pull requestIntroduce ModalityMode with three modes: STRICT, VISUAL and MODELESS.
-
Add default getDefaultLocale method
Commit · Pull request · IssueLets users of I18nProvider declaratively choose default locale.
-
Add setChildComponentModal(ModalityMode) to UI
Commit · Pull request -
Conditionally load workbox dependencies only when PWA is enabled
Commit · Pull requestMove workbox-core and workbox-precaching from default dependencies to a new workbox folder that is only loaded when PWA is enabled. This reduces unnecessary dependencies for projects that don't use PWA functionality.
-
Make Page.addStyleSheet() return Registration for dynamic removal
Commit · Pull requestEnables dynamic removal of stylesheets added via Page.addStyleSheet() methods by returning a Registration object. When Registration.remove() is called, the corresponding stylesheet is removed from the DOM on the client side.
-
Make RequestUtil#getUrlMapping public for manual security configuration
Commit · Pull request -
Modular feature flag system using Service Provider Interface
Commit · Pull request · IssueRefactored feature flags to use Service Provider Interface (SPI) pattern, allowing each module to define its own feature flags that are dynamically loaded at runtime. This eliminates the need to hardcode all feature flags in the FeatureFlags class.
Known issues
-
Not being able to import third-party stylesheet from npm package with
StyleSheet
(#22475) -
Hot reload issues for stylesheets imported with
StyleSheet
(#22465)
The main issue with the file directly referenced fromStyleSheet
has been fixes, though there are at least two things to improve:- hot reload changes made in references stylesheets (via
@import
) - sometimes changes are not hot reloaded.
- hot reload changes made in references stylesheets (via