Upgrading · Docs · Get Started
This is a pre-release for the Vaadin 25.2. We appreciate if you give it a try and report any issues you notice.
Notable Changes in Vaadin 25.2
Flow
Geolocation
New Java API for the browser Geolocation API — useful for "find a store near me", courier tracking, and location-stamped forms. Geolocation.getPosition(...) for one-shot reads, Geolocation.watchPosition(...) for continuous tracking exposed as a signal. Watches auto-stop on detach. Results use sealed types (GeolocationPosition / GeolocationError, plus GeolocationPending for the watcher) so permission-denied, unavailable, and timeout are handled exhaustively. (Live demo)
Clipboard
New Java API for writing text and HTML to the clipboard from a button click or context-menu action. Bind via Clipboard.onClick(component), then .writeText(...), .writeText(field, ...), or .write(ClipboardContent.create().text(...).html(...)). Success/error callbacks available. The per-gesture browser trust requirement is handled for you.
Experimental: client-side triggers and actions
An early framework for binding client-side triggers (DOM events, signals, timers) to actions that run in the browser without a server round-trip unless they need to report back. It is kept package-internal while the API matures and isn't yet meant for general use.
Design System
AI-powered Charts and Grids (Pro)
Preview release. AI-assisted Charts and Grids.
New in existing components
- Multi-Select Combo Box — collapse all chips into a single overflow chip (
setCollapseChips(true)). - Combo Box — auto-scroll to and focus the selected item on open (
setFocusSelectedItem(true)), plus newscrollToIndex(). - Menu Bar and Context Menu — items support tooltips; disabled items can show them via a feature flag.
- Breadcrumbs — new component (Lumo + Aura themes), with overflow collapse.
- Dashboard — fixed row height support.
- Popover —
noTabFocusto skip the popover in tab order.
Now stable (was Preview)
- Master-Detail Layout (API changes since 25.1)
- Slider (API changes since 25.1)
- Badge
- Message List attachments
- Modular Upload components
Copilot
See the Vaadin Copilot documentation.
- Annotate and comment on views — leave comments on any view, attach components for context, and either act on them or hand them to the built-in AI. Comments are saved in a readable project file for async, AI-assisted workflows.
- Customizable components palette — add and reorder named sections, collapse or hide unused ones. Setup is remembered per project.
- More edit-mode polish — redesigned edit-context indicator with sticky header, icon gallery (including menu-item icons), refined alignment and properties panels, compact theme, and new-version notifications.
Testing
Load testing with TestBench (Pro)
Turn existing TestBench (or Playwright) E2E tests into k6 load tests. The toolchain runs your test through a recording proxy, captures the traffic, and generates a k6 script that handles Vaadin specifics (JSESSIONID, CSRF/Hilla CSRF, UI/Push IDs, dynamic node IDs).
Highlights:
- Maven plugin (
testbench-converter-plugin):k6:record,k6:convert,k6:run, plus start/stop-server mojos. - HAR-timing-aware think-time injection for realistic user simulation.
- Declarative ramp-up / steady / ramp-down profiles instead of fixed VU counts.
- Custom thresholds (p95/p99/abortOnFail) and response checks.
- Optional warm-up run before measured load.
- HTML report + JSON results, CSV-backed value collections.
📖 Docs · ⏯️
Example project
Browserless testing
Browserless tests gain:
- Multi-user / multi-tab tests against one shared app in a single test.
- JUnit 5 extensions — no base class required.
- Playwright-style typed locator API; find fields by label.
- Geolocation simulator for positions, permission states, errors, and watch
sessions — no real device needed.
Breaking Changes
Flow
- Gradle:
vaadinPrepareFrontendno longer runs inprocessResourcesduring development builds; the dev server prepares the frontend at runtime. Restore the old behavior withalwaysExecutePrepareFrontend = true. @StyleSheet: bare relative paths now resolve againstcontext://(see Styling above). Absolute and protocol-prefixed values pass through unchanged.
Design System
- Master-Detail Layout and Slider have API changes since their 25.1 preview.
- Master-Detail Layout:
expandreplaced byexpandMaster/expandDetail;overlayContainmentvalue renamed"viewport"→"page". - Default i18n is now exposed via a static getter (not a mixin parameter) across app-layout, avatar, avatar-group, crud, dashboard, date-picker, login, menu-bar, message-input, multi-select-combo-box, rich-text-editor, side-nav, time-picker, upload, and others.
Testing
- Browserless Spring testing support moved to its own module.
- Browserless lookup methods
$/$viewrenamed tofind/findInView.
Changelogs
- Flow (25.2.0-beta1) and Hilla (25.2.0-beta1)
- Design System
- Web Components (25.2.0-beta1)
- Flow Components (25.2.0-beta1)
- TestBench (25.2.0-beta1)
- Browserless Test(1.1.0-beta1)
- Feature Pack(25.0.0)
- Modernization Toolkit (Documentation)
- Feature Pack (Documentation)
- Dragonfly (Documentation)
- Modernization Toolkit Analyzer (Analyzer for Eclipse, Analyzer for Maven)
- Multiplatform Runtime (MPR) (8.0.1)
- Router (2.0.1)
- Vaadin Kits
Official add-ons and plugins:
- Spring add-on (25.2.0-beta1)
- CDI add-on (16.0.1)
- Maven plugin (25.2.0-beta1)
- Gradle plugin (25.2.0-beta1)
- Quarkus plugin (3.2.0-beta1)