3.0.0 Feature Highlights:
- TypeScript views and client-side routing, compatible with Java views and server-side routing (#6218)
- Strongly-typed secure Java backend access from TypeScript views (#6229)
- The app can start and run without any server-side UI state (#6139)
Other Significant Changes in 3.0.0:
- The Java API to configure the contents of the bootstrap page is changed to support stateless applications
- An experimental feature of using
pnpm
instead ofnpm
for faster frontend builds: thepnpm.enable
flag (#6966) - The order of execution for the
BeforeEnter
listeners is changed: now they start with the top parent (#4595) - All features of Flow 2.2 (up to 2.2.0.alpha12) are included as well.
Breaking Changes in 3.0.0:
- The list of supported browsers is updated to match the next LTS target (IE11, Safari 12 and older, Edge 18 and older are no longer supported) (#6856, #7424)
- The APIs deprecated in Flow 2.x are removed (#6510)
- Property synchronization methods in
Element
are replaced with similar API inDomListenerRegistration
:getSynchronizedPropertyEvents
,getSynchronizedProperties
,removeSynchronizedPropertyEvent
,removeSynchronizedProperty
,addSynchronizedPropertyEvent
,addSynchronizedProperty
,synchronizeProperty
. - JavaScript execution APIs
executeJavaScript
andcallFunction
inElement
andPage
are replaced with similarly named methods that give access to the return valueexecuteJs
andcallJsFunction
: - Miscellaneous
Element
methods:Element(String, boolean)
,addEventListener(String, DomEventListener, String...)
- Device and platform detection methods
WebBrowser#isIOS()
,WebBrowser#isIPad()
,BrowserDetails#isSafariOrIOS()
,BrowserDetails#isIOS()
,BrowserDetails#isIPad()
are replaced with method inExtendedClientDetails
:isIPad()
,isIOS()
- Methods
JsModule#loadMode()
andPage#addJsModule(String, LoadMode)
for setting the load mode of JsModule are removed since it does not function with JavaScript modules. - The construction methods
BeforeEvent(NavigationEvent, Class<?>)
andBeforeEvent(Router, NavigationTrigger, Location, Class<?>, UI)
inBeforeEvent
are replaced withBeforeEvent(NavigationEvent, Class, List)
andBeforeEvent(Router, NavigationTrigger, Location, Class, UI, List)
- Methods
getUrl()
,getUrlBase()
andgetRoutes()
inRouter
are replaced with methodsgetUrl()
,getUrlBase()
andgetAvailableRoutes()
inRouterConfiguration
. Theresolve()
method inRouter
is replaced with theresolve()
method inRouteUtil
. ThegetRoutesByParent()
method inRouter
is removed and has no replacement. ServletHelper
is replaced withHandlerHelper
ExecutionCanceler
is replaced withPendingJavaScriptResult
- The
getBodyAttributes
method inAbstractTheme
,Lumo
andMaterial
is replaced withgetHtmlAttributes
- The
removeDataGenerator
method inHasDataGenerators
andCompositeDataGenerator
is removed in favor of using the registration returned fromaddDataGenerator(DataGenerator)
- The mehtods
preventsDefault
andstopsPropagation
inShortcutRegistration
are replaced withisBrowserDefaultAllowed
andisEventPropagationAllowed
- The
safeEscapeForHtml
method inVaadinServlet
is removed in favor of usingorg.jsoup.nodes.Entities#escape(String)
- The static method
getInstance
inApplicationRouteRegistry
is removed in favor of the instance method. - The protected instance method
getApplicationUrl
fromVaadinServlet
is removed
- Property synchronization methods in
Known limitations in 3.0.0 (to be fixed in 3.0.x)
- When using the Vaadin Multiplatform Runtime navigation from Vaadin 15 to Vaadin 7/8 views is broken (#7540)
- The
BeforeEnter.rerouteTo()
Java API cannot re-route to TypeScript views (#6490, #7578) - The
pnpm
mode works only when the usage statistics collection is enabled (#7663) - Links to
StreamResource
s require an extrarouter-ignore
attribute to work (#7623)