Changes since 25.1.0-alpha3
Breaking changes
-
Set proper value of isFromClient when using Focusable focus() and blur()
Commit · Pull request -
BeforeEvent target as extends Component
Commit · Pull request · IssueHave the navigationTarget in BeforeEvents Be of type Class instead of only Class
New features
-
Add Html(signal) and bindHtmlContent(signal)
Commit · Pull request -
Add bindWidth(Signal) and bindHeight(Signal)
Commit · Pull request · IssueAdds HasSize::bindWidth(Signal) and HasSize::bindHeight(Signal).
-
Add customizable sync error messages for session desync scenarios
Commit · Pull request · IssueWhen client and server message IDs get out of sync (e.g., after abrupt pod termination), a specific MessageIdSyncException is now thrown instead of UnsupportedOperationException. Developers can customize the error notification via SystemMessages: - setSyncErrorCaption/Message/URL for custom content - setSyncErrorNotificationEnabled(false) for silent page refresh
-
Add bindReadOnly(Signal)
Commit · Pull request · IssueAdds HasValue::bindReadOnly(Signal).
-
Add HasValidation::bindErrorMessage and bindInvalid
Commit · Pull request -
Add HasPlaceholder::bindPlaceholder(Signal)
Commit · Pull request
Fixes
-
Refresh error views automatically on hotswap
Commit · Pull requestWhen a class breaks during development, Flow shows an error view. Previously, when the class was fixed and hotswapped, the error view remained visible because the hotswap system only refreshed views that used the changed class in their route chain. This fix adds ErrorViewHotswapper plugin that detects when an error view is displayed (by checking if the current view implements HasErrorParameter) and triggers a browser refresh on any hotswap. The refresh re-navigates to the original URL, allowing the fixed code to be properly loaded. Adds unit tests to verify that ErrorViewHotswapper correctly: - Triggers UI refresh when an error view is shown during hotswap - Does not trigger refresh for normal views during hotswap
-
Handle translation requests when session is expired
Commit · Pull request · IssueImplement SessionExpiredHandler in TranslationFileRequestHandler to serve translations even when no active session exists. This allows i18n requests to work correctly with stateless authentication.
-
Preserve URL-encoded characters in wildcard route parameters
Commit · Pull request · IssueChanges: - Client: Remove premature decoding of pathname in Flow.ts to preserve encoded characters like %2F in the URL sent to server - Server: Add PathUtil.getSegmentsListWithDecoding() method that splits path by "/" then decodes each segment individually - Server: Update RouteSegment to use segment decoding for route matching This fix ensures that URL-encoded slashes (%2F) and other special characters in wildcard parameters are properly decoded while still distinguishing them from literal path separators. For example: - /wild/a/b/c creates 3 segments: ["a", "b", "c"] - /wild/a%2Fb%2Fc creates 1 segment that decodes to: ["a/b/c"] Previously, the client decoded the entire pathname causing %2F to become "/" which the server then incorrectly split as path segments, resulting in data loss. Tests added: - PathUtil segment decoding with various encoded characters - Wildcard parameter routing with encoded slashes and special chars - URL generation documentation for pre-encoding requirements do not decode baseURI as location is not handled decoded ---------
-
Respect configured nodeFolder in DevModeInitializer
Commit · Pull request · IssueFlow ignored the configured nodeFolder and always attempted to resolve and download its own Node.js distribution. When nodeFolder is explicitly set, Flow should rely on the Node installation from that directory and avoid triggering the Node download logic. This change ensures that Node resolution correctly honors the nodeFolder configuration in DevModeInitializer.
-
Do not try to compute hash for frontend folders
Commit · Pull requestinstead of a file.