Changes since 25.1.0-alpha7
Breaking changes
-
Rename Signal value()/value(T) to get()/set(T)
Commit · Pull requestRename the signal value getter from value() to get() and the setter from value(T) to set(T) for a more intuitive and conventional API. This affects Signal, WritableSignal and all implementations across the codebase including Javadoc, tests, and IT views.
-
Make two-way signal bindings explicit with a write callback parameter
Commit · Pull requestChange bindValue(WritableSignal) to bindValue(Signal, SerializableConsumer) so that two-way bindings require an explicit write-back callback. This forces developers to acknowledge when user input is received, providing an additional layer of safety. The first parameter is a read-only Signal for the signal-to-component direction. The second parameter is the callback for propagating value changes back to the signal. After invoking the callback, the signal is re-consulted via peek() and if the value differs, the component reverts to the signal's value. A null callback creates a read-only binding that throws on setValue while attached.
New features
- Make shared signals Serializable
Commit · Pull request · Issue
Fixes
-
Restore backwards-compatible 2-parameter constructors for BlurEvent and FocusEvent
Commit · Pull requestThe 3-parameter constructors with @eventdata broke backwards compatibility for code that directly instantiates these events. Re-add the original (Component, boolean) constructors alongside the @eventdata variants, matching the pattern used by ClickEvent, KeyDownEvent, etc.
-
Exclude JUnit 5 engines from Failsafe classpath in IT tests
Commit · Pull requestThe centralized JUnit 5 dependencies in the root POM caused Failsafe to auto-switch from the JUnit 4 provider to the JUnit Platform provider. This broke TestBench's ParallelRunner parameterization, losing the [any_Chrome_] test name suffixes and (production) variant reporting. Force junit 4 for ITs for now
-
Update tailwind path
Commit · Pull request · IssueMake the tailwind templat import target not ./ but from Frontend so we do not get faulty imports in generated.
-
Wait for async browser navigation in HistoryIT to prevent flakiness
Commit · Pull requesthistory.back() and history.forward() are asynchronous browser operations. The test was asserting URLs and status messages immediately after clicking back/forward buttons, causing intermittent failures. Replace direct assertEquals assertions with waitUntil polling via waitForUrl() and waitForStatusMessages() helpers, matching the pattern used by BackNavIT.
-
Reset loading indicator state after each request
Commit · Pull request · IssueChanges the loading indicator to reset after each individual request completes, rather than staying visible across rapid successive requests. Previously, the timer would continue across multiple requests, causing the indicator to show even when each individual request was fast. Now each request gets independent timing - if a request completes before the threshold (default 450ms), the indicator never appears. This fixes the issue with cursor tracking and other scenarios involving many rapid server calls.
-
Prevent NPE in ShortcutRegistration when lifecycleOwner is null
Commit · Pull request · IssueAdd null guard in fireShortcutEvent() to handle the case where a KeyDown event fires after the shortcut's lifecycle owner has been detached and remove() has set lifecycleOwner to null.
-
Detect theme component CSS changes even without theme.json
Commit · Pull request · IssuethemeShadowDOMStylesheetsChanged only scanned for components/ folders in themes discovered via theme.json. Themes without a theme.json (but with a components/ directory) were silently skipped, so the dev bundle was never rebuilt to include their component styles. Always include the main theme name when scanning for components/ folders, regardless of whether theme.json exists.
-
Add junit-vintage-engine to flow-server to restore JUnit 4 test discovery
Commit · Pull requestThe signals module merge (be2f0b2) added JUnit 5 Jupiter dependencies to flow-server, causing Surefire to use the JUnit Platform provider which only discovers JUnit 5 tests. Without junit-vintage-engine, the ~271 JUnit 4 test classes were silently skipped.
-
Set required Java and Maven versions in flow-maven-plugin
Commit · Pull requestPrevents potential issues with Maven versions >= 3.9.12 if a Java version newer than the supported one is used to package the Maven plugin.