Changes since 25.1.5
New features
-
Support delaying installation of recently published npm packages (#24334) (CP: 25.1)
Commit · Pull requestAdds a minimum package age check (default disabled) so that npm, pnpm and bun are instructed not to install package versions newer than the configured threshold. This mitigates supply-chain attacks where a compromised version is briefly published to the registry. The threshold is exposed via Options#withMinimumPackageAgeDays(int); setting it to 0 disables the check.
-
Expose application properties via
OptionsforTypeScriptBootstrapModifierconsumers (#24073) (CP: 25.1)
Commit · Pull requestTypeScriptBootstrapModifierimplementations (e.g., Copilot) need access > to application properties to conditionally modify bootstrap TypeScript. Currently, the Copilot script is injected in dev mode regardless of > whether Copilot is enabled in the project configuration.
AddwithApplicationConfigurationtoOptionsand property accessor > methods (getApplicationStringProperty,getApplicationBooleanProperty) that returnOptional.empty()when configuration is unavailable (build > time). WireApplicationConfigurationfromDevModeInitializer.
Fixes #24055
Fixes
-
Load Image/IFrame sources when disabled (#24346) (CP: 25.1)
Commit · Pull request · IssueWhen an Image or IFrame backed by a DownloadHandler lives inside a disabled component, the browser receives a 403 and the resource never loads. Image.setSrc(DownloadHandler) and IFrame.setSrc(DownloadHandler) now allow the resource to be served regardless of the owner's enabled state, since these sources are fetched passively as part of rendering rather than as a user action.
-
Loading state muting based on trigger events (#24230) (CP: 25.1)
Commit · Pull requestThis change reverts the eager removal of loading state introduced by #23229, as it causes the indication to disappear during ongoing loading. As a replacement, it re-introduces debouncing tracking of active requests, and adds event-based silencing of the loading indication to avoid flashing the indicator for high-frequency UI interactions.
In addition, instead of setting loading state usingConnectionState.setState()directly, the proper connection state methods (loadingStarted(),loadingFinished()) are used to avoid interference with loading state for requests from other sources outside Flow client. -
Package json hash difference between linux and windows (#24321) (CP: 25.1)
Commit · Pull requestWindows and Linux generated a different hash for the package json content as jackson default indenter used system line separator.
Fixes #24305 -
NPE when web push subscription is expired (#24310) (CP: 25.1)
Commit · Pull requestWhen the push service reports a subscription as expired,
WebPush.sendNotificationthrewNullPointerExceptioninstead of the intendedWebPushException.
Remove a leftover reference to an unassignedHttpResponselocal variable that was no longer populated after the migration tocom.interaso.webpush.
Fixes #24306 > -
Install pnpm deps in hoisted mode + declare @babel/types (#24288) (CP: 25.1)
CommitAdjusted for 25.1's dep-graph: @babel/types is pinned to 7.28.5 to match @babel/preset-react's version on this branch (main pins to 7.29.0 to match @babel/core which is not declared on 25.1). @babel/core and @babel/plugin-transform-react-jsx-development from the main commit are not added — they are not declared as direct deps on 25.1 and the React function location plugin only imports @babel/types. The .npmrc and FrontendTools changes that switch pnpm to hoisted mode apply unchanged.
-
Wrong existence check in getStaticResource (#24283) (CP: 25.1)
Commit · Pull requestOn Jetty 12.1.9, requests for static resources packaged inside a JAR (e.g.
vaadinPush.jsfromflow-push) fail withFileSystemNotFoundException.VaadinServletService.getStaticResourceverifies the URL returned byServletContext.getResourceviaPath.of(url.toURI()), which for ajar:file:...!/entryURI requires the JAR's NIOFileSystemto already be mounted in the JVM-wide cache. Jetty 12.1.8 incidentally kept those filesystems mounted during resource resolution; 12.1.9 no longer does, sogetFileSystemthrows and the existingcatch (URISyntaxException)lets the unchecked exception escape, producing HTTP 500.
Probe the URL withURL.openStream()instead.JarURLConnectionandFileURLConnectionusejava.util.jar.JarFile/java.io.Filedirectly and are independent of the NIOFileSystemscache, so the check works uniformly forfile:andjar:file:URLs and on every Jetty 12 build. The catch is broadened toIOException, covering both missing files (the original Jetty 12 workaround) and missing JAR entries.